[jboss-cvs] JBossAS SVN: r74409 - projects/aop/trunk/aop/src/main/org/jboss/aop.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jun 11 14:19:42 EDT 2008


Author: stalep
Date: 2008-06-11 14:19:41 -0400 (Wed, 11 Jun 2008)
New Revision: 74409

Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/ClassAdvisor.java
Log:
[JBAOP-578]
Added syncing on AM.getBindings()


Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/ClassAdvisor.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/ClassAdvisor.java	2008-06-11 18:01:06 UTC (rev 74408)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/ClassAdvisor.java	2008-06-11 18:19:41 UTC (rev 74409)
@@ -743,40 +743,52 @@
          //TODO: this method is more optimal, but needs further testing...
 //         updateMethodPointcutAfterRemove(removedBinding);
          resetChain(methodInfos);
-         for(AdviceBinding ab : manager.getBindings().values())
+         synchronized (manager.getBindings())
          {
-            if(BindingClassifier.isMethodExecution(ab))
-               resolveMethodPointcut(ab);
+            for(AdviceBinding ab : manager.getBindings().values())
+            {
+               if(BindingClassifier.isMethodExecution(ab))
+                  resolveMethodPointcut(ab);
+            }
          }
       }
       if (BindingClassifier.isGet(removedBinding) || BindingClassifier.isSet(removedBinding))
       {
          resetChain(fieldReadInfos);
          resetChain(fieldWriteInfos);
-         for(AdviceBinding ab : manager.getBindings().values())
+         synchronized (manager.getBindings())
          {
-            if(BindingClassifier.isGet(ab))
-               resolveFieldPointcut(fieldReadInfos, ab, false);
-            if(BindingClassifier.isSet(ab))
-               resolveFieldPointcut(fieldWriteInfos, ab, true);
+            for(AdviceBinding ab : manager.getBindings().values())
+            {
+               if(BindingClassifier.isGet(ab))
+                  resolveFieldPointcut(fieldReadInfos, ab, false);
+               if(BindingClassifier.isSet(ab))
+                  resolveFieldPointcut(fieldWriteInfos, ab, true);
+            }
          }
       }
       if (BindingClassifier.isConstructorExecution(removedBinding))
       {
          resetChain(constructorInfos);
-         for(AdviceBinding ab : manager.getBindings().values())
+         synchronized (manager.getBindings())
          {
-            if(BindingClassifier.isConstructorExecution(ab))
-               resolveConstructorPointcut(ab);
+            for(AdviceBinding ab : manager.getBindings().values())
+            {
+               if(BindingClassifier.isConstructorExecution(ab))
+                  resolveConstructorPointcut(ab);
+            }
          }
       }
       if (BindingClassifier.isConstruction(removedBinding))
       {
          resetChain(constructionInfos);
-         for(AdviceBinding ab : manager.getBindings().values())
+         synchronized (manager.getBindings())
          {
-            if(BindingClassifier.isConstruction(ab))
-               resolveConstructionPointcut(ab);
+            for(AdviceBinding ab : manager.getBindings().values())
+            {
+               if(BindingClassifier.isConstruction(ab))
+                  resolveConstructionPointcut(ab);
+            }
          }
       }
 
@@ -784,6 +796,13 @@
 
       unlockWriteChains();
       
+      // Notify observer about this change
+      if (this.interceptorChainObserver != null)
+      {
+         this.interceptorChainObserver.interceptorChainsUpdated(fieldReadInterceptors, fieldWriteInterceptors,
+               constructorInterceptors, methodInfos);
+      }
+      
       //TODO: optimize this
       try
       {
@@ -1088,6 +1107,7 @@
       info.setInterceptors(interceptors);
    }
 
+   @Override
    protected void rebuildInterceptors()
    {
       if (initialized)




More information about the jboss-cvs-commits mailing list