[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