diff options
| author | Rafael H. Schloming <rhs@apache.org> | 2007-08-30 19:21:49 +0000 |
|---|---|---|
| committer | Rafael H. Schloming <rhs@apache.org> | 2007-08-30 19:21:49 +0000 |
| commit | 72a955ddc5f5e6c2fba3dd1c0a21d538a3ce2ad9 (patch) | |
| tree | 1286efc412a3cd47762df99d055a3f059beb1dee /java | |
| parent | efa3feb65f59e10a378b9074ac2d01b540a3278c (diff) | |
| download | qpid-python-72a955ddc5f5e6c2fba3dd1c0a21d538a3ce2ad9.tar.gz | |
fixed a race condition causing intermittant test failures in AMQBrokerManagerMBeanTest
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@571277 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
| -rw-r--r-- | java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java | 89 |
1 files changed, 49 insertions, 40 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java b/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java index 89f0b7b39d..a70505ff6c 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java +++ b/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 |
