[jboss-cvs] JBossAS SVN: r76010 - projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jul 18 21:24:21 EDT 2008


Author: flavia.rainone at jboss.com
Date: 2008-07-18 21:24:21 -0400 (Fri, 18 Jul 2008)
New Revision: 76010

Modified:
   projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java
   projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/JoinPointManager.java
Log:
[JBAOP-509] Added concurrency lock to remove binding and added special mechanism to update the joinpoint
            class on genadvisor mode.

Modified: projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java
===================================================================
--- projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java	2008-07-19 01:22:09 UTC (rev 76009)
+++ projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java	2008-07-19 01:24:21 UTC (rev 76010)
@@ -135,8 +135,17 @@
       }
    }
 
+   
+   @Override
+   protected void adviceBindingRemoved(AdviceBinding binding)
+   {
+      this.version++;
+      super.adviceBindingRemoved(binding);
+   }
+   
    protected void initialise(Class<?> clazz, AspectManager manager)
    {
+      setClazz(clazz);
       advisorStrategy.initialise(clazz, manager);
    }
 
@@ -221,6 +230,11 @@
    }
    
    
+   public void interceptorChainUpdated(JoinPointInfo info)
+   {
+      getJoinPointGenerator(info).rebindJoinpoint(info);
+   }
+   
    @Override
    protected void rebuildInterceptors()
    {

Modified: projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/JoinPointManager.java
===================================================================
--- projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/JoinPointManager.java	2008-07-19 01:22:09 UTC (rev 76009)
+++ projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/JoinPointManager.java	2008-07-19 01:24:21 UTC (rev 76010)
@@ -33,6 +33,8 @@
 import org.jboss.aop.advice.Interceptor;
 import org.jboss.aop.advice.InterceptorFactory;
 import org.jboss.aop.advice.PrecedenceSorter;
+import org.jboss.aop.instrument.InstrumentorEnum;
+import org.jboss.aop.instrument.InstrumentorFactory;
 import org.jboss.aop.joinpoint.ConstructorCalledByConstructorJoinpoint;
 import org.jboss.aop.joinpoint.ConstructorCalledByMethodJoinpoint;
 import org.jboss.aop.joinpoint.ConstructorJoinpoint;
@@ -183,10 +185,13 @@
 {
    Map<AdviceBinding,Collection<CreatedInterceptorInfo>> createdInterceptors;
    private JoinPointGraph joinPointGraph;
+   boolean generatedAdvisorMode;
    
    public IndexedJoinPointManager(AspectManager aspectManager)
    {
       super(aspectManager);
+      generatedAdvisorMode = InstrumentorFactory.getInstrumentor() ==
+         InstrumentorEnum.GENERATED_ADVISOR;
       this.joinPointGraph = JoinPointGraphFactory.create();
       this.createdInterceptors = new HashMap<AdviceBinding,Collection<CreatedInterceptorInfo>>();
    }
@@ -250,6 +255,10 @@
          }
          finally
          {
+            if (generatedAdvisorMode)
+            {
+               ((GeneratedClassAdvisor) joinPointInfo.getAdvisor()).interceptorChainUpdated(joinPointInfo);
+            }
             joinPointInfo.getInterceptorChainReadWriteLock().writeLock().unlock();
          }
       }
@@ -269,16 +278,21 @@
          for (CreatedInterceptorInfo createdInterceptorInfo: createdInterceptorInfos)
          {
             JoinPointInfo info = createdInterceptorInfo.info;
-         
-            ArrayList<Interceptor> interceptors = info.getInterceptorChain();
-            for (Iterator<Interceptor> iterator = interceptors.listIterator(); iterator.hasNext();)
+            info.getInterceptorChainReadWriteLock().writeLock().lock();
+            try
             {
-               if (createdInterceptorInfos.contains(iterator.next()))
+               ArrayList<Interceptor> interceptors = info.getInterceptorChain();
+               for (Interceptor interceptor: createdInterceptorInfo.interceptors)
                {
-                  iterator.remove();
+                  interceptors.remove(interceptor);
                }
+               info.setInterceptors(interceptors.toArray(new Interceptor[interceptors.size()]));
             }
-            info.setInterceptors(interceptors.toArray(new Interceptor[interceptors.size()]));
+            finally
+            {
+               ((GeneratedClassAdvisor) info.getAdvisor()).interceptorChainUpdated(info);
+               info.getInterceptorChainReadWriteLock().writeLock().unlock();
+            }
          }
          createdInterceptorInfos.clear();
          for (Advisor advisor: binding.getAdvisors())




More information about the jboss-cvs-commits mailing list