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