Author: peter_firmstone
Date: Fri Dec 20 12:11:15 2013
New Revision: 1552606

URL: http://svn.apache.org/r1552606
Log:
Fix race condition in LeaseExpiration test by making field volatile

Reduce gc thread timing for RegistrarImpl discovery announcement multicast 
request to two seconds to ensure timed references are cleared before 5 seconds 
duration, that recommended by the spec, the longer 3.5 second duration was 
probably resulting in lost announcement requests.

NamedThreadFactory to provide improved debugging output by naming Executor 
threads.

Renamed Commission to Startable.

Added Parallel ClassLoading ability to RFC3986URLClassLoader, only to prevent 
class loader deadlock that is fixed in Java 7 for clients that need it.  
PreferredClassLoader doesn't require parallel class loading so doesn't support 
it.

Added:
    
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/util/Startable.java
      - copied, changed from r1548972, 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/util/Commission.java
    river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/impl/thread/
    
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/impl/thread/NamedThreadFactory.java
Removed:
    
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/util/Commission.java
Modified:
    
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/joinmanager/LeaseRenewDurRFE.java
    
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestGeneratorImpl.java
    
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestListenerImpl.java
    
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestPullListenerImpl.java
    
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/start/BadServiceProxyAccessorImpl.java
    
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/start/TestServiceImpl.java
    
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/services/lookupsimulator/LookupSimulatorImpl.java
    
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/spec/discoveryservice/lease/LeaseExpiration.java
    river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java
    
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/TxnManagerImpl.java
    river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mercury/MailboxImpl.java
    
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/norm/NormServerBaseImpl.java
    
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerImpl.java
    
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerWrapper.java
    
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/reggie/RegistrarImpl.java
    
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/ActivateWrapper.java
    
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/NonActivatableServiceDescriptor.java
    
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/SharedGroupImpl.java
    river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/tool/ClassServer.java
    
river/jtsk/skunk/qa_refactor/trunk/src/net/jini/loader/pref/PreferredClassLoader.java
    
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java
    
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/security/CombinerSecurityManager.java
    
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/security/DefaultPolicyScanner.java

Modified: 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/joinmanager/LeaseRenewDurRFE.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/joinmanager/LeaseRenewDurRFE.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/joinmanager/LeaseRenewDurRFE.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/joinmanager/LeaseRenewDurRFE.java
 Fri Dec 20 12:11:15 2013
@@ -78,7 +78,7 @@ import com.sun.jini.config.Config;
 import com.sun.jini.config.ConfigUtil;
 import com.sun.jini.logging.Levels;
 import com.sun.jini.qa.harness.Test;
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 
 import net.jini.activation.ActivationExporter;
 import net.jini.activation.ActivationGroup;
@@ -1063,7 +1063,7 @@ public class LeaseRenewDurRFE extends Ab
     static class RemoteTestServiceImpl implements ServerProxyTrust,
                                                   ProxyAccessor,
                                                   RemoteTestServiceInterface,
