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