[jboss-cvs] JBossAS SVN: r61315 - in projects/aop/trunk/aop/src/main/org/jboss/aop: advice and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Mar 13 17:40:20 EDT 2007
Author: kabir.khan at jboss.com
Date: 2007-03-13 17:40:20 -0400 (Tue, 13 Mar 2007)
New Revision: 61315
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/Advisor.java
projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AspectDefinition.java
projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPoolRepository.java
Log:
[JBAOP-374] Clean up advisor references from AspectDefinition
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/Advisor.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/Advisor.java 2007-03-13 20:26:34 UTC (rev 61314)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/Advisor.java 2007-03-13 21:40:20 UTC (rev 61315)
@@ -50,6 +50,7 @@
import org.jboss.aop.advice.Interceptor;
import org.jboss.aop.advice.InterceptorFactory;
import org.jboss.aop.advice.PrecedenceSorter;
+import org.jboss.aop.advice.Scope;
import org.jboss.aop.annotation.AnnotationElement;
import org.jboss.aop.annotation.AnnotationRepository;
import org.jboss.aop.instrument.ConstructionTransformer;
@@ -1147,4 +1148,32 @@
}
};
}
+
+ public void cleanup()
+ {
+ //AspectDefinitions have strong links back to us
+ for(Iterator it = perInstanceAspectDefinitions.iterator() ; it.hasNext() ; )
+ {
+ AspectDefinition def = (AspectDefinition)it.next();
+ removePerInstanceAspect(def);
+ def.unregisterAdvisor(this);
+ }
+
+ for(Iterator it = perInstanceJoinpointAspectDefinitions.keySet().iterator() ; it.hasNext() ; )
+ {
+ AspectDefinition def = (AspectDefinition)it.next();
+ removePerInstanceJoinpointAspect(def);
+ def.unregisterAdvisor(this);
+ }
+
+ AspectDefinition[] defs = (AspectDefinition[])adviceInterceptors.keySet().toArray(new AspectDefinition[adviceInterceptors.size()]);
+ for(int i = 0 ; i < defs.length ; i++)
+ {
+ if (defs[i].getScope() == Scope.PER_CLASS)
+ {
+ removePerClassAspect(defs[i]);
+ defs[i].unregisterAdvisor(this);
+ }
+ }
+ }
}
\ No newline at end of file
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AspectDefinition.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AspectDefinition.java 2007-03-13 20:26:34 UTC (rev 61314)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AspectDefinition.java 2007-03-13 21:40:20 UTC (rev 61315)
@@ -41,6 +41,8 @@
protected Scope scope = Scope.PER_VM;
protected AspectFactory factory;
protected boolean deployed = true;
+
+ /** @deprecated Should not access directly */
public Map advisors = new ConcurrentReaderHashMap();
/**
@@ -138,4 +140,9 @@
{
advisors.put(advisor, Boolean.TRUE);
}
+
+ public synchronized void unregisterAdvisor(Advisor advisor)
+ {
+ advisors.remove(advisor);
+ }
}
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPoolRepository.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPoolRepository.java 2007-03-13 20:26:34 UTC (rev 61314)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPoolRepository.java 2007-03-13 21:40:20 UTC (rev 61315)
@@ -21,6 +21,7 @@
*/
package org.jboss.aop.classpool;
+import java.lang.ref.WeakReference;
import java.lang.reflect.Field;
import java.security.AccessController;
import java.security.PrivilegedActionException;
@@ -30,6 +31,7 @@
import java.util.Iterator;
import java.util.Map;
+import org.jboss.aop.Advisor;
import org.jboss.aop.AspectManager;
import org.jboss.aop.instrument.Instrumentor;
@@ -193,7 +195,12 @@
Object clazz = it.next();
synchronized (manager.getAdvisors())
{
- manager.getAdvisors().remove(clazz);
+ WeakReference ref = (WeakReference)manager.getAdvisors().remove(clazz);
+ Advisor advisor = (Advisor)ref.get();
+ if (advisor != null)
+ {
+ advisor.cleanup();
+ }
Class advisedClass = (Class)clazz;
try
{
More information about the jboss-cvs-commits
mailing list