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