[jboss-cvs] JBossAS SVN: r62136 - in projects/aop/trunk/aop/src: test/org/jboss/test/aop/dynamicgenadvisor and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Apr 5 11:03:05 EDT 2007
Author: kabir.khan at jboss.com
Date: 2007-04-05 11:03:05 -0400 (Thu, 05 Apr 2007)
New Revision: 62136
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java
projects/aop/trunk/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/dynamicgenadvisor/DynamicTester.java
Log:
Fix the problems with dynamic aop for generated instance advisors
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java 2007-04-05 15:01:42 UTC (rev 62135)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java 2007-04-05 15:03:05 UTC (rev 62136)
@@ -1450,13 +1450,14 @@
{
removeClassMetaData(meta.getName());
- updateAdvisorsForAddedClassMetaData(meta);
-
+ //Add the metadata before we update the advisors. Important for the generated instance advisors
initClassMetaDataMap();
synchronized (classMetaData)
{
classMetaData.put(meta.getName(), meta);
}
+
+ updateAdvisorsForAddedClassMetaData(meta);
}
protected void updateAdvisorsForAddedClassMetaData(ClassMetaDataBinding meta)
@@ -1481,10 +1482,13 @@
boolean newSubscribers = true;
while (newSubscribers)
{
- for (Iterator it = subscribedSubDomains.keySet().iterator() ; it.hasNext() ; )
+ if (subscribedSubDomains.size() > 0)
{
- Domain domain = (Domain)it.next();
- domain.updateAdvisorsForAddedClassMetaData(meta);
+ for (Iterator it = subscribedSubDomains.keySet().iterator() ; it.hasNext() ; )
+ {
+ Domain domain = (Domain)it.next();
+ domain.updateAdvisorsForAddedClassMetaData(meta);
+ }
}
newSubscribers = copySubDomainsFromQueue(false);
}
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java 2007-04-05 15:01:42 UTC (rev 62135)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java 2007-04-05 15:03:05 UTC (rev 62136)
@@ -134,7 +134,7 @@
protected void rebuildInterceptors()
{
version++;
- super.rebuildInterceptors();
+ advisorStrategy.rebuildInterceptors();
}
/**
@@ -865,6 +865,7 @@
void createConstructorTables() throws Exception;
Set getPerInstanceAspectDefinitions();
Map getPerInstanceJoinpointAspectDefinitions();
+ void rebuildInterceptors();
}
private class ClassAdvisorStrategy implements AdvisorStrategy
@@ -1045,11 +1046,17 @@
return GeneratedClassAdvisor.super.getPerInstanceJoinpointAspectDefinitions();
}
+ public void rebuildInterceptors()
+ {
+ version++;
+ GeneratedClassAdvisor.super.rebuildInterceptors();
+ }
}
private class InstanceAdvisorStrategy implements AdvisorStrategy
{
GeneratedClassAdvisor parent;
+ boolean needsRebuild = true;
public InstanceAdvisorStrategy(GeneratedClassAdvisor parent)
{
@@ -1059,9 +1066,10 @@
public void checkVersion()
{
- if (parent.version != GeneratedClassAdvisor.this.version)
+ if (needsRebuild || parent.version != GeneratedClassAdvisor.this.version)
{
doRebuildForInstance();
+ needsRebuild = false;
}
}
@@ -1175,5 +1183,19 @@
{
return parent.getPerInstanceJoinpointAspectDefinitions();
}
+
+
+ public void rebuildInterceptors()
+ {
+ if (getClassAdvisorIfInstanceAdvisorWithNoOwnDataWithEffectOnAdvices() != null && GeneratedClassAdvisor.this.version != parent.version)
+ {
+ adviceBindings.clear();
+ needsRebuild = true;
+ }
+ else
+ {
+ GeneratedClassAdvisor.super.rebuildInterceptors();
+ }
+ }
}
}
Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/dynamicgenadvisor/DynamicTester.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/dynamicgenadvisor/DynamicTester.java 2007-04-05 15:01:42 UTC (rev 62135)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/dynamicgenadvisor/DynamicTester.java 2007-04-05 15:03:05 UTC (rev 62136)
@@ -196,6 +196,24 @@
assertTrue(Interceptions.isEmpty());
}
+ public void testMethodExecutionWithInstanceAdvisorAccess() throws Exception
+ {
+ System.out.println("TEST METHOD WITH INSTANCEADVISOR ACCESS");
+ AdviceBinding binding = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null);
+ binding.addInterceptor(MetadataInterceptor.class);
+ AspectManager.instance().addBinding(binding);
+
+ POJO pojo = new POJO();
+ MetadataInterceptor.clear();
+ pojo.someMethod(123);
+ assertTrue(MetadataInterceptor.intercepted);
+
+ MetadataInterceptor.clear();
+ AspectManager.instance().removeBinding(binding.getName());
+ pojo.someMethod(123);
+ assertFalse(MetadataInterceptor.intercepted);
+ }
+
public void testFields() throws Exception
{
System.out.println("TEST FIELDS");
@@ -774,6 +792,7 @@
pojo.someMethod(123);
pojo.i = 100;
pojo.notPrepared();
+ assertTrue(MetadataInterceptor.intercepted);
assertEquals(2, MetadataInterceptor.lastDefaultMetadata.size());
assertEquals(2, MetadataInterceptor.lastClassMetadata.size());
assertEquals(1, MetadataInterceptor.lastMethodMetadata.size());
@@ -885,6 +904,10 @@
assertEquals("i", MetadataInterceptor.lastFieldMetadata.get(0));
+ MetadataInterceptor.clear();
+ pojox.someMethod(123);
+ assertTrue(MetadataInterceptor.intercepted);
+
AspectManager.instance().removeClassMetaData("DA");
MetadataInterceptor.clear();
pojo.someMethod(123);
More information about the jboss-cvs-commits
mailing list