You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by ga...@apache.org on 2010/09/02 22:02:06 UTC

svn commit: r992094 - in /openejb/trunk/openejb3/container/openejb-core/src: main/java/org/apache/openejb/ main/java/org/apache/openejb/assembler/classic/ main/java/org/apache/openejb/core/ main/java/org/apache/openejb/core/cmp/ main/java/org/apache/op...

Author: gawor
Date: Thu Sep  2 20:02:06 2010
New Revision: 992094

URL: http://svn.apache.org/viewvc?rev=992094&view=rev
Log:
OPENEJB-1348: 1) Add start()/stop() methods to Container API to handle circular @Startup singleton dependencies, 2) Enforce @DependsOn at runtime

Added:
    openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/SingletonCircularTest.java   (with props)
Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/Container.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/RpcContainerWrapper.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
    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
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
    openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/assembler/classic/Messages.properties
    openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/DependsOnTest.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/Container.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/Container.java?rev=992094&r1=992093&r2=992094&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/Container.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/Container.java Thu Sep  2 20:02:06 2010
@@ -27,6 +27,11 @@ public interface Container {
     public DeploymentInfo [] deployments();
 
     public void deploy(DeploymentInfo info) throws OpenEJBException;
-
+        
+    public void start(DeploymentInfo info) throws OpenEJBException;
+    
+    public void stop(DeploymentInfo info) throws OpenEJBException;
+    
     public void undeploy(DeploymentInfo info) throws OpenEJBException;
+    
 }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=992094&r1=992093&r2=992094&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Thu Sep  2 20:02:06 2010
@@ -80,6 +80,7 @@ import org.apache.openejb.core.SimpleTra
 import org.apache.openejb.core.TransactionSynchronizationRegistryWrapper;
 import org.apache.openejb.core.ivm.naming.IvmContext;
 import org.apache.openejb.core.ivm.naming.IvmJndiFactory;
+import org.apache.openejb.core.singleton.SingletonContainer;
 import org.apache.openejb.core.timer.EjbTimerServiceImpl;
 import org.apache.openejb.core.timer.NullEjbTimerServiceImpl;
 import org.apache.openejb.core.timer.ScheduleData;
@@ -647,6 +648,7 @@ public class Assembler extends Assembler
             
             // now that everything is configured, deploy to the container
             if (start) {
+                // deploy
                 for (DeploymentInfo deployment : allDeployments) {
                     try {
                         Container container = deployment.getContainer();
@@ -656,6 +658,17 @@ public class Assembler extends Assembler
                         throw new OpenEJBException("Error deploying '"+deployment.getEjbName()+"'.  Exception: "+t.getClass()+": "+t.getMessage(), t);
                     }
                 }
+                
+                // start
+                for (DeploymentInfo deployment : allDeployments) {
+                    try {
+                        Container container = deployment.getContainer();
+                        container.start(deployment);
+                        logger.info("createApplication.startedEjb", deployment.getDeploymentID(), deployment.getEjbName(), container.getContainerID());                        
+                    } catch (Throwable t) {
+                        throw new OpenEJBException("Error starting '"+deployment.getEjbName()+"'.  Exception: "+t.getClass()+": "+t.getMessage(), t);
+                    }
+                }
             }
 
             // App Client
@@ -901,6 +914,18 @@ public class Assembler extends Assembler
         // reverse that to get the stopping order
         Collections.reverse(deployments);
 
