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