You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2010/09/04 01:24:43 UTC

svn commit: r992504 - in /openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton: SingletonContainer.java SingletonInstanceManager.java

Author: dblevins
Date: Fri Sep  3 23:24:43 2010
New Revision: 992504

URL: http://svn.apache.org/viewvc?rev=992504&view=rev
Log:
Tweak to tuck away the initialization so it is essentially a private method of SingletonInstanceManager

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java?rev=992504&r1=992503&r2=992504&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java Fri Sep  3 23:24:43 2010
@@ -131,30 +131,12 @@ public class SingletonContainer implemen
     }
     
     public void start(DeploymentInfo info) throws OpenEJBException {    
-        CoreDeploymentInfo deploymentInfo = (CoreDeploymentInfo) info;
-        if (deploymentInfo.isLoadOnStartup()) {
-            initialize(info);
-        }
+        instanceManager.start(info);
     }
     
     public void stop(DeploymentInfo info) throws OpenEJBException {        
     }
     
-    protected void initialize(DeploymentInfo info) throws OpenEJBException {
-        CoreDeploymentInfo deploymentInfo = (CoreDeploymentInfo) info;
-        try {
-            ThreadContext callContext = new ThreadContext(deploymentInfo, null);
-            ThreadContext old = ThreadContext.enter(callContext);
-            try {
-                instanceManager.getInstance(callContext);
-            } finally{
-                ThreadContext.exit(old);
-            }
-        } catch (OpenEJBException e) {
-            throw new OpenEJBException("Singleton startup failed: "+deploymentInfo.getDeploymentID(), e);
-        }       
-    }
-    
     public void undeploy(DeploymentInfo info) {
         undeploy((CoreDeploymentInfo)info);
     }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java?rev=992504&r1=992503&r2=992504&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java Fri Sep  3 23:24:43 2010
@@ -42,7 +42,6 @@ import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
 import org.apache.openejb.BeanType;
-import org.apache.openejb.Container;
 import org.apache.openejb.DeploymentInfo;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.ApplicationException;
@@ -63,12 +62,10 @@ import org.apache.openejb.spi.ContainerS
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
-import org.apache.openejb.util.SafeToolkit;
 
 public class SingletonInstanceManager {
     private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB, "org.apache.openejb.util.resources");
 
-    protected final SafeToolkit toolkit = SafeToolkit.getToolkit("SingletonInstanceManager");
     private SecurityService securityService;
     private final SingletonContext sessionContext;
     private final WebServiceContext webServiceContext;
@@ -78,7 +75,29 @@ public class SingletonInstanceManager {
         sessionContext = new SingletonContext(this.securityService);
         webServiceContext = (WebServiceContext) new EjbWsContext(sessionContext);
     }
-    
+
+    protected void start(DeploymentInfo info) throws OpenEJBException {
+        CoreDeploymentInfo deploymentInfo = (CoreDeploymentInfo) info;
+        if (deploymentInfo.isLoadOnStartup()) {
+            initialize(info);
+        }
+    }
+
+    private void initialize(DeploymentInfo info) throws OpenEJBException {
+        CoreDeploymentInfo deploymentInfo = (CoreDeploymentInfo) info;
+        try {
+            ThreadContext callContext = new ThreadContext(deploymentInfo, null);
+            ThreadContext old = ThreadContext.enter(callContext);
+            try {
+                getInstance(callContext);
+            } finally{
+                ThreadContext.exit(old);
+            }
+        } catch (OpenEJBException e) {
+            throw new OpenEJBException("Singleton startup failed: "+deploymentInfo.getDeploymentID(), e);
+        }
+    }
+
     public Instance getInstance(final ThreadContext callContext) throws OpenEJBException {
         final CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();                      
         Data data = (Data) deploymentInfo.getContainerData();
@@ -101,7 +120,7 @@ public class SingletonInstanceManager {
 
             do {
                 // If our FutureTask was the one to win the slot
-                // than we are the ones responsisble for creating
+                // than we are the ones responsible for creating
                 // the singleton while the others wait.
                 if (singleton.compareAndSet(null, task)) {
                     task.run();
@@ -133,15 +152,21 @@ public class SingletonInstanceManager {
         SystemInstance systemInstance = SystemInstance.get();
         ContainerSystem containerSystem = systemInstance.getComponent(ContainerSystem.class);
         for (String dependencyId : deploymentInfo.getDependsOn()) {
-            DeploymentInfo dependencyInfo = containerSystem.getDeploymentInfo(dependencyId);
+            CoreDeploymentInfo dependencyInfo = (CoreDeploymentInfo) containerSystem.getDeploymentInfo(dependencyId);
             if (dependencyInfo == null) {
-                throw new OpenEJBException("Deployment does not exist in this container. Deployment(id='"+dependencyInfo+"')");
+                throw new OpenEJBException("Deployment does not exist. Deployment(id='"+dependencyInfo+"')");
             }
-            Container dependencyContainer = dependencyInfo.getContainer();
-            if (dependencyContainer instanceof SingletonContainer) {
-                ((SingletonContainer) dependencyContainer).initialize(dependencyInfo);
+
+            final Object containerData = dependencyInfo.getContainerData();
+
+            // Bean may not be a singleton or may be a singleton
+            // managed by a different container implementation
+            if (containerData instanceof Data) {
+                Data data = (Data) containerData;
+
+                data.initialize();
             }
-        }        
+        }
     }
     
     private Instance createInstance(ThreadContext callContext, CoreDeploymentInfo deploymentInfo) throws ApplicationException {
@@ -258,7 +283,7 @@ public class SingletonInstanceManager {
     }
 
     public void deploy(CoreDeploymentInfo deploymentInfo) throws OpenEJBException {
-        Data data = new Data();
+        Data data = new Data(deploymentInfo);
         deploymentInfo.setContainerData(data);
 
         deploymentInfo.set(EJBContext.class, this.sessionContext);
@@ -311,14 +336,24 @@ public class SingletonInstanceManager {
         deploymentInfo.setContainerData(null);
     }
 
-    private static final class Data {
+    private final class Data {
         private final AtomicReference<Future<Instance>> singleton = new AtomicReference<Future<Instance>>();
         private final List<ObjectName> jmxNames = new ArrayList<ObjectName>();
+        private final CoreDeploymentInfo info;
+
+        public Data(CoreDeploymentInfo info) {
+            this.info = info;
+        }
 
         public ObjectName add(ObjectName name) {
             jmxNames.add(name);
             return name;
         }
+
+
+        public void initialize() throws OpenEJBException {
+            SingletonInstanceManager.this.initialize(info);
+        }
     }