[jboss-cvs] JBossAS SVN: r72155 - in projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors: container and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Apr 14 05:23:30 EDT 2008
Author: kabir.khan at jboss.com
Date: 2008-04-14 05:23:30 -0400 (Mon, 14 Apr 2008)
New Revision: 72155
Modified:
projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ManagedObjectAdvisorInstanceInterceptor.java
projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/ManagedObjectAdvisor.java
Log:
[EJBTHREE-1275]The instance advisor delegate set per invocation should be maintained per thread, not globally
Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ManagedObjectAdvisorInstanceInterceptor.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ManagedObjectAdvisorInstanceInterceptor.java 2008-04-14 09:14:36 UTC (rev 72154)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ManagedObjectAdvisorInstanceInterceptor.java 2008-04-14 09:23:30 UTC (rev 72155)
@@ -51,10 +51,16 @@
ManagedObjectAdvisor advisor = (ManagedObjectAdvisor)invocation.getAdvisor();
InstanceAdvisorDelegate delegate = getInstanceAdvisorDelegate(invocation.getTargetObject(), advisor, advisor);
- advisor.setInstanceAdvisorDelegate(delegate);
- System.out.println("---> Using ia delegate " + delegate);
-
- return invocation.invokeNext();
+ InstanceAdvisorDelegate oldDelegate = advisor.getThreadedInstanceAdvisorDelegate();
+ try
+ {
+ advisor.setThreadedInstanceAdvisorDelegate(delegate);
+ return invocation.invokeNext();
+ }
+ finally
+ {
+ advisor.setThreadedInstanceAdvisorDelegate(oldDelegate);
+ }
}
private InstanceAdvisorDelegate getInstanceAdvisorDelegate(Object target, Advisor advisor, InstanceAdvisor instanceAdvisor)
Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/ManagedObjectAdvisor.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/ManagedObjectAdvisor.java 2008-04-14 09:14:36 UTC (rev 72154)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/ManagedObjectAdvisor.java 2008-04-14 09:23:30 UTC (rev 72155)
@@ -61,6 +61,9 @@
private C container;
private InstanceAdvisorDelegate instanceAdvisorDelegate;
+ /** The instance advisor delegate set per invocation should be maintained per thread, not globally */
+ private ThreadLocal<InstanceAdvisorDelegate> threadedInstanceAdvisorDelegate;
+
protected ManagedObjectAdvisor(C container, String name, AspectManager manager)
{
this(container, name, manager, null);
@@ -181,6 +184,15 @@
*/
private final InstanceAdvisorDelegate getInstanceAdvisorDelegate()
{
+ if (threadedInstanceAdvisorDelegate != null)
+ {
+ InstanceAdvisorDelegate delegate = threadedInstanceAdvisorDelegate.get();
+ if (delegate != null)
+ {
+ return delegate;
+ }
+ }
+
if(instanceAdvisorDelegate != null)
return instanceAdvisorDelegate;
@@ -195,11 +207,24 @@
return instanceAdvisorDelegate;
}
- public final void setInstanceAdvisorDelegate(InstanceAdvisorDelegate delegate)
+ public final void setThreadedInstanceAdvisorDelegate(InstanceAdvisorDelegate delegate)
{
- instanceAdvisorDelegate = delegate;
+ if (threadedInstanceAdvisorDelegate == null)
+ {
+ threadedInstanceAdvisorDelegate = new ThreadLocal<InstanceAdvisorDelegate>();
+ }
+ threadedInstanceAdvisorDelegate.set(delegate);
}
+ public final InstanceAdvisorDelegate getThreadedInstanceAdvisorDelegate()
+ {
+ if (threadedInstanceAdvisorDelegate == null)
+ {
+ return null;
+ }
+ return threadedInstanceAdvisorDelegate.get();
+ }
+
public void appendInterceptor(Interceptor interceptor)
{
throw new RuntimeException("NYI");
More information about the jboss-cvs-commits
mailing list