[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