summaryrefslogtreecommitdiff
path: root/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java')
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java110
1 files changed, 102 insertions, 8 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 455983c6d8..63171d583a 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
@@ -24,9 +24,17 @@ import org.apache.commons.configuration.Configuration;
import org.apache.log4j.Logger;
import org.apache.qpid.server.configuration.Configurator;
import org.apache.qpid.server.virtualhost.VirtualHost;
+import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
+import org.apache.qpid.server.management.ManagedObjectRegistry;
+import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
+import org.apache.qpid.server.security.auth.database.PrincipalDatabaseManager;
+import org.apache.qpid.server.security.access.ACLPlugin;
+import org.apache.qpid.server.plugins.PluginManager;
+import org.apache.mina.common.IoAcceptor;
import java.util.HashMap;
import java.util.Map;
+import java.net.InetSocketAddress;
/**
* An abstract application registry that provides access to configuration information and handles the
@@ -36,7 +44,7 @@ import java.util.Map;
*/
public abstract class ApplicationRegistry implements IApplicationRegistry
{
- private static final Logger _logger = Logger.getLogger(ApplicationRegistry.class);
+ protected static final Logger _logger = Logger.getLogger(ApplicationRegistry.class);
private static Map<Integer, IApplicationRegistry> _instanceMap = new HashMap<Integer, IApplicationRegistry>();
@@ -48,6 +56,20 @@ public abstract class ApplicationRegistry implements IApplicationRegistry
public static final String DEFAULT_APPLICATION_REGISTRY = "org.apache.qpid.server.util.NullApplicationRegistry";
public static String _APPLICATION_REGISTRY = DEFAULT_APPLICATION_REGISTRY;
+ protected final Map<InetSocketAddress, IoAcceptor> _acceptors = new HashMap<InetSocketAddress, IoAcceptor>();
+
+ protected ManagedObjectRegistry _managedObjectRegistry;
+
+ protected AuthenticationManager _authenticationManager;
+
+ protected VirtualHostRegistry _virtualHostRegistry;
+
+ protected ACLPlugin _accessManager;
+
+ protected PrincipalDatabaseManager _databaseManager;
+
+ protected PluginManager _pluginManager;
+
static
{
Runtime.getRuntime().addShutdownHook(new Thread(new ShutdownService()));
@@ -57,7 +79,6 @@ public abstract class ApplicationRegistry implements IApplicationRegistry
{
public void run()
{
- _logger.info("Shutting down application registries...");
removeAll();
}
}
@@ -90,16 +111,29 @@ public abstract class ApplicationRegistry implements IApplicationRegistry
}
}
+ /**
+ * Method to cleanly shutdown specified registry running in this JVM
+ *
+ * @param instanceID the instance to shutdown
+ */
+
public static void remove(int instanceID)
{
try
{
- _instanceMap.get(instanceID).close();
+ IApplicationRegistry instance = _instanceMap.get(instanceID);
+ if (instance != null)
+ {
+ if (_logger.isInfoEnabled())
+ {
+ _logger.info("Shuting down ApplicationRegistry(" + instanceID + "):" + instance);
+ }
+ instance.close();
+ }
}
catch (Exception e)
{
- _logger.error("Error shutting down message store: " + e, e);
-
+ _logger.error("Error shutting down Application Registry(" + instanceID + "): " + e, e);
}
finally
{
@@ -107,6 +141,7 @@ public abstract class ApplicationRegistry implements IApplicationRegistry
}
}
+ /** Method to cleanly shutdown all registries currently running in this JVM */
public static void removeAll()
{
Object[] keys = _instanceMap.keySet().toArray();
@@ -158,15 +193,36 @@ public abstract class ApplicationRegistry implements IApplicationRegistry
public void close() throws Exception
{
+ if (_logger.isInfoEnabled())
+ {
+ _logger.info("Shutting down ApplicationRegistry:"+this);
+ }
+
+ //Stop incomming connections
+ unbind();
+
+ //Shutdown virtualhosts
for (VirtualHost virtualHost : getVirtualHostRegistry().getVirtualHosts())
{
virtualHost.close();
}
// close the rmi registry(if any) started for management
- if (getInstance().getManagedObjectRegistry() != null)
+ if (getManagedObjectRegistry() != null)
+ {
+ getManagedObjectRegistry().close();
+ }
+ }
+
+ private void unbind()
+ {
+ synchronized (_acceptors)
{
- getInstance().getManagedObjectRegistry().close();
+ for (InetSocketAddress bindAddress : _acceptors.keySet())
+ {
+ IoAcceptor acceptor = _acceptors.get(bindAddress);
+ acceptor.unbind(bindAddress);
+ }
}
}
@@ -175,6 +231,14 @@ public abstract class ApplicationRegistry implements IApplicationRegistry
return _configuration;
}
+ public void addAcceptor(InetSocketAddress bindAddress, IoAcceptor acceptor)
+ {
+ synchronized (_acceptors)
+ {
+ _acceptors.put(bindAddress, acceptor);
+ }
+ }
+
public <T> T getConfiguredObject(Class<T> instanceType)
{
T instance = (T) _configuredObjects.get(instanceType);
@@ -195,9 +259,39 @@ public abstract class ApplicationRegistry implements IApplicationRegistry
return instance;
}
-
public static void setDefaultApplicationRegistry(String clazz)
{
_APPLICATION_REGISTRY = clazz;
}
+
+ public VirtualHostRegistry getVirtualHostRegistry()
+ {
+ return _virtualHostRegistry;
+ }
+
+ public ACLPlugin getAccessManager()
+ {
+ return _accessManager;
+ }
+
+ public ManagedObjectRegistry getManagedObjectRegistry()
+ {
+ return _managedObjectRegistry;
+ }
+
+ public PrincipalDatabaseManager getDatabaseManager()
+ {
+ return _databaseManager;
+ }
+
+ public AuthenticationManager getAuthenticationManager()
+ {
+ return _authenticationManager;
+ }
+
+ public PluginManager getPluginManager()
+ {
+ return _pluginManager;
+ }
+
}