From 0c0737942c0e5aef3cfd29c6e981fa86915f5ac4 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Mon, 11 Aug 2014 19:21:43 +0200 Subject: [PATCH] Make resolver-dnsjava, -minidns initializer and OSGi components. There is really no need to treat them different then resolver-javax. This also allows the removal of the DNSUtil.init() method. --- build.gradle | 2 +- .../smack/SmackConfiguration.java | 4 --- .../initializer/SmackAndOsgiInitializer.java | 8 ++++++ .../org/jivesoftware/smack/util/DNSUtil.java | 27 ------------------- .../org.jivesoftware.smack/smack-config.xml | 2 ++ .../util/dns/dnsjava/DNSJavaResolver.java | 20 ++++++++++---- .../smack-resolver-dnsjava-components.xml | 6 +++++ .../smack/util/dns/javax/JavaxResolver.java | 13 ++------- .../util/dns/minidns/MiniDnsResolver.java | 17 ++++++++++-- .../smack-resolver-minidns-components.xml | 6 +++++ 10 files changed, 55 insertions(+), 50 deletions(-) create mode 100644 smack-resolver-dnsjava/src/main/resources/org.jivesoftware.smack/smack-resolver-dnsjava-components.xml create mode 100644 smack-resolver-minidns/src/main/resources/org.jivesoftware.smack/smack-resolver-minidns-components.xml diff --git a/build.gradle b/build.gradle index d259799b3..bec6ce700 100644 --- a/build.gradle +++ b/build.gradle @@ -238,7 +238,7 @@ subprojects { } } -['smack-resolver-javax', 'smack-sasl-javax', 'smack-sasl-provided'].each { name -> +['smack-resolver-javax', 'smack-resolver-dnsjava', 'smack-resolver-minidns', 'smack-sasl-javax', 'smack-sasl-provided'].each { name -> project(":$name") { jar { manifest { diff --git a/smack-core/src/main/java/org/jivesoftware/smack/SmackConfiguration.java b/smack-core/src/main/java/org/jivesoftware/smack/SmackConfiguration.java index 1a20f6e96..9e996058d 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/SmackConfiguration.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/SmackConfiguration.java @@ -38,7 +38,6 @@ import org.jivesoftware.smack.compression.XMPPInputOutputStream; import org.jivesoftware.smack.initializer.SmackInitializer; import org.jivesoftware.smack.parsing.ExceptionThrowingCallback; import org.jivesoftware.smack.parsing.ParsingExceptionCallback; -import org.jivesoftware.smack.util.DNSUtil; import org.jivesoftware.smack.util.FileUtils; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlPullParser; @@ -169,9 +168,6 @@ public final class SmackConfiguration { catch (Exception e) { // Ignore. } - - // Initialize the DNS resolvers - DNSUtil.init(); } /** diff --git a/smack-core/src/main/java/org/jivesoftware/smack/initializer/SmackAndOsgiInitializer.java b/smack-core/src/main/java/org/jivesoftware/smack/initializer/SmackAndOsgiInitializer.java index 885864b7d..17bf93c1b 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/initializer/SmackAndOsgiInitializer.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/initializer/SmackAndOsgiInitializer.java @@ -16,6 +16,8 @@ */ package org.jivesoftware.smack.initializer; +import java.util.List; + public abstract class SmackAndOsgiInitializer implements SmackInitializer { /** @@ -25,4 +27,10 @@ public abstract class SmackAndOsgiInitializer implements SmackInitializer { public final void activate() { initialize(); } + + @Override + public List initialize(ClassLoader classLoader) { + return initialize(); + } + } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/DNSUtil.java b/smack-core/src/main/java/org/jivesoftware/smack/util/DNSUtil.java index dcd2d60de..0027e7a85 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/DNSUtil.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/DNSUtil.java @@ -16,8 +16,6 @@ */ package org.jivesoftware.smack.util; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; @@ -41,31 +39,6 @@ public class DNSUtil { private static final Logger LOGGER = Logger.getLogger(DNSUtil.class.getName()); private static DNSResolver dnsResolver = null; - /** - * Initializes DNSUtil. This method is automatically called by SmackConfiguration, you don't - * have to call it manually. - */ - public static void init() { - final String[] RESOLVERS = new String[] { "javax.JavaxResolver", "minidns.MiniDnsResolver", - "dnsjava.DNSJavaResolver" }; - for (String resolver :RESOLVERS) { - DNSResolver availableResolver = null; - String resolverFull = "org.jivesoftware.smack.util.dns" + resolver; - try { - Class resolverClass = Class.forName(resolverFull); - Method getInstanceMethod = resolverClass.getMethod("getInstance"); - availableResolver = (DNSResolver) getInstanceMethod.invoke(null); - if (availableResolver != null) { - setDNSResolver(availableResolver); - break; - } - } - catch (ClassNotFoundException|NoSuchMethodException|SecurityException|IllegalAccessException|IllegalArgumentException|InvocationTargetException e) { - LOGGER.log(Level.FINE, "Exception on init", e); - } - } - } - /** * Set the DNS resolver that should be used to perform DNS lookups. * diff --git a/smack-core/src/main/resources/org.jivesoftware.smack/smack-config.xml b/smack-core/src/main/resources/org.jivesoftware.smack/smack-config.xml index 57c0b33ac..a0e467987 100644 --- a/smack-core/src/main/resources/org.jivesoftware.smack/smack-config.xml +++ b/smack-core/src/main/resources/org.jivesoftware.smack/smack-config.xml @@ -9,6 +9,8 @@ org.jivesoftware.smack.util.dns.javax.JavaxResolver + org.jivesoftware.smack.util.dns.minidns.MiniDnsResolver + org.jivesoftware.smack.util.dns.dnsjava.DNSJavaResolver org.jivesoftware.smack.initializer.extensions.ExtensionsInitializer org.jivesoftware.smack.initializer.experimental.ExperimentalInitializer org.jivesoftware.smack.initializer.legacy.LegacyInitializer diff --git a/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/dns/dnsjava/DNSJavaResolver.java b/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/dns/dnsjava/DNSJavaResolver.java index 8784eb8f8..ed0d80752 100644 --- a/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/dns/dnsjava/DNSJavaResolver.java +++ b/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/dns/dnsjava/DNSJavaResolver.java @@ -19,6 +19,8 @@ package org.jivesoftware.smack.util.dns.dnsjava; import java.util.ArrayList; import java.util.List; +import org.jivesoftware.smack.initializer.SmackAndOsgiInitializer; +import org.jivesoftware.smack.util.DNSUtil; import org.jivesoftware.smack.util.dns.DNSResolver; import org.jivesoftware.smack.util.dns.SRVRecord; import org.xbill.DNS.Lookup; @@ -30,13 +32,10 @@ import org.xbill.DNS.Type; * This implementation uses the dnsjava implementation for resolving DNS addresses. * */ -public class DNSJavaResolver implements DNSResolver { +public class DNSJavaResolver extends SmackAndOsgiInitializer implements DNSResolver { private static DNSJavaResolver instance = new DNSJavaResolver(); - - private DNSJavaResolver() { - } - + public static DNSResolver getInstance() { return instance; } @@ -65,4 +64,15 @@ public class DNSJavaResolver implements DNSResolver { return res; } + + public static void setup() { + DNSUtil.setDNSResolver(getInstance()); + } + + @Override + public List initialize() { + setup(); + return null; + } + } diff --git a/smack-resolver-dnsjava/src/main/resources/org.jivesoftware.smack/smack-resolver-dnsjava-components.xml b/smack-resolver-dnsjava/src/main/resources/org.jivesoftware.smack/smack-resolver-dnsjava-components.xml new file mode 100644 index 000000000..83f27180a --- /dev/null +++ b/smack-resolver-dnsjava/src/main/resources/org.jivesoftware.smack/smack-resolver-dnsjava-components.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/javax/JavaxResolver.java b/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/javax/JavaxResolver.java index 430b496d8..a6e76aa92 100644 --- a/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/javax/JavaxResolver.java +++ b/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/javax/JavaxResolver.java @@ -17,7 +17,6 @@ package org.jivesoftware.smack.util.dns.javax; import java.util.ArrayList; -import java.util.Collections; import java.util.Hashtable; import java.util.List; @@ -56,10 +55,6 @@ public class JavaxResolver extends SmackAndOsgiInitializer implements DNSResolve // Try to set this DNS resolver as primary one setup(); } - - public JavaxResolver() { - - } public static synchronized DNSResolver getInstance() { if (instance == null && isSupported()) { @@ -102,12 +97,8 @@ public class JavaxResolver extends SmackAndOsgiInitializer implements DNSResolve @Override public List initialize() { - return initialize(null); + setup(); + return null; } - @Override - public List initialize(ClassLoader classLoader) { - setup(); - return Collections.emptyList(); - } } diff --git a/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/dns/minidns/MiniDnsResolver.java b/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/dns/minidns/MiniDnsResolver.java index b290e96b2..2a18ad6e7 100644 --- a/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/dns/minidns/MiniDnsResolver.java +++ b/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/dns/minidns/MiniDnsResolver.java @@ -19,6 +19,8 @@ package org.jivesoftware.smack.util.dns.minidns; import java.util.LinkedList; import java.util.List; +import org.jivesoftware.smack.initializer.SmackAndOsgiInitializer; +import org.jivesoftware.smack.util.DNSUtil; import org.jivesoftware.smack.util.dns.DNSResolver; import org.jivesoftware.smack.util.dns.SRVRecord; import org.jxmpp.util.cache.ExpirationCache; @@ -37,14 +39,14 @@ import de.measite.minidns.record.SRV; * This implementation uses the minidns implementation for * resolving DNS addresses. */ -public class MiniDnsResolver implements DNSResolver { +public class MiniDnsResolver extends SmackAndOsgiInitializer implements DNSResolver { private static final long ONE_DAY = 24*60*60*1000; private static final MiniDnsResolver instance = new MiniDnsResolver(); private static final ExpirationCache cache = new ExpirationCache(10, ONE_DAY); private final Client client; - private MiniDnsResolver() { + public MiniDnsResolver() { client = new Client(new DNSCache() { @Override @@ -81,4 +83,15 @@ public class MiniDnsResolver implements DNSResolver { } return res; } + + public static void setup() { + DNSUtil.setDNSResolver(getInstance()); + } + + @Override + public List initialize() { + setup(); + return null; + } + } diff --git a/smack-resolver-minidns/src/main/resources/org.jivesoftware.smack/smack-resolver-minidns-components.xml b/smack-resolver-minidns/src/main/resources/org.jivesoftware.smack/smack-resolver-minidns-components.xml new file mode 100644 index 000000000..fd887d83e --- /dev/null +++ b/smack-resolver-minidns/src/main/resources/org.jivesoftware.smack/smack-resolver-minidns-components.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file