Port the fix for MODELER-3 from [modeler] (minus some of the fluff :).
authorbillbarker <billbarker@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 25 May 2006 04:07:25 +0000 (04:07 +0000)
committerbillbarker <billbarker@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 25 May 2006 04:07:25 +0000 (04:07 +0000)
It's mostly non-critical path stuff, so it shouldn't be that much of a performance hit.

Also throw in some Generics cleanups.

git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@409298 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/tomcat/util/modeler/Registry.java

index 6fdf23c..14bfa7c 100644 (file)
@@ -106,14 +106,14 @@ public class Registry implements RegistryMBean, MBeanRegistration  {
      * The set of ManagedBean instances for the beans this registry\r
      * knows about, keyed by name.\r
      */\r
-    private HashMap descriptors = new HashMap();\r
+    private HashMap<String, ManagedBean> descriptors = new HashMap<String, ManagedBean>();\r
 \r
     /** List of managed byeans, keyed by class name\r
      */\r
-    private HashMap descriptorsByClass = new HashMap();\r
+    private HashMap<String, ManagedBean> descriptorsByClass = new HashMap<String, ManagedBean>();\r
 \r
     // map to avoid duplicated searching or loading descriptors \r
-    private HashMap searchedPaths=new HashMap();\r
+    private Hashtable<String, URL> searchedPaths=new Hashtable<String, URL>();\r
     \r
     private Object key;\r
     private Object guard;\r
@@ -218,9 +218,9 @@ public class Registry implements RegistryMBean, MBeanRegistration  {
      * @since 1.1\r
      */ \r
     public void stop() {\r
-        descriptorsByClass = new HashMap();\r
-        descriptors = new HashMap();\r
-        searchedPaths=new HashMap();\r
+        descriptorsByClass = new HashMap<String, ManagedBean>();\r
+        descriptors = new HashMap<String, ManagedBean>();\r
+        searchedPaths=new Hashtable<String, URL>();\r
     }\r
     \r
     /** \r
@@ -411,9 +411,11 @@ public class Registry implements RegistryMBean, MBeanRegistration  {
      */\r
     public void addManagedBean(ManagedBean bean) {\r
         // XXX Use group + name\r
-        descriptors.put(bean.getName(), bean);\r
-        if( bean.getType() != null ) {\r
-            descriptorsByClass.put( bean.getType(), bean );\r
+        synchronized(descriptors) {\r
+            descriptors.put(bean.getName(), bean);\r
+            if( bean.getType() != null ) {\r
+                descriptorsByClass.put( bean.getType(), bean );\r
+            }\r
         }\r
     }\r
 \r
@@ -428,10 +430,12 @@ public class Registry implements RegistryMBean, MBeanRegistration  {
      */\r
     public ManagedBean findManagedBean(String name) {\r
         // XXX Group ?? Use Group + Type\r
-        ManagedBean mb=((ManagedBean) descriptors.get(name));\r
-        if( mb==null )\r
-            mb=(ManagedBean)descriptorsByClass.get(name);\r
-        return mb;\r
+        synchronized(descriptors) {\r
+            ManagedBean mb= descriptors.get(name);\r
+            if( mb==null )\r
+                mb=descriptorsByClass.get(name);\r
+            return mb;\r
+        }\r
     }\r
     \r
     /**\r
@@ -441,7 +445,9 @@ public class Registry implements RegistryMBean, MBeanRegistration  {
      * @since 1.0\r
      */\r
     public String[] findManagedBeans() {\r
-        return ((String[]) descriptors.keySet().toArray(new String[0]));\r
+        synchronized(descriptors) {\r
+            return ((String[]) descriptors.keySet().toArray(new String[0]));\r
+        }\r
     }\r
 \r
 \r
@@ -456,13 +462,15 @@ public class Registry implements RegistryMBean, MBeanRegistration  {
     public String[] findManagedBeans(String group) {\r
 \r
         ArrayList results = new ArrayList();\r
-        Iterator items = descriptors.values().iterator();\r
-        while (items.hasNext()) {\r
-            ManagedBean item = (ManagedBean) items.next();\r
-            if ((group == null) && (item.getGroup() == null)) {\r
-                results.add(item.getName());\r
-            } else if (group.equals(item.getGroup())) {\r
-                results.add(item.getName());\r
+        synchronized(descriptors) {\r
+            Iterator<ManagedBean> items = descriptors.values().iterator();\r
+            while (items.hasNext()) {\r
+                ManagedBean item =  items.next();\r
+                if ((group == null) && (item.getGroup() == null)) {\r
+                    results.add(item.getName());\r
+                } else if (group.equals(item.getGroup())) {\r
+                    results.add(item.getName());\r
+                }\r
             }\r
         }\r
         String values[] = new String[results.size()];\r
@@ -479,8 +487,10 @@ public class Registry implements RegistryMBean, MBeanRegistration  {
      */\r
     public void removeManagedBean(ManagedBean bean) {\r
        // TODO: change this to use group/name\r
-        descriptors.remove(bean.getName());\r
-        descriptorsByClass.remove( bean.getType());\r
+        synchronized(descriptors) {\r
+            descriptors.remove(bean.getName());\r
+            descriptorsByClass.remove( bean.getType());\r
+        }\r
     }\r
 \r
     // -------------------- Deprecated 1.0 methods  --------------------\r
@@ -840,7 +850,7 @@ public class Registry implements RegistryMBean, MBeanRegistration  {
      *\r
      * @param packageName\r
      */\r
-    public void loadDescriptors( String packageName, ClassLoader classLoader  ) {\r
+    public synchronized void loadDescriptors( String packageName, ClassLoader classLoader  ) {\r
         String res=packageName.replace( '.', '/');\r
 \r
         if( log.isTraceEnabled() ) {\r