[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