You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by si...@apache.org on 2012/10/28 14:38:26 UTC

svn commit: r1402989 - in /river/jtsk/trunk/src/org/apache/river/config: LocalHostLookup.java LocalHostLookupProvider.java LocalHostLookupSpi.java

Author: sijskes
Date: Sun Oct 28 13:38:26 2012
New Revision: 1402989

URL: http://svn.apache.org/viewvc?rev=1402989&view=rev
Log:
converted LocalHostLookup to Spi.

Added:
    river/jtsk/trunk/src/org/apache/river/config/LocalHostLookupSpi.java
      - copied, changed from r1402988, river/jtsk/trunk/src/org/apache/river/config/LocalHostLookupProvider.java
Removed:
    river/jtsk/trunk/src/org/apache/river/config/LocalHostLookupProvider.java
Modified:
    river/jtsk/trunk/src/org/apache/river/config/LocalHostLookup.java

Modified: river/jtsk/trunk/src/org/apache/river/config/LocalHostLookup.java
URL: http://svn.apache.org/viewvc/river/jtsk/trunk/src/org/apache/river/config/LocalHostLookup.java?rev=1402989&r1=1402988&r2=1402989&view=diff
==============================================================================
--- river/jtsk/trunk/src/org/apache/river/config/LocalHostLookup.java (original)
+++ river/jtsk/trunk/src/org/apache/river/config/LocalHostLookup.java Sun Oct 28 13:38:26 2012
@@ -22,6 +22,8 @@ import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.util.Iterator;
+import java.util.ServiceLoader;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import org.apache.river.common.Beta;
@@ -34,62 +36,74 @@ public class LocalHostLookup
 {
     private final static Logger logger = Logger.getLogger(LocalHostLookup.class.getName());
     
-    private static LocalHostLookupProvider provider;
+    private static LocalHostLookupSpi spi  = AccessController.doPrivileged(
 
-    public static InetAddress getLocalHost() throws UnknownHostException
+            new PrivilegedAction<LocalHostLookupSpi>()
+            {
+                @Override
+                public LocalHostLookupSpi run()
+                {
+                    return initSpi();
+                }
+
+            }
+
+        );
+    
+    private static LocalHostLookupSpi initSpi()
     {
-        return getProvider().getLocalHost();
+        ServiceLoader<LocalHostLookupSpi> loader = ServiceLoader.load(LocalHostLookupSpi.class);
+
+        Iterator<LocalHostLookupSpi> iter = loader.iterator();
+
+        if( iter.hasNext() ) {
+            try {
+                LocalHostLookupSpi firstSpi = iter.next();
+                logger.log(Level.CONFIG, "loaded: {0}", firstSpi);
+                checkForLoopback(firstSpi);
+                return firstSpi ;
+            } catch (Exception e) {
+                logger.log( Level.SEVERE, "error loading LocalHostLookupSpi: {0}", new Object[]{e});
+                throw new Error(e);
+            }
+        }
+
+        final DefaultLocalHostLookupProvider defaultLocalHostLookupProvider = new DefaultLocalHostLookupProvider();
+        checkForLoopback(defaultLocalHostLookupProvider);
+
+        return defaultLocalHostLookupProvider;
     }
 
-    public static String getHostName() throws UnknownHostException
+
+
+    public static InetAddress getLocalHost() throws UnknownHostException
     {
-        return getProvider().getHostName();
+        return spi.getLocalHost();
     }
 
-    public static String getHostAddress() throws UnknownHostException
+    public static String getHostName() throws UnknownHostException
     {
-        return getProvider().getHostAddress();
+        return spi.getHostName();
     }
 
-    private static synchronized LocalHostLookupProvider getProvider()
+    public static String getHostAddress() throws UnknownHostException
     {
-        if( provider == null ) {
-            AccessController.doPrivileged( new PrivilegedAction<Object>() {
-                @Override
-                public Object run() 
-                {
-                    setProvider( new DefaultLocalHostLookupProvider() );
-                    return null; // nothing to return
-                }
-            });            
-        }
-        return provider ;
+        return spi.getHostAddress();
     }
 
-    public static synchronized void setProvider(LocalHostLookupProvider prvdr )
+    private static void checkForLoopback(LocalHostLookupSpi spi)
     {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            sm.checkPermission( new RuntimePermission("setLocalHostLookupProvider") );
-        }
-        
-        if( LocalHostLookup.provider != null ) {
-            throw new RuntimeException( "provider already set" );
-        }
-      
-        LocalHostLookup.provider = prvdr ;
-
         try {
-            if (getLocalHost().isLoopbackAddress()) {
+            if (spi.getLocalHost().isLoopbackAddress()) {
                 logger.warning("local host is loopback");
             }
         } catch (UnknownHostException ex) {
-            logger.log(Level.WARNING,"",ex);
+            logger.log( Level.SEVERE, "{0} during checkForLoopback", new Object[]{ex} );
         }
     }
 
-    static class DefaultLocalHostLookupProvider 
-        implements LocalHostLookupProvider
+    static class DefaultLocalHostLookupProvider
+        extends LocalHostLookupSpi
     {
 
         @Override
@@ -109,9 +123,9 @@ public class LocalHostLookup
         {
             return InetAddress.getLocalHost().getHostAddress();
         }
-        
+
     }
-    
+
     private LocalHostLookup()
     {
     }

Copied: river/jtsk/trunk/src/org/apache/river/config/LocalHostLookupSpi.java (from r1402988, river/jtsk/trunk/src/org/apache/river/config/LocalHostLookupProvider.java)
URL: http://svn.apache.org/viewvc/river/jtsk/trunk/src/org/apache/river/config/LocalHostLookupSpi.java?p2=river/jtsk/trunk/src/org/apache/river/config/LocalHostLookupSpi.java&p1=river/jtsk/trunk/src/org/apache/river/config/LocalHostLookupProvider.java&r1=1402988&r2=1402989&rev=1402989&view=diff
==============================================================================
--- river/jtsk/trunk/src/org/apache/river/config/LocalHostLookupProvider.java (original)
+++ river/jtsk/trunk/src/org/apache/river/config/LocalHostLookupSpi.java Sun Oct 28 13:38:26 2012
@@ -26,12 +26,12 @@ import org.apache.river.common.Beta;
  * Provides a pluggable provider for LocalHostLookup.
  */
 @Beta
-public interface LocalHostLookupProvider
+public abstract class LocalHostLookupSpi
 {
-    public InetAddress getLocalHost() throws UnknownHostException ;
+    public abstract InetAddress getLocalHost() throws UnknownHostException ;
     
-    public String getHostName() throws UnknownHostException ;
+    public abstract String getHostName() throws UnknownHostException ;
 
-    public String getHostAddress() throws UnknownHostException ;
+    public abstract String getHostAddress() throws UnknownHostException ;
     
 }