+        // stop
+        for (DeploymentInfo deployment : deployments) {
+            String deploymentID = deployment.getDeploymentID() + "";
+            try {
+                Container container = deployment.getContainer();
+                container.stop(deployment);
+            } catch (Throwable t) {
+                undeployException.getCauses().add(new Exception("bean: " + deploymentID + ": " + t.getMessage(), t));
+            }
+        }
+        
+        // undeploy
         for (DeploymentInfo deployment : deployments) {
             String deploymentID = deployment.getDeploymentID() + "";
             try {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/RpcContainerWrapper.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/RpcContainerWrapper.java?rev=992094&r1=992093&r2=992094&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/RpcContainerWrapper.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/RpcContainerWrapper.java Thu Sep  2 20:02:06 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.core;
 
+import org.apache.openejb.DeploymentInfo;
 import org.apache.openejb.RpcContainer;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.ContainerType;
@@ -51,19 +52,27 @@ public class RpcContainerWrapper impleme
         return container.getContainerID();
     }
 
-    public org.apache.openejb.DeploymentInfo getDeploymentInfo(Object deploymentID) {
+    public DeploymentInfo getDeploymentInfo(Object deploymentID) {
         return container.getDeploymentInfo(deploymentID);
     }
 
-    public org.apache.openejb.DeploymentInfo [] deployments() {
+    public DeploymentInfo [] deployments() {
         return container.deployments();
     }
 
-    public void deploy(org.apache.openejb.DeploymentInfo info) throws OpenEJBException {
+    public void deploy(DeploymentInfo info) throws OpenEJBException {
         container.deploy(info);
     }
 
-    public void undeploy(org.apache.openejb.DeploymentInfo info) throws OpenEJBException {
+    public void start(DeploymentInfo info) throws OpenEJBException {    
+        container.start(info);
+    }
+    
+    public void stop(DeploymentInfo info) throws OpenEJBException {   
+        container.stop(info);
+    }
+    
+    public void undeploy(DeploymentInfo info) throws OpenEJBException {
         container.undeploy(info);
     }
 

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java?rev=992094&r1=992093&r2=992094&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java Thu Sep  2 20:02:06 2010
@@ -184,6 +184,12 @@ public class CmpContainer implements Rpc
         }
     }
 
+    public void start(DeploymentInfo deploymentInfo) throws OpenEJBException {        
+    }
+    
+    public void stop(DeploymentInfo deploymentInfo) throws OpenEJBException {        
+    }
+    
     public void undeploy(DeploymentInfo deploymentInfo) throws OpenEJBException {
         EjbTimerService timerService = deploymentInfo.getEjbTimerService();
         if (timerService != null) {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java?rev=992094&r1=992093&r2=992094&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java Thu Sep  2 20:02:06 2010
@@ -119,6 +119,12 @@ public class EntityContainer implements 
         }
     }
 
+    public void start(DeploymentInfo info) throws OpenEJBException {        
+    }
+    
+    public void stop(DeploymentInfo info) throws OpenEJBException {        
+    }
+    
     public void undeploy(DeploymentInfo info) throws OpenEJBException {
         EjbTimerService timerService = info.getEjbTimerService();
         if (timerService != null) {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java?rev=992094&r1=992093&r2=992094&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java Thu Sep  2 20:02:06 2010
@@ -233,8 +233,14 @@ public class ManagedContainer implements
         deploy((CoreDeploymentInfo) deploymentInfo);
     }
 
-    public void undeploy(DeploymentInfo info) throws OpenEJBException {
-        undeploy((CoreDeploymentInfo) info);
+    public void start(DeploymentInfo deploymentInfo) throws OpenEJBException {        
+    }
+    
+    public void stop(DeploymentInfo deploymentInfo) throws OpenEJBException {        
+    }
+    
+    public void undeploy(DeploymentInfo deploymentInfo) throws OpenEJBException {
+        undeploy((CoreDeploymentInfo) deploymentInfo);
     }
 
     private synchronized void undeploy(final CoreDeploymentInfo deploymentInfo) throws OpenEJBException {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java?rev=992094&r1=992093&r2=992094&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java Thu Sep  2 20:02:06 2010
@@ -233,6 +233,12 @@ public class MdbContainer implements Rpc
         }
     }
 
+    public void start(DeploymentInfo info) throws OpenEJBException {        
+    }
+    
+    public void stop(DeploymentInfo info) throws OpenEJBException {        
+    }
+    
     public void undeploy(DeploymentInfo info) throws OpenEJBException {
         if (!(info instanceof CoreDeploymentInfo)) {
             return;

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=992094&r1=992093&r2=992094&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 Thu Sep  2 20:02:06 2010
@@ -127,22 +127,34 @@ public class SingletonContainer implemen
         if (timerService != null) {
             timerService.start();
         }
-
-        if (deploymentInfo.isLoadOnStartup()){
+        
+    }
+    
+    public void start(DeploymentInfo info) throws OpenEJBException {    
+        CoreDeploymentInfo deploymentInfo = (CoreDeploymentInfo) info;
+        if (deploymentInfo.isLoadOnStartup()) {
+            initialize(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 {
-                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);
+                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);
     }
@@ -233,10 +245,6 @@ public class SingletonContainer implemen
         return securityService;
     }
 
-    public SingletonInstanceManager getInstanceManager() {
-        return instanceManager;
-    }
-
     protected Object _invoke(Method callMethod, Method runMethod, Object[] args, Instance instance, ThreadContext callContext, InterfaceType callType) throws OpenEJBException {
         CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
                

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=992094&r1=992093&r2=992094&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 Thu Sep  2 20:02:06 2010
@@ -42,9 +42,12 @@ 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;
 import org.apache.openejb.core.transaction.TransactionType;
+import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.monitoring.StatsInterceptor;
 import org.apache.openejb.monitoring.ObjectNameBuilder;
 import org.apache.openejb.monitoring.ManagedMBean;
@@ -56,6 +59,7 @@ import org.apache.openejb.core.intercept
 import org.apache.openejb.core.interceptor.InterceptorStack;
 import org.apache.openejb.core.transaction.EjbTransactionUtil;
 import org.apache.openejb.core.transaction.TransactionPolicy;
+import org.apache.openejb.spi.ContainerSystem;
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
@@ -74,9 +78,9 @@ public class SingletonInstanceManager {
         sessionContext = new SingletonContext(this.securityService);
         webServiceContext = (WebServiceContext) new EjbWsContext(sessionContext);
     }
-
+    
     public Instance getInstance(final ThreadContext callContext) throws OpenEJBException {
-        final CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
+        final CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();                      
         Data data = (Data) deploymentInfo.getContainerData();
         AtomicReference<Future<Instance>> singleton = data.singleton;
         try {
@@ -90,12 +94,11 @@ public class SingletonInstanceManager {
             // We will construct this FutureTask and compete with the
             // other threads for the right to create the singleton
             FutureTask<Instance> task = new FutureTask<Instance>(new Callable<Instance>() {
-                public Instance call() throws Exception {
+                public Instance call() throws Exception {                    
                     return createInstance(callContext, deploymentInfo);
                 }
             });
 
-
             do {
                 // If our FutureTask was the one to win the slot
                 // than we are the ones responsisble for creating
@@ -126,9 +129,25 @@ public class SingletonInstanceManager {
         }
     }
 
-    private Instance createInstance(ThreadContext callContext, CoreDeploymentInfo deploymentInfo) throws org.apache.openejb.ApplicationException {
-
+    private void initializeDependencies(CoreDeploymentInfo deploymentInfo) throws OpenEJBException {
+        SystemInstance systemInstance = SystemInstance.get();
+        ContainerSystem containerSystem = systemInstance.getComponent(ContainerSystem.class);
+        for (String dependencyId : deploymentInfo.getDependsOn()) {
+            DeploymentInfo dependencyInfo = containerSystem.getDeploymentInfo(dependencyId);
+            if (dependencyInfo == null) {
+                throw new OpenEJBException("Deployment does not exist in this container. Deployment(id='"+dependencyInfo+"')");
+            }
+            Container dependencyContainer = dependencyInfo.getContainer();
+            if (dependencyContainer instanceof SingletonContainer) {
+                ((SingletonContainer) dependencyContainer).initialize(dependencyInfo);
+            }
+        }        
+    }
+    
+    private Instance createInstance(ThreadContext callContext, CoreDeploymentInfo deploymentInfo) throws ApplicationException {
         try {
+            initializeDependencies(deploymentInfo);
+            
             final InstanceContext context = deploymentInfo.newInstance();
 
             if (context.getBean() instanceof SessionBean){

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java?rev=992094&r1=992093&r2=992094&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java Thu Sep  2 20:02:06 2010
@@ -243,8 +243,14 @@ public class StatefulContainer implement
         deploy((CoreDeploymentInfo) deploymentInfo);
     }
 
-    public void undeploy(DeploymentInfo info) throws OpenEJBException {
-        undeploy((CoreDeploymentInfo) info);
+    public void start(DeploymentInfo deploymentInfo) throws OpenEJBException {        
+    }
+    
+    public void stop(DeploymentInfo deploymentInfo) throws OpenEJBException {        
+    }
+    
+    public void undeploy(DeploymentInfo deploymentInfo) throws OpenEJBException {
+        undeploy((CoreDeploymentInfo) deploymentInfo);
     }
 
     private synchronized void undeploy(final CoreDeploymentInfo deploymentInfo) throws OpenEJBException {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java?rev=992094&r1=992093&r2=992094&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java Thu Sep  2 20:02:06 2010
@@ -111,7 +111,6 @@ public class StatelessContainer implemen
 
     public void deploy(DeploymentInfo info) throws OpenEJBException {
         CoreDeploymentInfo deploymentInfo = (CoreDeploymentInfo) info;
-        instanceManager.deploy(deploymentInfo);
         String id = (String) deploymentInfo.getDeploymentID();
         synchronized (this) {
             deploymentRegistry.put(id, deploymentInfo);
@@ -124,6 +123,14 @@ public class StatelessContainer implemen
         }
     }
 
+    public void start(DeploymentInfo info) throws OpenEJBException {  
+        CoreDeploymentInfo deploymentInfo = (CoreDeploymentInfo) info;
+        instanceManager.deploy(deploymentInfo);
+    }
+    
+    public void stop(DeploymentInfo info) throws OpenEJBException {        
+    }
+    
     public void undeploy(DeploymentInfo info) {
         undeploy((CoreDeploymentInfo)info);
     }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/assembler/classic/Messages.properties
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/assembler/classic/Messages.properties?rev=992094&r1=992093&r2=992094&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/assembler/classic/Messages.properties (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/assembler/classic/Messages.properties Thu Sep  2 20:02:06 2010
@@ -59,6 +59,9 @@ createApplication.invalidClass = Applica
 # info("createApplication.createdEjb", beanInfo.ejbDeploymentId, beanInfo.ejbName, beanInfo.containerId);
 createApplication.createdEjb = Created Ejb(deployment-id={0}, ejb-name={1}, container={2})
 
+# info("createApplication.startedEjb", beanInfo.ejbDeploymentId, beanInfo.ejbName, beanInfo.containerId);
+createApplication.startedEjb = Started Ejb(deployment-id={0}, ejb-name={1}, container={2})
+
 # info("createApplication.createLocalClient", clientClassName, clientInfo.moduleId);
 createApplication.createLocalClient = LocalClient(class={0}, module={1}) 
 

Modified: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/DependsOnTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/DependsOnTest.java?rev=992094&r1=992093&r2=992094&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/DependsOnTest.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/DependsOnTest.java Thu Sep  2 20:02:06 2010
@@ -21,9 +21,9 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.assembler.classic.ProxyFactoryInfo;
 import org.apache.openejb.assembler.classic.SecurityServiceInfo;
 import org.apache.openejb.assembler.classic.SingletonSessionContainerInfo;
+import org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
 import org.apache.openejb.assembler.classic.TransactionServiceInfo;
 import org.apache.openejb.assembler.classic.AppInfo;
-import org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
 import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.config.ValidationFailedException;
 import org.apache.openejb.config.ValidationFailure;
@@ -63,11 +63,11 @@ public class DependsOnTest extends TestC
 
         // containers
         assembler.createContainer(config.configureService(SingletonSessionContainerInfo.class));
-
+        
         StatelessSessionContainerInfo statelessContainer = config.configureService(StatelessSessionContainerInfo.class);
         statelessContainer.properties.setProperty("MinSize", "1");
         assembler.createContainer(statelessContainer);
-        
+
         actual.clear();
 
         EjbJar ejbJar = new EjbJar();
@@ -92,6 +92,44 @@ public class DependsOnTest extends TestC
         assertEquals(expected(one, two, three, four), actual);
     }
 
+    public void testNoStartUp() throws Exception {
+
+        System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, InitContextFactory.class.getName());
+
+        Assembler assembler = new Assembler();
+        ConfigurationFactory config = new ConfigurationFactory();
+
+        assembler.createProxyFactory(config.configureService(ProxyFactoryInfo.class));
+        assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
+        assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
+
+        // containers
+        assembler.createContainer(config.configureService(SingletonSessionContainerInfo.class));
+        
+        actual.clear();
+
+        EjbJar ejbJar = new EjbJar();
+
+        ejbJar.addEnterpriseBean(new SingletonBean(Two.class)).setInitOnStartup(false);
+        ejbJar.addEnterpriseBean(new SingletonBean(One.class));
+        ejbJar.addEnterpriseBean(new SingletonBean(Four.class)).setInitOnStartup(false);
+        ejbJar.addEnterpriseBean(new SingletonBean(Three.class)).setInitOnStartup(false);
+
+        // startup and trigger @PostConstruct
+        assembler.createApplication(config.configureApplication(ejbJar));
+
+        assertEquals(expected(four, three, two, one), actual);
+
+        actual.clear();
+
+        // startup and trigger @PreDestroy
+        for (AppInfo appInfo : assembler.getDeployedApplications()) {
+            assembler.destroyApplication(appInfo.path);
+        }
+
+        assertEquals(expected(one, two, three, four), actual);
+    }
+    
     public void testNoSuchEjb() throws Exception {
 
         System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, InitContextFactory.class.getName());
@@ -212,6 +250,4 @@ public class DependsOnTest extends TestC
             actual.add(four);
         }
     }
-
-
 }

Added: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/SingletonCircularTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/SingletonCircularTest.java?rev=992094&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/SingletonCircularTest.java (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/SingletonCircularTest.java Thu Sep  2 20:02:06 2010
@@ -0,0 +1,104 @@
+/**
+ * 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.openejb.core.singleton;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.ejb.EJB;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+
+import junit.framework.TestCase;
+
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.ProxyFactoryInfo;
+import org.apache.openejb.assembler.classic.SecurityServiceInfo;
+import org.apache.openejb.assembler.classic.SingletonSessionContainerInfo;
+import org.apache.openejb.assembler.classic.TransactionServiceInfo;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.core.ivm.naming.InitContextFactory;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.SingletonBean;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class SingletonCircularTest extends TestCase {
+    
+    private static final String one = "one";
+    private static final String two = "two";
+
+    public void test() throws Exception {
+
+        System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, InitContextFactory.class.getName());
+
+        Assembler assembler = new Assembler();
+        ConfigurationFactory config = new ConfigurationFactory();
+
+        assembler.createProxyFactory(config.configureService(ProxyFactoryInfo.class));
+        assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
+        assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
+
+        // containers
+        assembler.createContainer(config.configureService(SingletonSessionContainerInfo.class));
+        
+        actual.clear();
+
+        EjbJar ejbJar = new EjbJar();
+
+        ejbJar.addEnterpriseBean(new SingletonBean(Two.class));
+        ejbJar.addEnterpriseBean(new SingletonBean(One.class));
+
+        // startup and trigger @PostConstruct
+        assembler.createApplication(config.configureApplication(ejbJar));
+
+        assertTrue(one, actual.contains(one));
+        assertTrue(two, actual.contains(two));
+    }
+
+    private final static List<String> actual = new ArrayList<String>();
+
+    @Singleton
+    @Startup
+    public static class One {
+
+        @EJB Two two;
+        
+        @PostConstruct
+        @PreDestroy
+        public void callback() {
+            actual.add(one);
+        }
+    }
+
+    @Singleton
+    @Startup
+    public static class Two {
+
+        @EJB One one;
+        
+        @PostConstruct
+        @PreDestroy
+        public void callback() {
+            actual.add(two);
+        }
+    }
+   
+}

Propchange: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/SingletonCircularTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/SingletonCircularTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/SingletonCircularTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain