[jboss-cvs] JBossAS SVN: r61299 - in branches/Branch_AOP_1_5/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 13:58:22 EDT 2007
Author: kabir.khan at jboss.com
Date: 2007-03-13 13:58:22 -0400 (Tue, 13 Mar 2007)
New Revision: 61299
Modified:
branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/Advisor.java
branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/advice/AspectDefinition.java
branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/classpool/AOPClassPoolRepository.java
Log:
[JBAOP-374] Clean up advisor references from AspectDefinition
Modified: branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/Advisor.java
===================================================================
--- branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/Advisor.java 2007-03-13 17:51:50 UTC (rev 61298)
+++ branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/Advisor.java 2007-03-13 17:58:22 UTC (rev 61299)
@@ -31,6 +31,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -47,6 +48,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;
@@ -931,4 +933,32 @@
//Implemented by base-classes
throw new NotImplementedException("Not a legal operation for Advisor");
}
+
+ 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: branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/advice/AspectDefinition.java
===================================================================
--- branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/advice/AspectDefinition.java 2007-03-13 17:51:50 UTC (rev 61298)
+++ branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/advice/AspectDefinition.java 2007-03-13 17:58:22 UTC (rev 61299)
@@ -41,6 +41,9 @@
protected Scope scope = Scope.PER_VM;
protected AspectFactory factory;
protected boolean deployed = true;
+ /**
+ * @deprecated Should not access from outside this class
+ */
public Map advisors = new ConcurrentReaderHashMap();
/**
@@ -139,4 +142,9 @@
{
advisors.put(advisor, Boolean.TRUE);
}
+
+ public synchronized void unregisterAdvisor(Advisor advisor)
+ {
+ advisors.remove(advisor);
+ }
}
Modified: branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/classpool/AOPClassPoolRepository.java
===================================================================
--- branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/classpool/AOPClassPoolRepository.java 2007-03-13 17:51:50 UTC (rev 61298)
+++ branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/classpool/AOPClassPoolRepository.java 2007-03-13 17:58:22 UTC (rev 61299)
@@ -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;
@@ -168,7 +170,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