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 | 9cfc46c80e49f902f086d387c87aab33c337d77f (patch) | |
| tree | ca5c4a68974cc3f43cc8f6868490552e75cd0276 /qpid/java/broker | |
| parent | fe3043fa600e1294631a324a39a9302938bf8016 (diff) | |
| download | qpid-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/broker')
| -rw-r--r-- | qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java | 89 |
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 |
