Author: peter_firmstone Date: Wed Apr 17 14:46:56 2013 New Revision: 1468943
URL: http://svn.apache.org/r1468943 Log: Removing instances of Thread.start() calls in object constructors and making fields final where possible. Modified: river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mercury/MailboxImpl.java river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mercury/MailboxImplInit.java river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/outrigger/OutriggerServerImpl.java river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/reggie/RegistrarImpl.java 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=1468943&r1=1468942&r2=1468943&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 Wed Apr 17 14:46:56 2013 @@ -80,6 +80,8 @@ import java.rmi.activation.ActivationSys import java.rmi.MarshalledObject; import java.rmi.NoSuchObjectException; import java.rmi.RemoteException; +import java.security.AccessControlContext; +import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; import java.util.Arrays; @@ -420,6 +422,7 @@ class MailboxImpl implements MailboxBack private Configuration config; private Throwable thrown; private boolean started = false; + private AccessControlContext context; /////////////////////// // Activation Methods @@ -642,6 +645,7 @@ class MailboxImpl implements MailboxBack expirer = init.expirer; this.config = init.config; this.loginContext = loginContext; + context = init.context; } else { activationID = activID; @@ -673,6 +677,7 @@ class MailboxImpl implements MailboxBack expirer = null; this.config = null; this.loginContext = loginContext; + context = null; } // Assign fields. } @@ -1074,128 +1079,139 @@ class MailboxImpl implements MailboxBack concurrentObj.writeLock(); if (started) return; started = true; // mutual exclusion + try { if (thrown != null) throw thrown; - if (persistent){ - // Start snapshot thread belongs in start method - // snapshotter = new SnapshotThread(); - snapshotter.start(); - } + AccessController.doPrivileged(new PrivilegedExceptionAction(){ - /* --- The following will go into start method --- */ + @Override + public Object run() throws Exception { + if (persistent){ + // Start snapshot thread belongs in start method + // snapshotter = new SnapshotThread(); + snapshotter.start(); + } - // Start threads - // notifier = new Notifier(config); - notifier.start(); - // expirer = new ExpirationThread(); - expirer.start(); - - // Export server instance and get its reference - serverStub = (MailboxBackEnd)exporter.export(this); - if (initLogger.isLoggable(Level.FINEST)) { - initLogger.log(Level.FINEST, "Service stub is: {0}", - serverStub); - } - - // Create the proxy that will be registered in the lookup service - mailboxProxy = - MailboxProxy.create(serverStub, serviceID); - if (initLogger.isLoggable(Level.FINEST)) { - initLogger.log(Level.FINEST, "Service proxy is: {0}", - mailboxProxy); - } - - // Create the admin proxy for this service - mailboxAdminProxy = - MailboxAdminProxy.create(serverStub, serviceID); - if (initLogger.isLoggable(Level.FINEST)) { - initLogger.log(Level.FINEST, "Service admin proxy is: {0}", - mailboxAdminProxy); - } + /* --- The following will go into start method --- */ - // Create leaseFactory - leaseFactory = new LeaseFactory(serverStub, serviceID); + // Start threads + // notifier = new Notifier(config); + notifier.start(); + // expirer = new ExpirationThread(); + expirer.start(); + + // Export server instance and get its reference + serverStub = (MailboxBackEnd)exporter.export(MailboxImpl.this); + if (initLogger.isLoggable(Level.FINEST)) { + initLogger.log(Level.FINEST, "Service stub is: {0}", + serverStub); + } + + // Create the proxy that will be registered in the lookup service + mailboxProxy = + MailboxProxy.create(serverStub, serviceID); + if (initLogger.isLoggable(Level.FINEST)) { + initLogger.log(Level.FINEST, "Service proxy is: {0}", + mailboxProxy); + } + + // Create the admin proxy for this service + mailboxAdminProxy = + MailboxAdminProxy.create(serverStub, serviceID); + if (initLogger.isLoggable(Level.FINEST)) { + initLogger.log(Level.FINEST, "Service admin proxy is: {0}", + mailboxAdminProxy); + } - // Get shorthand reference to the discovery manager - try { - lookupDiscMgr = - (DiscoveryManagement)Config.getNonNullEntry(config, - MERCURY, "discoveryManager", - DiscoveryManagement.class); - if(lookupDiscMgr instanceof DiscoveryGroupManagement) { - // Verify proper initial state ---> NO_GROUPS - String[] groups = - ((DiscoveryGroupManagement)lookupDiscMgr).getGroups(); - if( (groups == DiscoveryGroupManagement.ALL_GROUPS) || - (groups.length != 0) ) - { - throw new ConfigurationException( - "discoveryManager entry must be configured " + - " with no groups."); - }//endif - } else { - throw new ConfigurationException( - "discoveryManager entry must implement " + - "DiscoveryGroupManagement"); - } + // Create leaseFactory + leaseFactory = new LeaseFactory(serverStub, serviceID); - if(lookupDiscMgr instanceof DiscoveryLocatorManagement) { - LookupLocator[] locs = - ((DiscoveryLocatorManagement)lookupDiscMgr).getLocators(); - if( (locs != null) && (locs.length != 0) ) { - throw new ConfigurationException( - "discoveryManager entry must be configured " + - "with no locators"); - }//endif - } else { - throw new ConfigurationException( - "discoveryManager entry must implement " + - "DiscoveryLocatorManagement"); - } - - ((DiscoveryGroupManagement)lookupDiscMgr).setGroups(lookupGroups); - ((DiscoveryLocatorManagement)lookupDiscMgr).setLocators(lookupLocators); - } catch (NoSuchEntryException e) { - lookupDiscMgr = - new LookupDiscoveryManager(lookupGroups, lookupLocators, - null, config); - } - if (initLogger.isLoggable(Level.FINEST)) { - initLogger.log(Level.FINEST, "Discovery manager is: {0}", - lookupDiscMgr); - } - - ServiceID lookupID = new ServiceID( - serviceID.getMostSignificantBits(), - serviceID.getLeastSignificantBits()); + // Get shorthand reference to the discovery manager + try { + lookupDiscMgr = + (DiscoveryManagement)Config.getNonNullEntry(config, + MERCURY, "discoveryManager", + DiscoveryManagement.class); + if(lookupDiscMgr instanceof DiscoveryGroupManagement) { + // Verify proper initial state ---> NO_GROUPS + String[] groups = + ((DiscoveryGroupManagement)lookupDiscMgr).getGroups(); + if( (groups == DiscoveryGroupManagement.ALL_GROUPS) || + (groups.length != 0) ) + { + throw new ConfigurationException( + "discoveryManager entry must be configured " + + " with no groups."); + }//endif + } else { + throw new ConfigurationException( + "discoveryManager entry must implement " + + "DiscoveryGroupManagement"); + } - if (initLogger.isLoggable(Level.FINEST)) { - initLogger.log(Level.FINEST, "Creating JoinManager."); - } - joiner = new JoinManager( - mailboxProxy, // service object - lookupAttrs, // service attributes - lookupID, // Service ID - lookupDiscMgr, // DiscoveryManagement ref - default - null, // LeaseRenewalManager reference - config); + if(lookupDiscMgr instanceof DiscoveryLocatorManagement) { + LookupLocator[] locs = + ((DiscoveryLocatorManagement)lookupDiscMgr).getLocators(); + if( (locs != null) && (locs.length != 0) ) { + throw new ConfigurationException( + "discoveryManager entry must be configured " + + "with no locators"); + }//endif + } else { + throw new ConfigurationException( + "discoveryManager entry must implement " + + "DiscoveryLocatorManagement"); + } + + ((DiscoveryGroupManagement)lookupDiscMgr).setGroups(lookupGroups); + ((DiscoveryLocatorManagement)lookupDiscMgr).setLocators(lookupLocators); + } catch (NoSuchEntryException e) { + lookupDiscMgr = + new LookupDiscoveryManager(lookupGroups, lookupLocators, + null, config); + } + if (initLogger.isLoggable(Level.FINEST)) { + initLogger.log(Level.FINEST, "Discovery manager is: {0}", + lookupDiscMgr); + } + + ServiceID lookupID = new ServiceID( + serviceID.getMostSignificantBits(), + serviceID.getLeastSignificantBits()); - if (operationsLogger.isLoggable(Level.FINER)) { - operationsLogger.exiting(mailboxSourceClass, - "doInit"); - } - readyState.ready(); + if (initLogger.isLoggable(Level.FINEST)) { + initLogger.log(Level.FINEST, "Creating JoinManager."); + } + joiner = new JoinManager( + mailboxProxy, // service object + lookupAttrs, // service attributes + lookupID, // Service ID + lookupDiscMgr, // DiscoveryManagement ref - default + null, // LeaseRenewalManager reference + config); + + if (operationsLogger.isLoggable(Level.FINER)) { + operationsLogger.exiting(mailboxSourceClass, + "doInit"); + } + readyState.ready(); - if (startupLogger.isLoggable(Level.INFO)) { - startupLogger.log - (Level.INFO, "Mercury started: {0}", this); - } + if (startupLogger.isLoggable(Level.INFO)) { + startupLogger.log + (Level.INFO, "Mercury started: {0}", this); + } + return null; + } + + }, context); + } catch (Throwable t){ cleanup(); initFailed(t); } finally { config = null; thrown = null; + context = null; concurrentObj.writeUnlock(); } } Modified: river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mercury/MailboxImplInit.java URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mercury/MailboxImplInit.java?rev=1468943&r1=1468942&r2=1468943&view=diff ============================================================================== --- river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mercury/MailboxImplInit.java (original) +++ river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mercury/MailboxImplInit.java Wed Apr 17 14:46:56 2013 @@ -32,6 +32,8 @@ import java.rmi.activation.ActivationExc import java.rmi.activation.ActivationGroup; import java.rmi.activation.ActivationID; import java.rmi.activation.ActivationSystem; +import java.security.AccessControlContext; +import java.security.AccessController; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -88,6 +90,7 @@ class MailboxImplInit { Thread notifier; Thread expirer; Configuration config; + AccessControlContext context; MailboxImplInit(Configuration config, boolean persistent, @@ -102,6 +105,7 @@ class MailboxImplInit { this.notifier = notifier; this.expirer = expirer; this.config = config; + context = AccessController.getContext(); // Get activation specific configuration items, if activated if (activationID != null) { ProxyPreparer activationSystemPreparer = (ProxyPreparer) Config.getNonNullEntry(config, MailboxImpl.MERCURY, "activationSystemPreparer", ProxyPreparer.class, new BasicProxyPreparer()); 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=1468943&r1=1468942&r2=1468943&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 Wed Apr 17 14:46:56 2013 @@ -77,6 +77,8 @@ import java.rmi.UnmarshalException; import java.rmi.activation.ActivationID; import java.rmi.activation.ActivationSystem; import java.rmi.activation.ActivationException; +import java.security.AccessControlContext; +import java.security.AccessController; import java.security.SecureRandom; import java.security.PrivilegedExceptionAction; import java.security.PrivilegedActionException; @@ -491,6 +493,7 @@ public class OutriggerServerImpl private Exception except; private boolean persistent; private long maxServerQueryTimeout; + private AccessControlContext context; /** * Create a new <code>OutriggerServerImpl</code> server (possibly a @@ -602,6 +605,7 @@ public class OutriggerServerImpl contentsQueryReaperThread = h.contentsQueryReaperThread; starter = h.starter; maxServerQueryTimeout = h.maxServerQueryTimeout; + context = h.context; } else { lifecycleLogger.log(Level.SEVERE, "Failed to construct Outrigger server", except == null ? thrown : except); this.loginContext = null; @@ -633,6 +637,7 @@ public class OutriggerServerImpl contentsQueryReaperThread = null; starter = null; maxServerQueryTimeout = 0; + context = null; } } @@ -646,74 +651,83 @@ public class OutriggerServerImpl if (thrown != null) throw (Error) thrown; if (except != null) throw except; try { - // This takes a while the first time, so let's get it going - txnMonitor.start(); - starter.start(); - - // Get store from configuration - if (persistent) { - store = (Store)Config.getNonNullEntry(config, - COMPONENT_NAME, - "store", Store.class); - expirationOpQueue.start(); - } - // If we have a store, recover the log - if (store != null) { - log = store.setupStore(this); + AccessController.doPrivileged(new PrivilegedExceptionAction(){ - // Record this boot - // - log.bootOp(System.currentTimeMillis(), getSessionId()); - recoverTxns(); - } else if (activationID != null || persistent) { - /* else we don't have a store, if we need one complain - * will be logged by constructor - */ - throw new ConfigurationException("Must provide for a " + - "store for component " + COMPONENT_NAME + ", by providing " + - "valid values for the store or " + - PERSISTENCE_DIR_CONFIG_ENTRY + " entries if creating " + - " a persistent space"); - } - - /* Now that we have recovered any store we have, create a - * Uuid if there was not one in the store. - */ - if (topUuid == null) { - topUuid = UuidFactory.generate(); - if (log != null) - log.uuidOp(topUuid); - } - - if (ourRemoteRef instanceof RemoteMethodControl) { - spaceProxy = new ConstrainableSpaceProxy2(ourRemoteRef, topUuid, - maxServerQueryTimeout, null); - adminProxy = - new ConstrainableAdminProxy(ourRemoteRef, topUuid, null); - participantProxy = - new ConstrainableParticipantProxy(ourRemoteRef, topUuid, null); - } else { - spaceProxy = new SpaceProxy2(ourRemoteRef, topUuid, - maxServerQueryTimeout); - adminProxy = new AdminProxy(ourRemoteRef, topUuid); - participantProxy = new ParticipantProxy(ourRemoteRef, topUuid); - } - - leaseFactory = new LeaseFactory(ourRemoteRef, topUuid); - - /* Kick off independent threads. */ - - // start the JoinStateManager - joinStateManager.startManager(config, log, spaceProxy, - new ServiceID(topUuid.getMostSignificantBits(), - topUuid.getLeastSignificantBits()), - attributesFor()); - // Notifier uses TaskManager, which doesn't start threads until given tasks. - notifier = new Notifier(spaceProxy, recoveredListenerPreparer, config); - operationJournal.start(); - templateReaperThread.start(); - entryReaperThread.start(); - contentsQueryReaperThread.start(); + @Override + public Object run() throws Exception { + // This takes a while the first time, so let's get it going + txnMonitor.start(); + starter.start(); + + // Get store from configuration + if (persistent) { + store = (Store)Config.getNonNullEntry(config, + COMPONENT_NAME, + "store", Store.class); + expirationOpQueue.start(); + } + // If we have a store, recover the log + if (store != null) { + log = store.setupStore(OutriggerServerImpl.this); + + // Record this boot + // + log.bootOp(System.currentTimeMillis(), getSessionId()); + recoverTxns(); + } else if (activationID != null || persistent) { + /* else we don't have a store, if we need one complain + * will be logged by constructor + */ + throw new ConfigurationException("Must provide for a " + + "store for component " + COMPONENT_NAME + ", by providing " + + "valid values for the store or " + + PERSISTENCE_DIR_CONFIG_ENTRY + " entries if creating " + + " a persistent space"); + } + + /* Now that we have recovered any store we have, create a + * Uuid if there was not one in the store. + */ + if (topUuid == null) { + topUuid = UuidFactory.generate(); + if (log != null) + log.uuidOp(topUuid); + } + + if (ourRemoteRef instanceof RemoteMethodControl) { + spaceProxy = new ConstrainableSpaceProxy2(ourRemoteRef, topUuid, + maxServerQueryTimeout, null); + adminProxy = + new ConstrainableAdminProxy(ourRemoteRef, topUuid, null); + participantProxy = + new ConstrainableParticipantProxy(ourRemoteRef, topUuid, null); + } else { + spaceProxy = new SpaceProxy2(ourRemoteRef, topUuid, + maxServerQueryTimeout); + adminProxy = new AdminProxy(ourRemoteRef, topUuid); + participantProxy = new ParticipantProxy(ourRemoteRef, topUuid); + } + + leaseFactory = new LeaseFactory(ourRemoteRef, topUuid); + + /* Kick off independent threads. */ + + // start the JoinStateManager + joinStateManager.startManager(config, log, spaceProxy, + new ServiceID(topUuid.getMostSignificantBits(), + topUuid.getLeastSignificantBits()), + attributesFor()); + // Notifier uses TaskManager, which doesn't start threads until given tasks. + notifier = new Notifier(spaceProxy, recoveredListenerPreparer, config); + operationJournal.start(); + templateReaperThread.start(); + entryReaperThread.start(); + contentsQueryReaperThread.start(); + return null; + } + + }, context); + } catch (Exception e) { // Clean up and rethrow. lifecycleLogger.log(Level.SEVERE, "Failed to start Outrigger server", e); @@ -771,6 +785,7 @@ public class OutriggerServerImpl starter = null; except = null; thrown = null; + context = null; } } @@ -803,6 +818,7 @@ public class OutriggerServerImpl ContentsQueryReaper contentsQueryReaperThread; Thread starter; long maxServerQueryTimeout; + AccessControlContext context; } /** @@ -831,6 +847,7 @@ public class OutriggerServerImpl throws IOException, ConfigurationException, ActivationException { InitHolder h = new InitHolder(); + h.context = AccessController.getContext(); try { h.txnMonitor = new TxnMonitor(this, config); /* Get the activation related preparers we need */