-                                                  Commission
+                                                  Startable
                                                   
     {
         private static final String COMPONENT_NAME = "test";

Modified: 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestGeneratorImpl.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestGeneratorImpl.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestGeneratorImpl.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestGeneratorImpl.java
 Fri Dec 20 12:11:15 2013
@@ -24,7 +24,7 @@ import com.sun.jini.landlord.LeaseFactor
 import com.sun.jini.landlord.LeasePeriodPolicy;
 import com.sun.jini.landlord.LeasedResource;
 import com.sun.jini.landlord.FixedLeasePeriodPolicy;
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 import net.jini.config.Configuration;
 import net.jini.config.ConfigurationException;
 import net.jini.config.ConfigurationProvider;
@@ -69,7 +69,7 @@ import net.jini.core.lease.LeaseMapExcep
 import net.jini.export.ProxyAccessor;
 
 public class TestGeneratorImpl 
-    implements TestGenerator, Landlord, TimeConstants, ProxyAccessor, 
Commission
+    implements TestGenerator, Landlord, TimeConstants, ProxyAccessor, Startable
 {
 
     private static Logger logger = Logger.getLogger("com.sun.jini.qa.harness");

Modified: 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestListenerImpl.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestListenerImpl.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestListenerImpl.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestListenerImpl.java
 Fri Dec 20 12:11:15 2013
@@ -19,7 +19,7 @@ package com.sun.jini.test.impl.mercury;
 
 import com.sun.jini.proxy.BasicProxyTrustVerifier;
 import com.sun.jini.start.LifeCycle;
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 
 import net.jini.config.Configuration;
 import net.jini.config.ConfigurationException;
@@ -53,7 +53,7 @@ import javax.security.auth.login.LoginEx
 
 
 public class TestListenerImpl
-    implements TestListener, ProxyAccessor, ServerProxyTrust, Commission
+    implements TestListener, ProxyAccessor, ServerProxyTrust, Startable
 {
     private final Map events = new HashMap();
 

Modified: 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestPullListenerImpl.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestPullListenerImpl.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestPullListenerImpl.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/mercury/TestPullListenerImpl.java
 Fri Dec 20 12:11:15 2013
@@ -18,7 +18,7 @@
 package com.sun.jini.test.impl.mercury;
 import com.sun.jini.proxy.BasicProxyTrustVerifier;
 import com.sun.jini.start.LifeCycle;
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 
 import net.jini.config.Configuration;
 import net.jini.config.ConfigurationException;
@@ -56,7 +56,7 @@ import net.jini.event.MailboxPullRegistr
 import net.jini.event.InvalidIteratorException;
 
 public class TestPullListenerImpl 
-    implements TestPullListener, ProxyAccessor, ServerProxyTrust, Commission
+    implements TestPullListener, ProxyAccessor, ServerProxyTrust, Startable
 {
     private final Map events = new HashMap();
 

Modified: 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/start/BadServiceProxyAccessorImpl.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/start/BadServiceProxyAccessorImpl.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/start/BadServiceProxyAccessorImpl.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/start/BadServiceProxyAccessorImpl.java
 Fri Dec 20 12:11:15 2013
@@ -20,7 +20,7 @@ package com.sun.jini.test.impl.start;
 import com.sun.jini.proxy.BasicProxyTrustVerifier;
 import com.sun.jini.start.LifeCycle;
 import com.sun.jini.start.ServiceProxyAccessor;
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 
 import net.jini.config.Configuration;
 import net.jini.config.ConfigurationException;
@@ -57,7 +57,7 @@ import javax.security.auth.login.LoginEx
 
 
 public class BadServiceProxyAccessorImpl 
-    implements BadServiceProxyAccessor, ProxyAccessor, Commission
+    implements BadServiceProxyAccessor, ProxyAccessor, Startable
 {
     private Object serverStub;
     private AccessControlContext context;

Modified: 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/start/TestServiceImpl.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/start/TestServiceImpl.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/start/TestServiceImpl.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/start/TestServiceImpl.java
 Fri Dec 20 12:11:15 2013
@@ -26,7 +26,7 @@ import java.rmi.MarshalledObject;
 import com.sun.jini.config.Config;
 import com.sun.jini.test.impl.start.TestService;
 import com.sun.jini.start.LifeCycle;
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 import net.jini.config.Configuration;
 import net.jini.config.ConfigurationException;
 import net.jini.config.ConfigurationProvider;
@@ -60,7 +60,7 @@ import javax.security.auth.login.LoginEx
 /**
  * Activatable implementation of the TestService interface.
  */
-public class TestServiceImpl implements TestService, ProxyAccessor, Commission 
{
+public class TestServiceImpl implements TestService, ProxyAccessor, Startable {
 
     private static volatile int staticInt = 0;
     

Modified: 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/services/lookupsimulator/LookupSimulatorImpl.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/services/lookupsimulator/LookupSimulatorImpl.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/services/lookupsimulator/LookupSimulatorImpl.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/services/lookupsimulator/LookupSimulatorImpl.java
 Fri Dec 20 12:11:15 2013
@@ -60,7 +60,7 @@ import com.sun.jini.start.LifeCycle;
 import net.jini.security.proxytrust.ServerProxyTrust;
 
 import com.sun.jini.config.Config;
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 import java.security.AccessControlContext;
 import java.security.AccessController;
 import net.jini.export.Exporter;
@@ -101,7 +101,7 @@ import net.jini.jeri.tcp.TcpServerEndpoi
 public class LookupSimulatorImpl implements LookupSimulator, 
                                            ServerProxyTrust,
                                            ProxyAccessor,
-                                            Commission
+                                            Startable
 {
     private static Logger logger = 
Logger.getLogger("com.sun.jini.harness.test");
     private MethodConstraints locatorConstraints;

Modified: 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/spec/discoveryservice/lease/LeaseExpiration.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/spec/discoveryservice/lease/LeaseExpiration.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/spec/discoveryservice/lease/LeaseExpiration.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/spec/discoveryservice/lease/LeaseExpiration.java
 Fri Dec 20 12:11:15 2013
@@ -190,7 +190,7 @@ public class LeaseExpiration extends Abs
     private static final long N_SECS = 30;
     private final long duration = N_SECS*1000;
     private MarshalledObject handback = null;
-    private boolean eventReceived = false;
+    private volatile boolean eventReceived = false;
     private final Object eventLock = new Object();
 
     /** Constructs and returns the duration values (in milliseconds) to 

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java 
(original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/fiddler/FiddlerImpl.java 
Fri Dec 20 12:11:15 2013
@@ -34,7 +34,7 @@ import com.sun.jini.reliableLog.Reliable
 import com.sun.jini.reliableLog.LogHandler;
 
 import com.sun.jini.start.LifeCycle;
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 
 import com.sun.jini.thread.InterruptedStatusThread;
 import com.sun.jini.thread.ReadersWriter;
@@ -168,7 +168,7 @@ import java.util.logging.Logger;
  *
  * @author Sun Microsystems, Inc.
  */
-class FiddlerImpl implements ServerProxyTrust, ProxyAccessor, Fiddler, 
Commission {
+class FiddlerImpl implements ServerProxyTrust, ProxyAccessor, Fiddler, 
Startable {
 
     /* Name of this component; used in config entry retrieval and the logger.*/
     static final String COMPONENT_NAME = "com.sun.jini.fiddler";

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/TxnManagerImpl.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/TxnManagerImpl.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/TxnManagerImpl.java 
(original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/TxnManagerImpl.java 
Fri Dec 20 12:11:15 2013
@@ -35,7 +35,7 @@ import com.sun.jini.mahalo.log.LogRecove
 import com.sun.jini.mahalo.log.MultiLogManager;
 import com.sun.jini.mahalo.log.MultiLogManagerAdmin;
 import com.sun.jini.start.LifeCycle;
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 import com.sun.jini.thread.InterruptedStatusThread;
 import com.sun.jini.thread.ReadyState;
 import com.sun.jini.thread.TaskManager;
@@ -119,7 +119,7 @@ import net.jini.security.TrustVerifier;
 class TxnManagerImpl /*extends RemoteServer*/
     implements TxnManager, LeaseExpirationMgr.Expirer,
               LogRecovery, TxnSettler, com.sun.jini.constants.TimeConstants,
-               LocalLandlord, ServerProxyTrust, ProxyAccessor, Commission
+               LocalLandlord, ServerProxyTrust, ProxyAccessor, Startable
 {
     /** Logger for (successful) service startup message */
     static final Logger startupLogger = 

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mercury/MailboxImpl.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mercury/MailboxImpl.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mercury/MailboxImpl.java 
(original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mercury/MailboxImpl.java 
Fri Dec 20 12:11:15 2013
@@ -37,7 +37,7 @@ import com.sun.jini.reliableLog.Reliable
 import com.sun.jini.reliableLog.LogException;
 import com.sun.jini.reliableLog.LogHandler;
 import com.sun.jini.start.LifeCycle;
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 import com.sun.jini.thread.InterruptedStatusThread;
 import com.sun.jini.thread.ReadersWriter;
 import com.sun.jini.thread.ReadersWriter.ConcurrentLockException;
@@ -157,7 +157,7 @@ See recoverSnapshot() for exact details 
 */
 
 class MailboxImpl implements MailboxBackEnd, TimeConstants, 
-    ServerProxyTrust, ProxyAccessor, Commission
+    ServerProxyTrust, ProxyAccessor, Startable
  
 {
 

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/norm/NormServerBaseImpl.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/norm/NormServerBaseImpl.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/norm/NormServerBaseImpl.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/norm/NormServerBaseImpl.java
 Fri Dec 20 12:11:15 2013
@@ -98,7 +98,7 @@ import com.sun.jini.proxy.ThrowThis;
 import com.sun.jini.start.LifeCycle;
 import com.sun.jini.reliableLog.LogException;
 import com.sun.jini.reliableLog.LogHandler;
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 import com.sun.jini.thread.InterruptedStatusThread;
 import java.security.AccessControlContext;
 import java.security.AccessController;
@@ -110,7 +110,7 @@ import java.security.AccessController;
  * @author Sun Microsystems, Inc.
  */
 abstract class NormServerBaseImpl
-    implements NormServer, LocalLandlord, ServerProxyTrust, ProxyAccessor, 
Commission
+    implements NormServer, LocalLandlord, ServerProxyTrust, ProxyAccessor, 
Startable
 {
     /** Current version of log format */
     private static final int CURRENT_LOG_VERSION = 2;

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerImpl.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerImpl.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerImpl.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerImpl.java
 Fri Dec 20 12:11:15 2013
@@ -31,7 +31,7 @@ import com.sun.jini.landlord.LocalLandlo
 import com.sun.jini.landlord.LeaseFactory;
 import com.sun.jini.logging.Levels;
 import com.sun.jini.start.LifeCycle;
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 
 import net.jini.id.Uuid;
 import net.jini.id.UuidFactory;
@@ -151,7 +151,7 @@ import net.jini.core.transaction.server.
  */
 public class OutriggerServerImpl 
     implements OutriggerServer, TimeConstants, LocalLandlord, Recover,
-              ServerProxyTrust, Commission
+              ServerProxyTrust, Startable
 {      
     /**
      * Component name we use to find items in the configuration and loggers.

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerWrapper.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerWrapper.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerWrapper.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerWrapper.java
 Fri Dec 20 12:11:15 2013
@@ -47,7 +47,7 @@ import net.jini.config.ConfigurationExce
 import net.jini.id.Uuid;
 
 import com.sun.jini.start.LifeCycle;
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 
 /**
  * For various reasons there is code that we would like
@@ -61,7 +61,7 @@ import org.apache.river.api.util.Commiss
  * @since 2.0
  */
 class OutriggerServerWrapper 
-    implements OutriggerServer, ServerProxyTrust, ProxyAccessor, Commission
+    implements OutriggerServer, ServerProxyTrust, ProxyAccessor, Startable
 {
     /** The object being delegated to */     
     private final OutriggerServerImpl delegate;

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=1552606&r1=1552605&r2=1552606&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 
Fri Dec 20 12:11:15 2013
@@ -145,7 +145,8 @@ 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.util.Commission;
+import org.apache.river.api.util.Startable;
+import org.apache.river.impl.thread.NamedThreadFactory;
 
 /**
  * Base server-side implementation of a lookup service, subclassed by
@@ -158,7 +159,7 @@ import org.apache.river.api.util.Commiss
  * @author Sun Microsystems, Inc.
  *
  */
-class RegistrarImpl implements Registrar, ProxyAccessor, ServerProxyTrust, 
Commission {
+class RegistrarImpl implements Registrar, ProxyAccessor, ServerProxyTrust, 
Startable {
 
     /** Maximum minMax lease duration for both services and events */
     private static final long MAX_LEASE = 1000L * 60 * 60 * 24 * 365 * 1000;
@@ -531,7 +532,8 @@ class RegistrarImpl implements Registrar
             poolSizeLimit, 
             15L, 
             TimeUnit.MINUTES, 
-            new LinkedBlockingQueue()
+            new LinkedBlockingQueue(),
+            new NamedThreadFactory("Reggie_Event_Notifier", true)   
         );
         eventNotifierExec = exec;
         // Set up Executor to perform discovery responses
@@ -540,7 +542,8 @@ class RegistrarImpl implements Registrar
                 poolSizeLimit, 
                 15L, 
                 TimeUnit.MINUTES, 
-                new LinkedBlockingQueue()
+                new LinkedBlockingQueue(),
+                new NamedThreadFactory("Reggie_Discovery_Response", true)
         );
         discoveryResponseExec = exec;
         
@@ -2105,7 +2108,10 @@ class RegistrarImpl implements Registrar
 
     /** Task for decoding multicast request packets. */
     private static final class DecodeRequestTask implements Runnable {
-        /* Keeps a record of recent AddressTasksto avoid DOS attacks. */
+        /* Keeps a record of recent AddressTasksto avoid DOS attacks. 
+         * 
+         * Recommended period between discovery multicast requests is 5 sec.
+         */
         private static final Set<AddressTask> executedTasks;
         static {
             Comparator<Referrer<AddressTask>> comparator = RC.comparator(new 
AddressTaskComparator());
@@ -2113,7 +2119,7 @@ class RegistrarImpl implements Registrar
                 RC.set(new ConcurrentSkipListSet<Referrer<AddressTask>>(
                         comparator), 
                         Ref.TIME,
-                        3500L);
+                        2000L);
         }
        /** The multicast packet to decode */
        private final DatagramPacket datagram;

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/ActivateWrapper.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/ActivateWrapper.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/ActivateWrapper.java 
(original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/ActivateWrapper.java 
Fri Dec 20 12:11:15 2013
@@ -18,7 +18,7 @@
 
 package com.sun.jini.start;
 
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 import net.jini.export.ProxyAccessor;
 import net.jini.id.Uuid;
 import net.jini.id.UuidFactory;
@@ -471,15 +471,15 @@ public class ActivateWrapper implements 
                constructor.setAccessible(true);
                impl =
                    constructor.newInstance(new Object[]{id, desc.data});
-                if (impl instanceof Commission) {
-                    ((Commission) impl).start();
+                if (impl instanceof Startable) {
+                    ((Startable) impl).start();
                 } else {
                     logger.log( Level.SEVERE,
                         "Service {0} doesn''t implement {1} {2} {3} {4} {5} 
{6}", 
                         new Object []
                             {
                                 impl.getClass().getCanonicalName(),
-                                Commission.class.getCanonicalName(),
+                                Startable.class.getCanonicalName(),
                                 "this service is likely to suffer from race",
                                 "conditions caused by export performed 
during", 
                                 "construction, or threads started while 
''this''",

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/NonActivatableServiceDescriptor.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/NonActivatableServiceDescriptor.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/NonActivatableServiceDescriptor.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/NonActivatableServiceDescriptor.java
 Fri Dec 20 12:11:15 2013
@@ -18,7 +18,7 @@
 
 package com.sun.jini.start;
 
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 import com.sun.jini.config.Config;
 
 import net.jini.config.Configuration;
@@ -677,15 +677,15 @@ public class NonActivatableServiceDescri
                 constructor);
             constructor.setAccessible(true);
             impl = constructor.newInstance(argParms);
-            if (impl instanceof Commission) {
-                ((Commission) impl).start();
+            if (impl instanceof Startable) {
+                ((Startable) impl).start();
             } else {
                 logger.log( Level.SEVERE,
                     "Service {0} doesn''t implement {1} {2} {3} {4} {5} {6}", 
                     new Object []
                         {
                             impl.getClass().getCanonicalName(),
-                            Commission.class.getCanonicalName(),
+                            Startable.class.getCanonicalName(),
                             "this service is likely to suffer from race",
                             "conditions caused by export performed during", 
                             "construction, or threads started while ''this''",

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/SharedGroupImpl.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/SharedGroupImpl.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/SharedGroupImpl.java 
(original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/start/SharedGroupImpl.java 
Fri Dec 20 12:11:15 2013
@@ -18,7 +18,7 @@
 
 package com.sun.jini.start;
 
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 import java.io.IOException;
 import java.rmi.MarshalledObject;
 import java.rmi.Remote;
@@ -192,7 +192,7 @@ import net.jini.security.proxytrust.Serv
  *
  */
 public class SharedGroupImpl implements Remote, 
-       SharedGroupBackEnd, ServerProxyTrust, ProxyAccessor, Commission {
+       SharedGroupBackEnd, ServerProxyTrust, ProxyAccessor, Startable {
     
     /** Component name for configuration entries */
     static final String START_PACKAGE = "com.sun.jini.start";

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/tool/ClassServer.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/tool/ClassServer.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/tool/ClassServer.java 
(original)
+++ river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/tool/ClassServer.java 
Fri Dec 20 12:11:15 2013
@@ -49,7 +49,7 @@ import java.util.jar.JarFile;
 import java.util.jar.Manifest;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import org.apache.river.api.util.Commission;
+import org.apache.river.api.util.Startable;
 
 /**
  * A simple HTTP server, for serving up JAR and class files.
@@ -162,7 +162,7 @@ import org.apache.river.api.util.Commiss
  * @author Sun Microsystems, Inc.
  *
  */
-public class ClassServer extends Thread implements Commission {
+public class ClassServer extends Thread implements Startable {
     /** Default HTTP port */
     private static int DEFAULT_PORT = 8080;
     /** Default directory to serve files from on non-Windows OS */
@@ -349,7 +349,7 @@ public class ClassServer extends Thread 
      * understood
      * @throws NullPointerException if <code>args</code> or any element
      * of <code>args</code> is <code>null</code>
-     * @see Commission
+     * @see Startable
      */
     public ClassServer(String[] args, LifeCycle lifeCycle) throws IOException {
        this(new Initializer(lifeCycle, args));

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/net/jini/loader/pref/PreferredClassLoader.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/net/jini/loader/pref/PreferredClassLoader.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/net/jini/loader/pref/PreferredClassLoader.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/net/jini/loader/pref/PreferredClassLoader.java
 Fri Dec 20 12:11:15 2013
@@ -958,7 +958,7 @@ public class PreferredClassLoader extend
      *
      * @throws ClassNotFoundException if the class could not be found
      **/
-    protected synchronized Class loadClass(String name, boolean resolve)
+    protected Class loadClass(String name, boolean resolve)
        throws ClassNotFoundException
     {
        // First, check if the class has already been loaded
@@ -975,16 +975,18 @@ public class PreferredClassLoader extend
                    ")", e);
            }
            if (preferred) {
-               c = findClass(name);
-               if (resolve) {
-                   resolveClass(c);
-               }
-               return c;
+                synchronized (this){
+                    // Double check again in case the class has been loaded.
+                    c = findLoadedClass(name);
+                    if (c == null){
+                        c = findClass(name);
+                        if (resolve) resolveClass(c);
+                    }
+                }
            } else {
                return super.loadClass(name, resolve);
            }
        }
-
        return c;
     }
        

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java
 Fri Dec 20 12:11:15 2013
@@ -29,6 +29,8 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.ObjectStreamException;
 import java.io.UnsupportedEncodingException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.net.HttpURLConnection;
 import java.net.JarURLConnection;
 import java.net.MalformedURLException;
@@ -91,6 +93,11 @@ import org.apache.river.impl.Messages;
  * <li>Use different domain names to ensure separation of proxy classes that 
  * otherwise utilise identical jar files</li>
  * </ol>
+ * <p>
+ * The locking strategy of this ClassLoader is by default, the standard 
+ * ClassLoader strategy.  This ClassLoader is also thread safe, so can use
+ * a Parallel loading / synchronization strategy if the platform supports it.
+ * <p>
  * @since 3.0.0
  */
 public class RFC3986URLClassLoader extends java.net.URLClassLoader {
@@ -100,7 +107,27 @@ public class RFC3986URLClassLoader exten
      * initialization time.  It may contain malformed URLs.
      */
     private final static boolean uri;
+    
+    private final static Logger logger = 
Logger.getLogger(RFC3986URLClassLoader.class.getName());
+    
     static {
+        try {
+            Method registerAsParallelCapable = 
+                    ClassLoader.class.getDeclaredMethod(
+                            "registerAsParallelCapable", new Class[0]);
+            registerAsParallelCapable.setAccessible(true);
+            registerAsParallelCapable.invoke(null, new Object [0]);
+        } catch (NoSuchMethodException ex) {
+            logger.log(Level.INFO, "Platform doesn't support parallel class 
loading", ex);
+        } catch (SecurityException ex) {
+            logger.log(Level.INFO, "Insufficient permission to enable parallel 
class loading, disabled", ex);
+        } catch (IllegalAccessException ex) {
+            logger.log(Level.SEVERE, "Unable to invoke parallel class 
loading", ex);
+        } catch (IllegalArgumentException ex) {
+            logger.log(Level.SEVERE, "Unable to invoke parallel class 
loading", ex);
+        } catch (InvocationTargetException ex) {
+            logger.log(Level.SEVERE, "Unable to invoke parallel class 
loading", ex);
+        }
         String codebaseAnnotationProperty = null;
        String prop = AccessController.doPrivileged(
            new GetPropertyAction("net.jini.loader.codebaseAnnotation"));
@@ -112,8 +139,6 @@ public class RFC3986URLClassLoader exten
         else uri = true;
     }
     
-    private final static Logger logger = 
Logger.getLogger(RFC3986URLClassLoader.class.getName());
-
     private final List<URL> originalUrls; // Copy on Write
 
     private final List<URL> searchList; // Synchronized
@@ -124,11 +149,10 @@ public class RFC3986URLClassLoader exten
 
     private final URLStreamHandlerFactory factory;
 
-    private final AccessControlContext currentContext;
+    private final AccessControlContext creationContext;
 
     private static class SubURLClassLoader extends RFC3986URLClassLoader {
         // The subclass that overwrites the loadClass() method
-        private boolean checkingPackageAccess = false;
 
         SubURLClassLoader(URL[] urls, AccessControlContext context) {
             super(urls, ClassLoader.getSystemClassLoader(), null, context);
@@ -153,18 +177,18 @@ public class RFC3986URLClassLoader exten
          *             If the class could not be found.
          */
         @Override
-        protected synchronized Class<?> loadClass(String className,
-                                                  boolean resolveClass) throws 
ClassNotFoundException {
+        protected Class<?> loadClass(String className, boolean resolveClass) 
+                throws ClassNotFoundException 
+        {
+            /* Synchronization or locking isn't necessary here, ClassLoader
+             * has it's own locking scheme, which is likely to change depending
+             * on concurrency or multi thread strategies.
+             */ 
             SecurityManager sm = System.getSecurityManager();
-            if (sm != null && !checkingPackageAccess) {
+            if (sm != null) {
                 int index = className.lastIndexOf('.');
-                if (index > 0) { // skip if class is from a default package
-                    try {
-                        checkingPackageAccess = true;
+                if (index != -1) { // skip if class is from a default package
                         sm.checkPackageAccess(className.substring(0, index));
-                    } finally {
-                        checkingPackageAccess = false;
-                    }
                 }
             }
             return super.loadClass(className, resolveClass);
@@ -173,7 +197,7 @@ public class RFC3986URLClassLoader exten
 
     private static class IndexFile {
 
-        private final HashMap<String, ArrayList<URL>> map;
+        private final HashMap<String, List<URL>> map;
         //private URLClassLoader host;
 
 
@@ -187,7 +211,7 @@ public class RFC3986URLClassLoader exten
                         + parentURLString + "/"; //$NON-NLS-1$
                 is = jf.getInputStream(indexEntry);
                 in = new BufferedReader(new InputStreamReader(is, "UTF8"));
-                HashMap<String, ArrayList<URL>> pre_map = new HashMap<String, 
ArrayList<URL>>();
+                HashMap<String, List<URL>> pre_map = new HashMap<String, 
List<URL>>();
                 // Ignore the 2 first lines (index version)
                 if (in.readLine() == null) return null;
                 if (in.readLine() == null) return null;
@@ -206,11 +230,11 @@ public class RFC3986URLClassLoader exten
                         if ("".equals(line)) {
                             break;
                         }
-                        ArrayList<URL> list;
+                        List<URL> list;
                         if (pre_map.containsKey(line)) {
                             list = pre_map.get(line);
                         } else {
-                            list = new ArrayList<URL>();
+                            list = new LinkedList<URL>();
                             pre_map.put(line, list);
                         }
                         list.add(jar);
@@ -254,13 +278,13 @@ public class RFC3986URLClassLoader exten
             return parentURL;
         }
 
-        public IndexFile(HashMap<String, ArrayList<URL>> map) {
+        public IndexFile(HashMap<String,List<URL>> map) {
             // Don't need to defensively copy map, it's created for and only
             // used here.
             this.map = map;
         }
 
-        ArrayList<URL> get(String name) {
+        List<URL> get(String name) {
             synchronized (map){
                 return map.get(name);
             }
@@ -284,7 +308,7 @@ public class RFC3986URLClassLoader exten
             this.loader = loader;
         }
 
-        void findResources(String name, ArrayList<URL> resources) {
+        void findResources(String name, List<URL> resources) {
             URL res = findResource(name);
             if (res != null && !resources.contains(res)) {
                 resources.add(res);
@@ -323,8 +347,18 @@ public class RFC3986URLClassLoader exten
                 String packageDotName = packageName.replace('/', '.');
                 Package packageObj = loader.getPackage(packageDotName);
                 if (packageObj == null) {
-                    loader.definePackage(packageDotName, null, null,
-                            null, null, null, null, null);
+                    try {
+                        loader.definePackage(packageDotName, null, null,
+                                            null, null, null, null, null);
+                    } catch (IllegalArgumentException e){
+                        // Already exists, this is in case of concurrent access
+                        // which is very unlikely.
+                        packageObj = loader.getPackage(packageDotName);
+                        if (packageObj.isSealed()) {
+                            throw new SecurityException(Messages
+                                    .getString("luni.A1")); //$NON-NLS-1$
+                        }
+                    }
                 } else {
                     if (packageObj.isSealed()) {
                         throw new SecurityException(Messages
@@ -332,8 +366,11 @@ public class RFC3986URLClassLoader exten
                     }
                 }
             }
-            if (uri) return loader.defineClass(origName, clBuf, 0, 
clBuf.length, new UriCodeSource(codeSourceUrl, (Certificate[]) null, null));
-            return loader.defineClass(origName, clBuf, 0, clBuf.length, new 
CodeSource(codeSourceUrl, (Certificate[]) null));
+            // The package is defined and isn't sealed, safe to define class.
+            if (uri) return loader.defineClass(origName, clBuf, 0, 
clBuf.length,
+                    new UriCodeSource(codeSourceUrl, (Certificate[]) null, 
null));
+            return loader.defineClass(origName, clBuf, 0, clBuf.length,
+                    new CodeSource(codeSourceUrl, (Certificate[]) null));
         }
 
         URL findResource(String name) {
@@ -407,7 +444,7 @@ public class RFC3986URLClassLoader exten
         }
 
         @Override
-        void findResources(String name, ArrayList<URL> resources) {
+        void findResources(String name, List<URL> resources) {
             URL res = findResourceInOwn(name);
             if (res != null && !resources.contains(res)) {
                 resources.add(res);
@@ -417,11 +454,11 @@ public class RFC3986URLClassLoader exten
                 // only keep the directory part of the resource
                 // as index.list only keeps track of directories and root files
                 String indexedName = (pos > 0) ? name.substring(0, pos) : name;
-                ArrayList<URL> urls = index.get(indexedName);
+                List<URL> urls = index.get(indexedName);
                 if (urls != null) {
                     synchronized (urls){
                         urls.remove(url);
-                        urls = (ArrayList<URL>) urls.clone(); // Defensive 
copy to avoid sync
+                        urls = new ArrayList<URL>(urls); // Defensive copy to 
avoid sync
                     }
                     for (URL url : urls) {
                         URLHandler h = getSubHandler(url);
@@ -451,7 +488,7 @@ public class RFC3986URLClassLoader exten
                 }
             }
             if (index != null) {
-                ArrayList<URL> urls;
+                List<URL> urls;
                 if (packageName == null) {
                     urls = index.get(name);
                 } else {
@@ -460,7 +497,7 @@ public class RFC3986URLClassLoader exten
                 if (urls != null) {
                     synchronized (urls){
                         urls.remove(url);
-                        urls = (ArrayList<URL>) urls.clone(); // Defensive 
copy.
+                        urls = new ArrayList<URL>(urls); // Defensive copy.
                     }
                     for (URL url : urls) {
                         URLHandler h = getSubHandler(url);
@@ -542,11 +579,11 @@ public class RFC3986URLClassLoader exten
                 // only keep the directory part of the resource
                 // as index.list only keeps track of directories and root files
                 String indexedName = (pos > 0) ? name.substring(0, pos) : name;
-                ArrayList<URL> urls = index.get(indexedName);
+                List<URL> urls = index.get(indexedName);
                 if (urls != null) {
                     synchronized (urls){
                         urls.remove(url);
-                        urls = (ArrayList<URL>) urls.clone(); // Defensive 
copy.
+                        urls = new ArrayList<URL>(urls); // Defensive copy.
                     }
                     for (URL url : urls) {
                         URLHandler h = getSubHandler(url);
@@ -834,14 +871,14 @@ public class RFC3986URLClassLoader exten
      */
     @Override
     public Enumeration<URL> findResources(final String name) throws 
IOException {
-        ArrayList<URL> result = AccessController.doPrivileged(
-                new PrivilegedAction<ArrayList<URL>>() {
-                    public ArrayList<URL> run() {
-                        ArrayList<URL> results = new ArrayList<URL>();
+        List<URL> result = AccessController.doPrivileged(
+                new PrivilegedAction<List<URL>>() {
+                    public List<URL> run() {
+                        List<URL> results = new LinkedList<URL>();
                         findResourcesImpl(name, results);
                         return results;
                     }
-                }, currentContext);
+                }, creationContext);
         SecurityManager sm;
         int length = result.size();
         if (length > 0 && (sm = System.getSecurityManager()) != null) {
@@ -860,7 +897,7 @@ public class RFC3986URLClassLoader exten
         return Collections.enumeration(result);
     }
 
-    void findResourcesImpl(String name, ArrayList<URL> result) {
+    void findResourcesImpl(String name, List<URL> result) {
         if (name == null) {
             return;
         }
@@ -1040,7 +1077,7 @@ public class RFC3986URLClassLoader exten
         super(searchUrls, parent, factory);  // ClassLoader protectes against 
finalizer attack.
         this.factory = factory;
         // capture the context of the thread that creates this URLClassLoader
-        currentContext = context;
+        creationContext = context;
         int nbUrls = searchUrls.length;
         List<URL> originalUrls = new ArrayList<URL>(nbUrls);
         handlerList = new ArrayList<URLHandler>(nbUrls);
@@ -1059,6 +1096,9 @@ public class RFC3986URLClassLoader exten
      * Tries to locate and load the specified class using the known URLs. If 
the
      * class could be found, a class object representing the loaded class will
      * be returned.
+     * 
+     * The locking and synchronization strategy of this method is the 
+     * responsibility of the caller.
      *
      * @param clsName
      *            the name of the class which has to be found.
@@ -1074,7 +1114,7 @@ public class RFC3986URLClassLoader exten
                     public Class<?> run() {
                         return findClassImpl(clsName);
                     }
-                }, currentContext);
+                }, creationContext);
         if (cls != null) {
             return cls;
         }
@@ -1130,7 +1170,7 @@ public class RFC3986URLClassLoader exten
             public URL run() {
                 return findResourceImpl(name);
             }
-        }, currentContext);
+        }, creationContext);
         SecurityManager sm;
         if (result != null && (sm = System.getSecurityManager()) != null) {
             try {

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/security/CombinerSecurityManager.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/security/CombinerSecurityManager.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/security/CombinerSecurityManager.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/security/CombinerSecurityManager.java
 Fri Dec 20 12:11:15 2013
@@ -50,6 +50,7 @@ import net.jini.security.SecurityContext
 import au.net.zeus.collection.RC;
 import au.net.zeus.collection.Ref;
 import au.net.zeus.collection.Referrer;
+import org.apache.river.impl.thread.NamedThreadFactory;
 import org.cliffc.high_scale_lib.NonBlockingHashMap;
 
 /**
@@ -145,6 +146,7 @@ extends SecurityManager implements Cachi
         executor = 
                 new ThreadPoolExecutor(numberOfCores, poolSizeLimit, 20L, 
                 TimeUnit.SECONDS, new SynchronousQueue<Runnable>(), 
+                new NamedThreadFactory("CombinerSecurityManager", true),
                 new ThreadPoolExecutor.CallerRunsPolicy());
         permCompare = RC.comparator(new PermissionComparator());
         threadContext = new ThreadLocal<SecurityContext>();

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/security/DefaultPolicyScanner.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/security/DefaultPolicyScanner.java?rev=1552606&r1=1552605&r2=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/security/DefaultPolicyScanner.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/security/DefaultPolicyScanner.java
 Fri Dec 20 12:11:15 2013
@@ -583,10 +583,7 @@ class DefaultPolicyScanner {
         
         public String toString(){
             String newline = "\n";
-            int l = getKlass() == null? 0 : getKlass().length();
-            l = l + getName() == null? 0 : getName().length();
-            l = l + 4;
-            StringBuffer sb = new StringBuffer(l);
+            StringBuilder sb = new StringBuilder(100);
             if ( getKlass() != null ) sb.append(getKlass()).append(newline);
             if ( getName() != null ) sb.append(getName()).append(newline);
             return sb.toString();

Copied: 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/util/Startable.java 
(from r1548972, 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/util/Commission.java)
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/util/Startable.java?p2=river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/util/Startable.java&p1=river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/util/Commission.java&r1=1548972&r2=1552606&rev=1552606&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/util/Commission.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/util/Startable.java 
Fri Dec 20 12:11:15 2013
@@ -27,7 +27,7 @@ package org.apache.river.api.util;
  * @see net.jini.export.Exporter
  * @since 3.0.0
  */
-public interface Commission {
+public interface Startable {
     /**
      * Called after construction, this method enables objects to delay
      * starting threads or exporting until after construction is complete, 

Added: 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/impl/thread/NamedThreadFactory.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/impl/thread/NamedThreadFactory.java?rev=1552606&view=auto
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/impl/thread/NamedThreadFactory.java
 (added)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/impl/thread/NamedThreadFactory.java
 Fri Dec 20 12:11:15 2013
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.river.impl.thread;
+
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * A utility to help readability of pool threads
+ * @author peter
+ */
+public class NamedThreadFactory implements ThreadFactory {
+    private final AtomicInteger threadCount;
+    private final String name;
+    private final boolean daemon;
+    
+    public NamedThreadFactory(String name, boolean daemon){
+        threadCount = new AtomicInteger();
+        this.name = name;
+        this.daemon = daemon;
+    }
+
+    @Override
+    public Thread newThread(Runnable r) {
+        StringBuilder sb = new StringBuilder(name);
+        sb.append('_');
+        sb.append("thread-");
+        sb.append(threadCount.getAndIncrement());
+        Thread t = new Thread(r, sb.toString());
+        t.setDaemon(daemon);
+        return t;
+    }
+    
+}


Reply via email to