You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2013/06/10 13:57:22 UTC

svn commit: r1491427 - /tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java

Author: rmannibucau
Date: Mon Jun 10 11:57:22 2013
New Revision: 1491427

URL: http://svn.apache.org/r1491427
Log:
TOMEE-969 ThreadContext should be propagated in @Asynchronous context

Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java?rev=1491427&r1=1491426&r2=1491427&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java Mon Jun 10 11:57:22 2013
@@ -22,6 +22,7 @@ import org.apache.openejb.OpenEJBExcepti
 import org.apache.openejb.OpenEJBRuntimeException;
 import org.apache.openejb.async.AsynchronousPool;
 import org.apache.openejb.core.ServerFederation;
+import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.spi.ApplicationServer;
 import org.apache.openejb.spi.SecurityService;
@@ -235,15 +236,18 @@ public abstract class EjbObjectProxyHand
         if (beanContext.isAsynchronous(method)) {
             final SecurityService<?> securityService = SystemInstance.get().getComponent(SecurityService.class);
             final Object state = securityService.currentState();
+            final ThreadContext currentCtx = ThreadContext.getThreadContext();
             return asynchronousPool.invoke(new Callable<Object>() {
                 @Override
                 public Object call() throws Exception {
+                    final ThreadContext oldCtx = ThreadContext.enter(currentCtx); // ensure context is the same as for the caller
                     final Object threadState = securityService.currentState();
                     securityService.setState(state);
                     try {
                         return synchronizedBusinessMethod(interfce, method, args);
                     } finally {
                         securityService.setState(threadState);
+                        ThreadContext.exit(oldCtx);
                     }
                 }
             }, method.getReturnType() == Void.TYPE);