Author: peter_firmstone
Date: Mon Feb 24 02:39:03 2014
New Revision: 1571128

URL: http://svn.apache.org/r1571128
Log:
System property for Reggie, to allow use of an arbitrary unicast discovery 
port, if the configured port is in use, as suggested by Greg Trasuk on dev.  
This purpose of this property is primarily for test purposes, it is not enabled 
by default.

Modified:
    
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/qa/resources/qaDefaults.properties
    
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/reggie/RegistrarImpl.java

Modified: 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/qa/resources/qaDefaults.properties
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/qa/resources/qaDefaults.properties?rev=1571128&r1=1571127&r2=1571128&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/qa/resources/qaDefaults.properties
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/qa/resources/qaDefaults.properties
 Mon Feb 24 02:39:03 2014
@@ -13,6 +13,7 @@ net.jini.core.lookup.ServiceRegistrar.po
 net.jini.core.lookup.ServiceRegistrar.log=reggie_log
 net.jini.core.lookup.ServiceRegistrar.membergroups=QATestDefaultGroup
 #net.jini.core.lookup.ServiceRegistrar.port=4160
+net.jini.core.lookup.ServiceRegistrar.portAbitraryIfInUse=true
 
net.jini.core.lookup.ServiceRegistrar.serviceConfiguration=<url:harness/configs/<config>/reggie/reggie.config>
 
net.jini.core.lookup.ServiceRegistrar.starterConfiguration=<url:harness/configs/<config>/starter/starter.config>
 net.jini.core.lookup.ServiceRegistrar.preparername=test.reggiePreparer

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/reggie/RegistrarImpl.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/reggie/RegistrarImpl.java?rev=1571128&r1=1571127&r2=1571128&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/reggie/RegistrarImpl.java 
(original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/reggie/RegistrarImpl.java 
Mon Feb 24 02:39:03 2014
@@ -17,6 +17,7 @@
  */
 package com.sun.jini.reggie;
 
+import com.sun.jini.action.GetPropertyAction;
 import com.sun.jini.config.Config;
 import com.sun.jini.constants.ThrowableConstants;
 import com.sun.jini.constants.VersionConstants;
@@ -67,6 +68,7 @@ import java.rmi.activation.ActivationID;
 import java.rmi.activation.ActivationSystem;
 import java.security.AccessControlContext;
 import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 import java.util.ArrayList;
@@ -146,6 +148,7 @@ import net.jini.security.BasicProxyPrepa
 import net.jini.security.ProxyPreparer;
 import net.jini.security.TrustVerifier;
 import net.jini.security.proxytrust.ServerProxyTrust;
+import org.apache.river.api.net.Uri;
 import org.apache.river.api.util.Startable;
 import org.apache.river.impl.thread.NamedThreadFactory;
 import org.apache.river.impl.thread.SynchronousExecutors;
@@ -2729,6 +2732,24 @@ class RegistrarImpl implements Registrar
 
     /** Unicast discovery request thread code. */
     private static class Unicast implements Runnable, Interruptable {
+        private static final Boolean arbitraryPort;
+        
+        static {
+            arbitraryPort = AccessController.doPrivileged(
+                new PrivilegedAction<Boolean>(){
+
+                    @Override
+                    public Boolean run() {
+                        return Boolean.valueOf(
+                            Boolean.getBoolean(
+                                
"net.jini.core.lookup.ServiceRegistrar.portAbitraryIfInUse"
+                            )
+                        );
+                    }
+                
+                }
+            );
+        }
         private final RegistrarImpl reggie;
        /** Server socket to accepts connections on. */
        private final ServerSocket listen;
@@ -2759,12 +2780,14 @@ class RegistrarImpl implements Registrar
                     listen = 
reggie.serverSocketFactory.createServerSocket(port);
                 } catch (IOException e){
                     logger.log(Level.INFO, "failed to bind to port " + port, 
e);
-                    listen = reggie.serverSocketFactory.createServerSocket(0);
-                    ephemeral = true;
+                    if (arbitraryPort){
+                        listen = 
reggie.serverSocketFactory.createServerSocket(0);
+                        ephemeral = true;
+                    }
                 }
            }
             port = listen.getLocalPort();
-            logger.log(Level.INFO, "bound to ephemeral port {0}", port);
+            logger.log(Level.INFO, "Reggie Unicast Discovery listening on port 
{0}", port);
             this.listen = listen;
            this.port = port;
             if (ephemeral) reggie.unicastPort = port;


Reply via email to