Author: rhs
Date: Thu Aug 30 12:21:49 2007
New Revision: 571277

URL: http://svn.apache.org/viewvc?rev=571277&view=rev
Log:
fixed a race condition causing intermittant test failures in 
AMQBrokerManagerMBeanTest

Modified:
    
incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java

Modified: 
incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java?rev=571277&r1=571276&r2=571277&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
 Thu Aug 30 12:21:49 2007
@@ -61,7 +61,7 @@
             _logger.info("Shutting down application registries...");
             try
             {
-                synchronized (ApplicationRegistry.class)
+                synchronized (_instanceMap)
                 {
                     Iterator<IApplicationRegistry> keyIterator = 
_instanceMap.values().iterator();
 
@@ -87,40 +87,46 @@
 
     public static void initialise(IApplicationRegistry instance, int 
instanceID) throws Exception
     {
-        if (instance != null)
+        synchronized (_instanceMap)
         {
-            _logger.info("Initialising Application Registry:" + instanceID);
-            _instanceMap.put(instanceID, instance);
-
-            try
+            if (instance != null)
             {
-                instance.initialise();
+                _logger.info("Initialising Application Registry:" + 
instanceID);
+                _instanceMap.put(instanceID, instance);
+
+                try
+                {
+                    instance.initialise();
+                }
+                catch (Exception e)
+                {
+                    _instanceMap.remove(instanceID);
+                    throw e;
+                }
             }
-            catch (Exception e)
+            else
             {
-                _instanceMap.remove(instanceID);
-                throw e;
+                remove(instanceID);
             }
         }
-        else
-        {
-            remove(instanceID);
-        }
     }
 
     public static void remove(int instanceID)
     {
-        try
-        {
-            _instanceMap.get(instanceID).close();
-        }
-        catch (Exception e)
+        synchronized (_instanceMap)
         {
+            try
+            {
+                _instanceMap.get(instanceID).close();
+            }
+            catch (Exception e)
+            {
 
-        }
-        finally
-        {
-            _instanceMap.remove(instanceID);
+            }
+            finally
+            {
+                _instanceMap.remove(instanceID);
+            }
         }
     }
 
@@ -137,28 +143,31 @@
 
     public static IApplicationRegistry getInstance(int instanceID)
     {
-        IApplicationRegistry instance = _instanceMap.get(instanceID);
-
-        if (instance == null)
+        synchronized (_instanceMap)
         {
-            try
+            IApplicationRegistry instance = _instanceMap.get(instanceID);
+
+            if (instance == null)
             {
-                _logger.info("Creating DEFAULT_APPLICATION_REGISTRY: " + 
_APPLICATION_REGISTRY + " : Instance:" + instanceID);
-                IApplicationRegistry registry = (IApplicationRegistry) 
Class.forName(_APPLICATION_REGISTRY).getConstructor((Class[]) 
null).newInstance((Object[]) null);
-                ApplicationRegistry.initialise(registry, instanceID);
-                _logger.info("Initialised Application Registry:" + instanceID);
-                return registry;
+                try
+                {
+                    _logger.info("Creating DEFAULT_APPLICATION_REGISTRY: " + 
_APPLICATION_REGISTRY + " : Instance:" + instanceID);
+                    IApplicationRegistry registry = (IApplicationRegistry) 
Class.forName(_APPLICATION_REGISTRY).getConstructor((Class[]) 
null).newInstance((Object[]) null);
+                    ApplicationRegistry.initialise(registry, instanceID);
+                    _logger.info("Initialised Application Registry:" + 
instanceID);
+                    return registry;
+                }
+                catch (Exception e)
+                {
+                    _logger.error("Error configuring application: " + e, e);
+                    //throw new AMQBrokerCreationException(instanceID, "Unable 
to create Application Registry instance " + instanceID);
+                    throw new RuntimeException("Unable to create Application 
Registry", e);
+                }
             }
-            catch (Exception e)
+            else
             {
-                _logger.error("Error configuring application: " + e, e);
-                //throw new AMQBrokerCreationException(instanceID, "Unable to 
create Application Registry instance " + instanceID);
-                throw new RuntimeException("Unable to create Application 
Registry", e);
+                return instance;
             }
-        }
-        else
-        {
-            return instance;
         }
     }
 


Reply via email to