summaryrefslogtreecommitdiff
path: root/qpid/java
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2007-08-30 19:21:49 +0000
committerRafael H. Schloming <rhs@apache.org>2007-08-30 19:21:49 +0000
commit9cfc46c80e49f902f086d387c87aab33c337d77f (patch)
treeca5c4a68974cc3f43cc8f6868490552e75cd0276 /qpid/java
parentfe3043fa600e1294631a324a39a9302938bf8016 (diff)
downloadqpid-python-9cfc46c80e49f902f086d387c87aab33c337d77f.tar.gz
fixed a race condition causing intermittant test failures in AMQBrokerManagerMBeanTest
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@571277 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java89
1 files changed, 49 insertions, 40 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
index 89f0b7b39d..a70505ff6c 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
@@ -61,7 +61,7 @@ public abstract class ApplicationRegistry implements IApplicationRegistry
_logger.info("Shutting down application registries...");
try
{
- synchronized (ApplicationRegistry.class)
+ synchronized (_instanceMap)
{
Iterator<IApplicationRegistry> keyIterator = _instanceMap.values().iterator();
@@ -87,40 +87,46 @@ public abstract class ApplicationRegistry implements IApplicationRegistry
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,29 +143,32 @@ public abstract class ApplicationRegistry implements IApplicationRegistry
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;
- }
}
public void close() throws Exception