[jboss-cvs] JBossAS SVN: r61490 - in projects/aop/trunk/aop/src: test/org/jboss/test/aop/proxy and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Mar 20 10:31:01 EDT 2007
Author: kabir.khan at jboss.com
Date: 2007-03-20 10:31:01 -0400 (Tue, 20 Mar 2007)
New Revision: 61490
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerCache.java
projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerProxyCacheKey.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/proxy/ProxyTestCase.java
Log:
Make container cache aware of which advisor is being used
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerCache.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerCache.java 2007-03-20 12:24:29 UTC (rev 61489)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerCache.java 2007-03-20 14:31:01 UTC (rev 61490)
@@ -21,6 +21,7 @@
*/
package org.jboss.aop.proxy.container;
+import java.util.HashMap;
import java.util.WeakHashMap;
import org.jboss.aop.Advised;
@@ -64,7 +65,7 @@
this.metaData = metaData;
this.simpleMetaData = simpleMetaData;
this.metaDataHasInstanceLevelData = metaDataHasInstanceLevelData;
- key = new ContainerProxyCacheKey(proxiedClass, interfaces, mixins, metaData);
+ key = new ContainerProxyCacheKey(manager.getManagerFQN(), proxiedClass, interfaces, mixins, metaData);
}
public static ContainerCache initialise(AspectManager manager, Class proxiedClass, MetaData metaData, boolean metaDataHasInstanceLevelData)
@@ -163,13 +164,18 @@
private ClassProxyContainer getCachedContainer(AspectManager manager)
{
- return (ClassProxyContainer)containerCache.get(key.getClazz());
+ HashMap managerContainers = (HashMap)containerCache.get(key.getClazz());
+ if (managerContainers != null)
+ {
+ return (ClassProxyContainer)managerContainers.get(manager.getManagerFQN());
+ }
+ return null;
}
private ClassProxyContainer createAndCacheContainer()
{
ClassProxyContainer container = createContainer();
- cacheContainer(key, key.getClazz(), container);
+ cacheContainer(key, container);
return container;
}
@@ -185,9 +191,15 @@
return container;
}
- private void cacheContainer(ContainerProxyCacheKey key, Class proxiedClass, ClassProxyContainer container)
+ private void cacheContainer(ContainerProxyCacheKey key, ClassProxyContainer container)
{
- containerCache.put(proxiedClass, container);
+ HashMap managerContainers = (HashMap)containerCache.get(key.getClazz());
+ if (managerContainers == null)
+ {
+ managerContainers = new HashMap();
+ containerCache.put(key.getClazz(), managerContainers);
+ }
+ managerContainers.put(key.getManagerFQN(), container);
}
private InterfaceIntroduction getInterfaceIntroduction()
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerProxyCacheKey.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerProxyCacheKey.java 2007-03-20 12:24:29 UTC (rev 61489)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerProxyCacheKey.java 2007-03-20 14:31:01 UTC (rev 61490)
@@ -28,8 +28,6 @@
import org.jboss.metadata.spi.MetaData;
-//import org.jboss.repository.spi.MetaDataContext;
-
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
@@ -41,6 +39,7 @@
private static final WeakReference[] EMTPY_WR_ARRAY = new WeakReference[0];
private static final AOPProxyFactoryMixin[] EMPTY_MIXIN_ARRAY = new AOPProxyFactoryMixin[0];
+ private String managerFqn;
private WeakReference clazzRef;
private WeakReference[] addedInterfaces = EMTPY_WR_ARRAY;
@@ -49,21 +48,27 @@
private AOPProxyFactoryMixin[] addedMixins = EMPTY_MIXIN_ARRAY;
private int hashcode = 0;
+ public ContainerProxyCacheKey(String managerFqn, Class clazz)
+ {
+ this.clazzRef = new WeakReference(clazz);
+ this.managerFqn = managerFqn;
+ }
+
public ContainerProxyCacheKey(Class clazz)
{
- this.clazzRef = new WeakReference(clazz);
+ this("/", clazz);
}
- public ContainerProxyCacheKey(Class clazz, Class[] addedInterfaces, MetaData metaData)
+ public ContainerProxyCacheKey(String managerFqn, Class clazz, Class[] addedInterfaces, MetaData metaData)
{
- this(clazz);
+ this(managerFqn, clazz);
this.addedInterfaces = ContainerCacheUtil.getSortedWeakReferenceForInterfaces(addedInterfaces);
this.metaData = metaData;
}
- public ContainerProxyCacheKey(Class clazz, Class[] addedInterfaces, AOPProxyFactoryMixin[] addedMixins, MetaData metaData)
+ public ContainerProxyCacheKey(String managerFqn, Class clazz, Class[] addedInterfaces, AOPProxyFactoryMixin[] addedMixins, MetaData metaData)
{
- this(clazz, addedInterfaces, metaData);
+ this(managerFqn, clazz, addedInterfaces, metaData);
if (addedMixins != null)
{
@@ -75,20 +80,21 @@
public Class getClazz()
{
Class clazz = (Class)clazzRef.get();
- if (clazz != null)
- {
- return clazz;
- }
- return null;
+ return clazz;
}
+ public String getManagerFQN()
+ {
+ return managerFqn;
+ }
+
public boolean equals(Object obj)
{
if (this == obj)
{
return true;
}
-
+
if (obj.getClass() != ContainerProxyCacheKey.class)
{
return false;
@@ -96,6 +102,10 @@
ContainerProxyCacheKey other = (ContainerProxyCacheKey)obj;
+ if (!managerFqn.equals(other.managerFqn))
+ {
+ return false;
+ }
if (!compareMetadataContext(other))
{
return false;
@@ -123,7 +133,7 @@
Class clazz = (Class)clazzRef.get();
StringBuffer sb = new StringBuffer();
-
+ sb.append(managerFqn);
if (clazz != null)
{
sb.append(clazz.getName());
Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/proxy/ProxyTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/proxy/ProxyTestCase.java 2007-03-20 12:24:29 UTC (rev 61489)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/proxy/ProxyTestCase.java 2007-03-20 14:31:01 UTC (rev 61490)
@@ -44,6 +44,7 @@
import org.jboss.aop.proxy.container.AOPProxyFactoryParameters;
import org.jboss.aop.proxy.container.AspectManaged;
import org.jboss.aop.proxy.container.ClassProxyContainer;
+import org.jboss.aop.proxy.container.ContainerCache;
import org.jboss.aop.proxy.container.ContainerProxyCacheKey;
import org.jboss.aop.proxy.container.ContainerProxyFactory;
import org.jboss.aop.proxy.container.Delegate;
@@ -142,17 +143,34 @@
public void testContainerProxyCacheKey() throws Exception
{
- ContainerProxyCacheKey key1 = new ContainerProxyCacheKey(this.getClass(), new Class[] {Serializable.class, InputStream.class, Externalizable.class}, null);
- ContainerProxyCacheKey key2 = new ContainerProxyCacheKey(this.getClass(), new Class[] {Serializable.class, Externalizable.class}, null);
- ContainerProxyCacheKey key3 = new ContainerProxyCacheKey(this.getClass(), new Class[] {Externalizable.class, InputStream.class, Serializable.class}, null);
+ ContainerProxyCacheKey key1 = new ContainerProxyCacheKey("/", this.getClass(), new Class[] {Serializable.class, InputStream.class, Externalizable.class}, null);
+ ContainerProxyCacheKey key2 = new ContainerProxyCacheKey("/", this.getClass(), new Class[] {Serializable.class, Externalizable.class}, null);
+ ContainerProxyCacheKey key3 = new ContainerProxyCacheKey("/", this.getClass(), new Class[] {Externalizable.class, InputStream.class, Serializable.class}, null);
+ ContainerProxyCacheKey key4 = new ContainerProxyCacheKey("/some/fqn", this.getClass(), new Class[] {Serializable.class, Externalizable.class}, null);
+ ContainerProxyCacheKey key5 = new ContainerProxyCacheKey("/some/fqn", this.getClass(), new Class[] {Serializable.class, Externalizable.class}, null);
assertFalse(key1.equals(key2));
assertTrue(key1.equals(key3));
+ assertFalse(key2.equals(key4));
+ assertTrue(key4.equals(key5));
assertFalse(key1.hashCode() == key2.hashCode());
assertTrue(key1.hashCode() == key3.hashCode());
+ assertFalse(key2.hashCode() == key4.hashCode());
+ assertTrue(key4.hashCode() == key5.hashCode());
}
+ public void testContainerCacheClassAdvisor() throws Exception
+ {
+ AspectManager manager = AspectManager.instance();
+ ContainerCache cache1 = ContainerCache.initialise(manager, String.class, null, true);
+ ContainerCache cache2 = ContainerCache.initialise(manager, String.class, null, true);
+ assertSame(cache1.getClassAdvisor(), cache2.getClassAdvisor());
+
+ ContainerCache cache3 = ContainerCache.initialise(manager, Integer.class, null, true);
+ assertNotSame(cache1.getClassAdvisor(), cache3.getClassAdvisor());
+ }
+
public void testContainerProxy() throws Exception
{
InstanceDomain domain = new InstanceDomain(AspectManager.instance(), "blah", false);
More information about the jboss-cvs-commits
mailing list