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;
