[jboss-cvs] JBossAS SVN: r64110 - projects/aop/trunk/aop/src/main/org/jboss/aop/metadata.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jul 18 05:46:33 EDT 2007


Author: kabir.khan at jboss.com
Date: 2007-07-18 05:46:33 -0400 (Wed, 18 Jul 2007)
New Revision: 64110

Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/metadata/MethodMetaData.java
Log:
[JBAOP-378] Make the joinpointgenerator maps "lazy"


Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/metadata/MethodMetaData.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/metadata/MethodMetaData.java	2007-07-18 08:39:13 UTC (rev 64109)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/metadata/MethodMetaData.java	2007-07-18 09:46:33 UTC (rev 64110)
@@ -24,12 +24,14 @@
 import org.jboss.aop.joinpoint.Invocation;
 import org.jboss.aop.joinpoint.MethodInvocation;
 import org.jboss.aop.util.PayloadKey;
+import org.jboss.aop.util.UnmodifiableEmptyCollections;
 
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
 /**
  *
  * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
@@ -38,7 +40,7 @@
  */
 public class MethodMetaData implements MetaDataResolver
 {
-   Map methodMetaData = new ConcurrentHashMap();
+   Map methodMetaData = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
    HashMap inexactMatches;
 
    public boolean hasTag(String group)
@@ -72,18 +74,16 @@
       addMethodMetaData(method.toString(), tag, attr, value, type, exactMatch);
    }
 
-   private void addMethodMetaData(String key, Object tag, Object attr, Object value, PayloadKey type, boolean exactMatch)
+   private synchronized void addMethodMetaData(String key, Object tag, Object attr, Object value, PayloadKey type, boolean exactMatch)
    {
-      synchronized (methodMetaData)
+      SimpleMetaData methodData = (SimpleMetaData)methodMetaData.get(key);
+      if (methodData == null)
       {
-         SimpleMetaData methodData = (SimpleMetaData)methodMetaData.get(key);
-         if (methodData == null)
-         {
-            methodData = new SimpleMetaData();
-            methodMetaData.put(key, methodData);
-         }
-         methodData.addMetaData(tag, attr, value, type);
-      }      
+         methodData = new SimpleMetaData();
+         initMethodMetaDataMap();
+         methodMetaData.put(key, methodData);
+      }
+      methodData.addMetaData(tag, attr, value, type);
       manageInexactMatches(key, tag, attr, exactMatch);
    }
    
@@ -212,5 +212,11 @@
       return meta.hasTag(tag);
    }
 
-
+   private void initMethodMetaDataMap()
+   {
+      if (methodMetaData == UnmodifiableEmptyCollections.EMPTY_LINKED_HASHMAP)
+      {
+         methodMetaData = new LinkedHashMap();
+      }
+   }
 }




More information about the jboss-cvs-commits mailing list