You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by ma...@apache.org on 2007/08/29 08:53:56 UTC
svn commit: r570662 - in
/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core:
mdb/MdbInstanceFactory.java stateful/StatefulInstanceManager.java
stateless/StatelessInstanceManager.java
Author: manugeorge
Date: Tue Aug 28 23:53:56 2007
New Revision: 570662
URL: http://svn.apache.org/viewvc?rev=570662&view=rev
Log:
Fix for GERONIMO-3444 threading issue
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java?rev=570662&r1=570661&r2=570662&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java Tue Aug 28 23:53:56 2007
@@ -188,13 +188,14 @@
Context ctx = deploymentInfo.getJndiEnc();
// construct the bean instance
MdbContext mdbContext = null;
- try {
- mdbContext = (MdbContext) ctx.lookup("java:comp/EJBContext");
- } catch (NamingException e) {
- mdbContext = new MdbContext(transactionManager, securityService);
- ctx.bind("java:comp/EJBContext",mdbContext);
+ synchronized(this) {
+ try {
+ mdbContext = (MdbContext) ctx.lookup("java:comp/EJBContext");
+ } catch (NamingException e) {
+ mdbContext = new MdbContext(transactionManager, securityService);
+ ctx.bind("java:comp/EJBContext",mdbContext);
+ }
}
-
fillInjectionProperties(objectRecipe, beanClass, deploymentInfo, ctx);
// only in this case should the callback be used
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java?rev=570662&r1=570661&r2=570662&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java Tue Aug 28 23:53:56 2007
@@ -151,11 +151,13 @@
CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
Context ctx = deploymentInfo.getJndiEnc();
SessionContext sessionContext;
- try {
- sessionContext = (SessionContext) ctx.lookup("java:comp/EJBContext");
- } catch (NamingException e1) {
- sessionContext = createSessionContext();
- ctx.bind("java:comp/EJBContext", sessionContext);
+ synchronized (this) {
+ try {
+ sessionContext = (SessionContext) ctx.lookup("java:comp/EJBContext");
+ } catch (NamingException e1) {
+ sessionContext = createSessionContext();
+ ctx.bind("java:comp/EJBContext", sessionContext);
+ }
}
if (javax.ejb.SessionBean.class.isAssignableFrom(beanClass) || hasSetSessionContext(beanClass)) {
callContext.setCurrentOperation(Operation.INJECTION);
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java?rev=570662&r1=570661&r2=570662&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java Tue Aug 28 23:53:56 2007
@@ -104,13 +104,18 @@
try {
Context ctx = deploymentInfo.getJndiEnc();
SessionContext sessionContext;
- try {
- sessionContext = (SessionContext) ctx.lookup("java:comp/EJBContext");
- } catch (NamingException e1) {
- sessionContext = createSessionContext();
- // TODO: This should work
- ctx.bind("java:comp/EJBContext", sessionContext);
- }
+ // This needs to be synchronized as this code is multi-threaded.
+ // In between the lookup and the bind a bind may take place in another Thread.
+ // This is a fix for GERONIMO-3444
+ synchronized(this){
+ try {
+ sessionContext = (SessionContext) ctx.lookup("java:comp/EJBContext");
+ } catch (NamingException e1) {
+ sessionContext = createSessionContext();
+ // TODO: This should work
+ ctx.bind("java:comp/EJBContext", sessionContext);
+ }
+ }
if (javax.ejb.SessionBean.class.isAssignableFrom(beanClass) || hasSetSessionContext(beanClass)) {
callContext.setCurrentOperation(Operation.INJECTION);
callContext.setCurrentAllowedStates(StatelessContext.getStates());
@@ -118,11 +123,14 @@
}
WebServiceContext wsContext;
- try {
- wsContext = (WebServiceContext) ctx.lookup("java:comp/WebServiceContext");
- } catch (NamingException e) {
- wsContext = new EjbWebServiceContext(sessionContext);
- ctx.bind("java:comp/WebServiceContext", wsContext);
+ // This is a fix for GERONIMO-3444
+ synchronized(this){
+ try {
+ wsContext = (WebServiceContext) ctx.lookup("java:comp/WebServiceContext");
+ } catch (NamingException e) {
+ wsContext = new EjbWebServiceContext(sessionContext);
+ ctx.bind("java:comp/WebServiceContext", wsContext);
+ }
}
fillInjectionProperties(objectRecipe, beanClass, deploymentInfo, ctx);