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

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed May 21 15:21:08 EDT 2008


Author: kabir.khan at jboss.com
Date: 2008-05-21 15:21:08 -0400 (Wed, 21 May 2008)
New Revision: 73566

Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java
Log:
[JBAOP-575] Make sure that advisors only get handled once if several levels contain a reference to it, otherwise we get the binding added >1 times

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java	2008-05-21 19:19:25 UTC (rev 73565)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java	2008-05-21 19:21:08 UTC (rev 73566)
@@ -1438,7 +1438,8 @@
       }
       synchronized (advisors)
       {
-         updateAdvisorsForAddedBinding(binding);
+         Set<Advisor> handledAdvisors = new HashSet<Advisor>();
+         updateAdvisorsForAddedBinding(binding, handledAdvisors);
 
          if (affectedAdvisors != null && affectedAdvisors.size() > 0)
          {
@@ -1453,7 +1454,7 @@
    }
 
 
-   public void updateAdvisorsForAddedBinding(AdviceBinding binding)
+   protected void updateAdvisorsForAddedBinding(AdviceBinding binding, Set<Advisor> handledAdvisors)
    {
       synchronized (advisors)
       {
@@ -1465,7 +1466,9 @@
             {
                Advisor advisor = getAdvisorFromAdvisorsKeySetIterator(it);
                if (advisor == null) continue;
-
+               if (handledAdvisors.contains(advisor)) continue;
+               handledAdvisors.add(advisor);
+               
                if (binding.getPointcut().softMatch(advisor))
                {
                   if (AspectManager.verbose && logger.isDebugEnabled())
@@ -1493,7 +1496,7 @@
                //When interceptors are installed as beans in the microcontainer, creating the interceptor instances
                for (Domain domain : domains)
                {
-                  domain.updateAdvisorsForAddedBinding(binding);
+                  domain.updateAdvisorsForAddedBinding(binding, handledAdvisors);
                }
             }
             newSubscribers = copySubDomainsFromQueue(false);




More information about the jboss-cvs-commits mailing list