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


Reply via email to