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);
+ }
}