From 71098e50d6a4685205abc4937586ae414b4cee8d Mon Sep 17 00:00:00 2001 From: Robert Gemmell Date: Mon, 31 May 2010 16:01:24 +0000 Subject: QPID-2581: Update configuration manager to allow multiple plugins to handle the same configuration Applied patch from Andrew Kennedy git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@949779 13f79535-47bb-0310-9956-ffa450edef68 --- .../server/configuration/ConfigurationManager.java | 36 ++++----- .../qpid/server/configuration/QueueConfig.java | 4 +- .../server/configuration/QueueConfiguration.java | 2 - .../configuration/SecurityConfiguration.java | 41 ---------- .../server/configuration/ServerConfiguration.java | 70 +++++++++-------- .../configuration/VirtualHostConfiguration.java | 24 ++---- .../configuration/plugins/ConfigurationPlugin.java | 88 +++++++++++++--------- .../plugins/ConfigurationPluginFactory.java | 13 ++-- .../qpid/server/connection/ConnectionRegistry.java | 14 ++-- .../qpid/server/registry/ApplicationRegistry.java | 34 ++++----- .../qpid/server/registry/BrokerConfigAdapter.java | 4 +- .../ConfigurationFileApplicationRegistry.java | 6 +- .../qpid/server/registry/IApplicationRegistry.java | 10 +-- .../server/virtualhost/ManagedVirtualHost.java | 3 +- .../qpid/server/virtualhost/VirtualHost.java | 4 +- .../VirtualHostConfigRecoveryHandler.java | 36 +++++---- .../qpid/server/virtualhost/VirtualHostImpl.java | 29 +++++-- .../plugins/VirtualHostHouseKeepingPlugin.java | 14 +++- .../virtualhost/plugins/VirtualHostPlugin.java | 43 +++++++++++ .../plugins/VirtualHostPluginFactory.java | 3 +- 20 files changed, 257 insertions(+), 221 deletions(-) delete mode 100644 java/broker/src/main/java/org/apache/qpid/server/configuration/SecurityConfiguration.java create mode 100644 java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java (limited to 'java/broker/src/main') diff --git a/java/broker/src/main/java/org/apache/qpid/server/configuration/ConfigurationManager.java b/java/broker/src/main/java/org/apache/qpid/server/configuration/ConfigurationManager.java index 9529d1097d..2c492ff6b9 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/configuration/ConfigurationManager.java +++ b/java/broker/src/main/java/org/apache/qpid/server/configuration/ConfigurationManager.java @@ -20,40 +20,34 @@ */ package org.apache.qpid.server.configuration; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; -import org.apache.log4j.Logger; import org.apache.qpid.server.configuration.plugins.ConfigurationPlugin; import org.apache.qpid.server.configuration.plugins.ConfigurationPluginFactory; import org.apache.qpid.server.registry.ApplicationRegistry; -import java.util.Map; - public class ConfigurationManager { - Logger _logger = Logger.getLogger(ConfigurationManager.class); - - public ConfigurationPlugin getConfigurationPlugin(String configurationElement, Configuration configuration) throws ConfigurationException + public List getConfigurationPlugins(String configurationElement, Configuration configuration) throws ConfigurationException { - Map configPlugins = - ApplicationRegistry.getInstance().getPluginManager().getConfigurationPlugins(); + List plugins = new ArrayList(); + Map, ConfigurationPluginFactory> factories = + ApplicationRegistry.getInstance().getPluginManager().getConfigurationPlugins(); - ConfigurationPluginFactory factory = configPlugins.get(configurationElement); - - if (_logger.isInfoEnabled()) + for (Entry, ConfigurationPluginFactory> entry : factories.entrySet()) { - _logger.info("Got Factory:" + factory + ": for :" + configurationElement); - } - - if (_logger.isDebugEnabled()) - { - _logger.debug("Loaded Plugins:"); - for (String key : configPlugins.keySet()) + if (entry.getKey().contains(configurationElement)) { - _logger.debug(key + ":" + configPlugins.get(key)); + ConfigurationPluginFactory factory = entry.getValue(); + plugins.add(factory.newInstance(configurationElement, configuration)); } } - - return factory != null ? factory.newInstance(configurationElement, configuration) : null; + + return plugins; } } diff --git a/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfig.java b/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfig.java index 4c9ec6619e..be34c8d63d 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfig.java +++ b/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfig.java @@ -23,6 +23,8 @@ package org.apache.qpid.server.configuration; import java.util.Map; +import org.apache.qpid.AMQException; + public interface QueueConfig extends ConfiguredObject { @@ -80,5 +82,5 @@ public interface QueueConfig extends ConfiguredObject + * To perform this {@link #initialise()} must be called. + *

* This has been made a two step process to allow the Plugin Manager and * Configuration Manager to be initialised in the Application Registry. - * + *

* If using this ServerConfiguration via an ApplicationRegistry there is no - * need to explictly call configure() as this is done via the AR.initialise() + * need to explictly call {@link #initialise()} as this is done via the + * {@link ApplicationRegistry#initialise()} method. * * @param configurationURL * @throws org.apache.commons.configuration.ConfigurationException @@ -149,15 +151,16 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa * * Mainly used during testing and in locations where configuration is not * desired but the interface requires configuration. - * - * If the given configuration has VirtualHost configuration then configure() - * must be called to perform the required setup. - * + *

+ * If the given configuration has VirtualHost configuration then + * {@link #initialise()} must be called to perform the required setup. + *

* This has been made a two step process to allow the Plugin Manager and * Configuration Manager to be initialised in the Application Registry. - * + *

* If using this ServerConfiguration via an ApplicationRegistry there is no - * need to explictly call configure() as this is done via the AR.initialise() + * need to explictly call {@link #initialise()} as this is done via the + * {@link ApplicationRegistry#initialise()} method. * * @param conf */ @@ -173,17 +176,17 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa * This has been separated from the constructor to allow the PluginManager * time to be created and provide plugins to the ConfigurationManager for * processing here. - * - * Called by ApplicationRegistry.initialise(); - * + *

+ * Called by {@link ApplicationRegistry#initialise()}. + *

* NOTE: A DEFAULT ApplicationRegistry must exist when using this method * or a new ApplicationRegistry will be created. * * @throws ConfigurationException */ - public void configure() throws ConfigurationException - { - + public void initialise() throws ConfigurationException + { + setConfiguration("", _configuration); setupVirtualHosts(_configuration); } @@ -380,6 +383,11 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa return conf; } + public String getConfigurationURL() + { + return _configFile == null ? "" : _configFile.getAbsolutePath(); + } + public void handle(Signal arg0) { try @@ -388,7 +396,7 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa } catch (ConfigurationException e) { - _log.error("Could not reload configuration file security sections", e); + _logger.error("Could not reload configuration file security sections", e); } } @@ -397,9 +405,9 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa if (_configFile != null) { Configuration newConfig = parseConfig(_configFile); - setConfiguration("", newConfig); - + ApplicationRegistry.getInstance().getSecurityManager().configureHostPlugins(this); + // Reload virtualhosts from correct location Configuration newVhosts; if (_vhostsFile == null) @@ -412,15 +420,16 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa } VirtualHostRegistry vhostRegistry = ApplicationRegistry.getInstance().getVirtualHostRegistry(); - for (String hostname : _virtualHosts.keySet()) + for (String hostName : _virtualHosts.keySet()) { - VirtualHost vhost = vhostRegistry.getVirtualHost(hostname); - SecurityConfiguration hostSecurityConfig = new SecurityConfiguration(newVhosts.subset("virtualhost."+hostname+".security")); - vhost.getAccessManager().configureGlobalPlugins(getSecurityConfiguration()); - vhost.getAccessManager().configureHostPlugins(hostSecurityConfig); + VirtualHost vhost = vhostRegistry.getVirtualHost(hostName); + Configuration vhostConfig = newVhosts.subset("virtualhost." + hostName); + vhost.getConfiguration().setConfiguration("virtualhosts.virtualhost", vhostConfig); // XXX + vhost.getSecurityManager().configureGlobalPlugins(this); + vhost.getSecurityManager().configureHostPlugins(vhost.getConfiguration()); } - _log.warn(SECURITY_CONFIG_RELOADED); + _logger.warn(SECURITY_CONFIG_RELOADED); } } @@ -556,11 +565,6 @@ public class ServerConfiguration extends ConfigurationPlugin implements SignalHa return getStringValue("management.ssl.keyStorePassword"); } - public SecurityConfiguration getSecurityConfiguration() - { - return new SecurityConfiguration(_configuration.subset("security")); - } - public boolean getQueueAutoRegister() { return getBooleanValue("queue.auto_register", true); diff --git a/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java b/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java index 00b109f33b..2be3311403 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java +++ b/java/broker/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java @@ -20,20 +20,18 @@ */ package org.apache.qpid.server.configuration; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.qpid.server.configuration.plugins.ConfigurationPlugin; import org.apache.qpid.server.registry.ApplicationRegistry; import org.apache.qpid.server.store.MemoryMessageStore; -import org.apache.qpid.server.configuration.plugins.ConfigurationPlugin; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.HashSet; public class VirtualHostConfiguration extends ConfigurationPlugin { @@ -55,7 +53,7 @@ public class VirtualHostConfiguration extends ConfigurationPlugin */ public void setConfiguration(Configuration config) throws ConfigurationException { - super.setConfiguration("virtualhosts.virtualhost",config); + setConfiguration("virtualhosts.virtualhost", config); Iterator i = getListValue("queues.queue.name").iterator(); @@ -97,11 +95,6 @@ public class VirtualHostConfiguration extends ConfigurationPlugin return getListValue("custom-exchanges.class-name"); } - public SecurityConfiguration getSecurityConfiguration() - { - return new SecurityConfiguration(_configuration.subset("security")); - } - public Configuration getStoreConfiguration() { return _configuration.subset("store"); @@ -201,8 +194,7 @@ public class VirtualHostConfiguration extends ConfigurationPlugin public String[] getElementsProcessed() { - return new String[]{"queues", "exchanges", "custom-exchanges", - "security", "store", "housekeeping"}; + return new String[]{"queues", "exchanges", "custom-exchanges", "store", "housekeeping"}; } diff --git a/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java b/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java index cb21f07eaf..9024c6aec6 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java +++ b/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java @@ -1,5 +1,4 @@ /* - * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -16,18 +15,9 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. - * */ package org.apache.qpid.server.configuration.plugins; -import org.apache.commons.configuration.Configuration; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.ConversionException; -import org.apache.log4j.Logger; -import org.apache.qpid.server.configuration.ConfigurationManager; -import org.apache.qpid.server.registry.ApplicationRegistry; - -import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -37,9 +27,16 @@ import java.util.Map; import java.util.NoSuchElementException; import java.util.Set; +import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.ConversionException; +import org.apache.log4j.Logger; +import org.apache.qpid.server.configuration.ConfigurationManager; +import org.apache.qpid.server.registry.ApplicationRegistry; + public abstract class ConfigurationPlugin { - protected Logger _logger = Logger.getLogger(this.getClass()); + protected static final Logger _logger = Logger.getLogger(ConfigurationPlugin.class); private Map, ConfigurationPlugin> _pluginConfiguration = new HashMap, ConfigurationPlugin>(); @@ -48,17 +45,24 @@ public abstract class ConfigurationPlugin /** * The Elements that this Plugin can process. - * i.e. + * * For a Queues plugin that would be a list containing: - * queue - the queue entries - * the alerting values for defaults - * exchange - the default exchange - * durable - set the default durablity - * etc - * - * @return + *

    + *
  • queue - the queue entries + *
  • the alerting values for defaults + *
  • exchange - the default exchange + *
  • durable - set the default durablity + *
*/ abstract public String[] getElementsProcessed(); + + /** + * Performs configuration validation. + */ + public void validateConfiguration() throws ConfigurationException + { + // Override in sub-classes + } public Configuration getConfig() { @@ -76,7 +80,6 @@ public abstract class ConfigurationPlugin * @param path * @param configuration the configuration for this plugin. */ - public void setConfiguration(String path, Configuration configuration) throws ConfigurationException { _configuration = configuration; @@ -97,7 +100,7 @@ public abstract class ConfigurationPlugin element = key.substring(0, elementNameIndex).trim(); } - //Trim any element properties + // Trim any element properties elementNameIndex = element.indexOf("["); if (elementNameIndex > 0) { @@ -138,29 +141,46 @@ public abstract class ConfigurationPlugin } // Process the elements in the configuration - for (String element : elements.toArray(new String[elements.size()])) + for (String element : elements) { ConfigurationManager configurationManager = ApplicationRegistry.getInstance().getConfigurationManager(); - - String configurationElement = path + "." + element; - ConfigurationPlugin elementHandler = configurationManager. - getConfigurationPlugin(configurationElement, - configuration.subset(element)); - - if (elementHandler == null) + Configuration handled = element.length() == 0 ? configuration : configuration.subset(element); + + String configurationElement = element; + if (path.length() > 0) { - _logger.warn("Unused configuration element: '" + configurationElement + "'"); + configurationElement = path + "." + configurationElement; } - else + + List handlers = configurationManager.getConfigurationPlugins(configurationElement, handled); + for (ConfigurationPlugin plugin : handlers) { - _pluginConfiguration.put(elementHandler.getClass(), elementHandler); + _pluginConfiguration.put(plugin.getClass(), plugin); } } validateConfiguration(); } - - abstract public void validateConfiguration() throws ConfigurationException; + + /** + * Helper method to print out list of keys in a {@link Configuration}. + */ + public static final void showKeys(Configuration config) + { + if (config.isEmpty()) + { + _logger.info("Configuration is empty"); + } + else + { + Iterator keys = config.getKeys(); + while (keys.hasNext()) + { + String key = (String) keys.next(); + _logger.info("Configuration key: " + key); + } + } + } protected boolean hasConfiguration() { diff --git a/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPluginFactory.java b/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPluginFactory.java index 1e928a1728..02560b296e 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPluginFactory.java +++ b/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPluginFactory.java @@ -20,22 +20,19 @@ */ package org.apache.qpid.server.configuration.plugins; +import java.util.List; + import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; public interface ConfigurationPluginFactory { - /** * The Parent paths of the configuration that this plugin supports. - * i.e. - * For Queue Elements the parent path is - * virtualhosts.virtualhost - * @return + * + * For example, {@code queue} elements have a parent path of {@code virtualhosts.virtualhost}. */ - abstract public String[] getParentPaths(); - + public List getParentPaths(); public ConfigurationPlugin newInstance(String path, Configuration config) throws ConfigurationException; - } diff --git a/java/broker/src/main/java/org/apache/qpid/server/connection/ConnectionRegistry.java b/java/broker/src/main/java/org/apache/qpid/server/connection/ConnectionRegistry.java index 69bdf94621..bac751e0c8 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/connection/ConnectionRegistry.java +++ b/java/broker/src/main/java/org/apache/qpid/server/connection/ConnectionRegistry.java @@ -20,15 +20,15 @@ */ package org.apache.qpid.server.connection; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + import org.apache.log4j.Logger; -import org.apache.qpid.common.Closeable; -import org.apache.qpid.server.protocol.AMQProtocolSession; -import org.apache.qpid.AMQException; import org.apache.qpid.AMQConnectionException; +import org.apache.qpid.AMQException; +import org.apache.qpid.common.Closeable; import org.apache.qpid.protocol.AMQConstant; - -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.List; +import org.apache.qpid.server.protocol.AMQProtocolSession; public class ConnectionRegistry implements IConnectionRegistry, Closeable { @@ -38,7 +38,7 @@ public class ConnectionRegistry implements IConnectionRegistry, Closeable public void initialise() { - + // None required } public void expireClosedChannels() 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 d339304ab6..4cb3d9e209 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 @@ -20,6 +20,11 @@ */ package org.apache.qpid.server.registry; +import java.net.InetSocketAddress; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + import org.apache.commons.configuration.ConfigurationException; import org.apache.log4j.Logger; import org.apache.qpid.AMQException; @@ -42,7 +47,7 @@ import org.apache.qpid.server.logging.rawloggers.Log4jMessageLogger; import org.apache.qpid.server.management.ManagedObjectRegistry; import org.apache.qpid.server.management.NoopManagedObjectRegistry; import org.apache.qpid.server.plugins.PluginManager; -import org.apache.qpid.server.security.access.ACLManager; +import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.security.auth.database.ConfigurationFilePrincipalDatabaseManager; import org.apache.qpid.server.security.auth.database.PrincipalDatabaseManager; import org.apache.qpid.server.security.auth.manager.AuthenticationManager; @@ -52,11 +57,6 @@ import org.apache.qpid.server.virtualhost.VirtualHost; import org.apache.qpid.server.virtualhost.VirtualHostImpl; import org.apache.qpid.server.virtualhost.VirtualHostRegistry; -import java.net.InetSocketAddress; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - /** * An abstract application registry that provides access to configuration information and handles the * construction and caching of configurable objects. @@ -69,8 +69,6 @@ public abstract class ApplicationRegistry implements IApplicationRegistry private static Map _instanceMap = new HashMap(); - private final Map, Object> _configuredObjects = new HashMap, Object>(); - protected final ServerConfiguration _configuration; public static final int DEFAULT_INSTANCE = 1; @@ -85,7 +83,7 @@ public abstract class ApplicationRegistry implements IApplicationRegistry protected VirtualHostRegistry _virtualHostRegistry; - protected ACLManager _accessManager; + protected SecurityManager _securityManager; protected PrincipalDatabaseManager _databaseManager; @@ -123,8 +121,10 @@ public abstract class ApplicationRegistry implements IApplicationRegistry initialise(instance, DEFAULT_INSTANCE); } + @SuppressWarnings("finally") public static void initialise(IApplicationRegistry instance, int instanceID) throws Exception { + _logger.error("initialise(IApplicationRegistry instance, int instanceID)"); if (instance != null) { _logger.info("Initialising Application Registry(" + instance + "):" + instanceID); @@ -134,7 +134,7 @@ public abstract class ApplicationRegistry implements IApplicationRegistry store.setRoot(new SystemConfigImpl(store)); instance.setConfigStore(store); - BrokerConfig broker = new BrokerConfigAdapter(instance, instanceID); + BrokerConfig broker = new BrokerConfigAdapter(instance); SystemConfig system = (SystemConfig) store.getRoot(); system.addBroker(broker); @@ -142,6 +142,7 @@ public abstract class ApplicationRegistry implements IApplicationRegistry try { + _logger.error("instance.initialise(instanceID)"); instance.initialise(instanceID); } catch (Exception e) @@ -248,13 +249,12 @@ public abstract class ApplicationRegistry implements IApplicationRegistry throw new ConfigurationException(e); } - _configuration.configure(); + _configuration.initialise(); } public void initialise(int instanceID) throws Exception { - _rootMessageLogger = new RootMessageLoggerImpl(_configuration, - new Log4jMessageLogger()); + _rootMessageLogger = new RootMessageLoggerImpl(_configuration, new Log4jMessageLogger()); _registryName = String.valueOf(instanceID); // Set the Actor for current log messages @@ -270,7 +270,7 @@ public abstract class ApplicationRegistry implements IApplicationRegistry _virtualHostRegistry = new VirtualHostRegistry(this); - _accessManager = new ACLManager(_configuration.getSecurityConfiguration(), _pluginManager); + _securityManager = new SecurityManager(_configuration, _pluginManager); createDatabaseManager(_configuration); @@ -282,7 +282,7 @@ public abstract class ApplicationRegistry implements IApplicationRegistry initialiseVirtualHosts(); - // Startup complete pop the current actor + // Startup complete, so pop the current actor CurrentActor.remove(); } @@ -433,9 +433,9 @@ public abstract class ApplicationRegistry implements IApplicationRegistry return _virtualHostRegistry; } - public ACLManager getAccessManager() throws ConfigurationException + public SecurityManager getSecurityManager() { - return new ACLManager(_configuration.getSecurityConfiguration(), _pluginManager); + return _securityManager; } public ManagedObjectRegistry getManagedObjectRegistry() diff --git a/java/broker/src/main/java/org/apache/qpid/server/registry/BrokerConfigAdapter.java b/java/broker/src/main/java/org/apache/qpid/server/registry/BrokerConfigAdapter.java index c8f5181416..4a4253153c 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/registry/BrokerConfigAdapter.java +++ b/java/broker/src/main/java/org/apache/qpid/server/registry/BrokerConfigAdapter.java @@ -32,7 +32,6 @@ import java.util.concurrent.ConcurrentHashMap; public class BrokerConfigAdapter implements BrokerConfig { private final IApplicationRegistry _instance; - private final int _instanceId; private SystemConfig _system; private final Map _vhosts = new ConcurrentHashMap(); @@ -40,10 +39,9 @@ public class BrokerConfigAdapter implements BrokerConfig private UUID _id; private String _federationTag; - public BrokerConfigAdapter(final IApplicationRegistry instance, final int instanceID) + public BrokerConfigAdapter(final IApplicationRegistry instance) { _instance = instance; - _instanceId = instanceID; _id = instance.getConfigStore().createId(); _federationTag = UUID.randomUUID().toString(); } diff --git a/java/broker/src/main/java/org/apache/qpid/server/registry/ConfigurationFileApplicationRegistry.java b/java/broker/src/main/java/org/apache/qpid/server/registry/ConfigurationFileApplicationRegistry.java index ae18cc0edb..b1172a880e 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/registry/ConfigurationFileApplicationRegistry.java +++ b/java/broker/src/main/java/org/apache/qpid/server/registry/ConfigurationFileApplicationRegistry.java @@ -20,8 +20,9 @@ */ package org.apache.qpid.server.registry; -import org.apache.commons.configuration.ConfigurationException; +import java.io.File; +import org.apache.commons.configuration.ConfigurationException; import org.apache.qpid.AMQException; import org.apache.qpid.server.configuration.ServerConfiguration; import org.apache.qpid.server.logging.actors.BrokerActor; @@ -29,8 +30,6 @@ import org.apache.qpid.server.logging.actors.CurrentActor; import org.apache.qpid.server.management.JMXManagedObjectRegistry; import org.apache.qpid.server.management.NoopManagedObjectRegistry; -import java.io.File; - public class ConfigurationFileApplicationRegistry extends ApplicationRegistry { public ConfigurationFileApplicationRegistry(File configurationURL) throws ConfigurationException @@ -38,7 +37,6 @@ public class ConfigurationFileApplicationRegistry extends ApplicationRegistry super(new ServerConfiguration(configurationURL)); } - @Override public void close() { diff --git a/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java b/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java index 62dddeda92..228c3b9112 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java +++ b/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java @@ -20,7 +20,8 @@ */ package org.apache.qpid.server.registry; -import org.apache.commons.configuration.ConfigurationException; +import java.net.InetSocketAddress; +import java.util.UUID; import org.apache.qpid.qmf.QMFService; import org.apache.qpid.server.configuration.BrokerConfig; @@ -31,16 +32,13 @@ import org.apache.qpid.server.configuration.ConfigurationManager; import org.apache.qpid.server.logging.RootMessageLogger; import org.apache.qpid.server.management.ManagedObjectRegistry; import org.apache.qpid.server.plugins.PluginManager; -import org.apache.qpid.server.security.access.ACLManager; +import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.security.auth.database.PrincipalDatabaseManager; import org.apache.qpid.server.security.auth.manager.AuthenticationManager; import org.apache.qpid.server.transport.QpidAcceptor; import org.apache.qpid.server.virtualhost.VirtualHost; import org.apache.qpid.server.virtualhost.VirtualHostRegistry; -import java.net.InetSocketAddress; -import java.util.UUID; - public interface IApplicationRegistry { /** @@ -71,7 +69,7 @@ public interface IApplicationRegistry VirtualHostRegistry getVirtualHostRegistry(); - ACLManager getAccessManager() throws ConfigurationException; + SecurityManager getSecurityManager(); PluginManager getPluginManager(); diff --git a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/ManagedVirtualHost.java b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/ManagedVirtualHost.java index 2f0c56cc86..767474d5ae 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/ManagedVirtualHost.java +++ b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/ManagedVirtualHost.java @@ -25,8 +25,7 @@ import java.io.IOException; import org.apache.qpid.management.common.mbeans.annotations.MBeanAttribute; /** - * The management interface exposed to allow management of an Exchange. - * @version 0.1 + * The management interface exposed to allow management of a virtualHost */ public interface ManagedVirtualHost { diff --git a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java index 9e1c07863c..4ed0507228 100755 --- a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java +++ b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java @@ -32,8 +32,8 @@ import org.apache.qpid.server.exchange.ExchangeFactory; import org.apache.qpid.server.store.MessageStore; import org.apache.qpid.server.store.TransactionLog; import org.apache.qpid.server.store.DurableConfigurationStore; +import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.security.auth.manager.AuthenticationManager; -import org.apache.qpid.server.security.access.ACLManager; import org.apache.qpid.server.management.ManagedObject; import org.apache.qpid.server.registry.IApplicationRegistry; import org.apache.qpid.server.binding.BindingFactory; @@ -65,7 +65,7 @@ public interface VirtualHost extends DurableConfigurationStore.Source, VirtualHo AuthenticationManager getAuthenticationManager(); - ACLManager getAccessManager(); + SecurityManager getSecurityManager(); void close(); diff --git a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostConfigRecoveryHandler.java b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostConfigRecoveryHandler.java index ca999ceb0b..675a6f6a91 100755 --- a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostConfigRecoveryHandler.java +++ b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostConfigRecoveryHandler.java @@ -94,21 +94,29 @@ public class VirtualHostConfigRecoveryHandler implements ConfigurationRecoveryHa public void queue(String queueName, String owner, boolean exclusive, FieldTable arguments) { - AMQShortString queueNameShortString = new AMQShortString(queueName); - - AMQQueue q = _virtualHost.getQueueRegistry().getQueue(queueNameShortString); - - if (q == null) + try { - q = AMQQueueFactory.createAMQQueueImpl(queueNameShortString, true, owner == null ? null : new AMQShortString(owner), false, exclusive, - _virtualHost, arguments); - _virtualHost.getQueueRegistry().registerQueue(q); + AMQShortString queueNameShortString = new AMQShortString(queueName); + + AMQQueue q = _virtualHost.getQueueRegistry().getQueue(queueNameShortString); + + if (q == null) + { + q = AMQQueueFactory.createAMQQueueImpl(queueNameShortString, true, owner == null ? null : new AMQShortString(owner), false, _virtualHost, + arguments); + _virtualHost.getQueueRegistry().registerQueue(q); + } + + CurrentActor.get().message(_logSubject, TransactionLogMessages.TXN_1004(queueName, true)); + + //Record that we have a queue for recovery + _queueRecoveries.put(queueName, 0); + } + catch (AMQException e) + { + // TODO + throw new RuntimeException(e); } - - CurrentActor.get().message(_logSubject, TransactionLogMessages.TXN_1004(queueName, true)); - - //Record that we have a queue for recovery - _queueRecoveries.put(queueName, 0); } public ExchangeRecoveryHandler completeQueueRecovery() @@ -131,9 +139,9 @@ public class VirtualHostConfigRecoveryHandler implements ConfigurationRecoveryHa } catch (AMQException e) { + // TODO throw new RuntimeException(e); } - } public BindingRecoveryHandler completeExchangeRecovery() diff --git a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java index 2542e1e94d..44d178602f 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java +++ b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java @@ -159,7 +159,9 @@ public class VirtualHostImpl implements Accessable, VirtualHost } /** - * Abstract MBean class. This has some of the methods implemented from management intrerface for exchanges. Any + * Virtual host JMX MBean class. + * + * This has some of the methods implemented from management intrerface for exchanges. Any * implementaion of an Exchange MBean should extend this class. */ public class VirtualHostMBean extends AMQManagedObject implements ManagedVirtualHost @@ -183,10 +185,7 @@ public class VirtualHostImpl implements Accessable, VirtualHost { return VirtualHostImpl.this; } - - } // End of MBean class - - + } public VirtualHostImpl(IApplicationRegistry appRegistry, VirtualHostConfiguration hostConfig) throws Exception { @@ -340,9 +339,25 @@ public class VirtualHostImpl implements Accessable, VirtualHost { try { - VirtualHostHouseKeepingPlugin plugin = - plugins.get(pluginName).newInstance(this); + VirtualHostPlugin plugin = plugins.get(pluginName).newInstance(this); + + TimeUnit units = TimeUnit.MILLISECONDS; + if (plugin.getTimeUnit() != null) + { + try + { + units = TimeUnit.valueOf(plugin.getTimeUnit()); + } + catch (IllegalArgumentException iae) + { + _logger.warn("Plugin:" + pluginName + + " provided an illegal TimeUnit value:" + + plugin.getTimeUnit()); + // Warn and use default of millseconds + // Should not occur in a well behaved plugin + } + } _houseKeepingTasks.scheduleAtFixedRate(plugin, plugin.getDelay() / 2, plugin.getDelay(), plugin.getTimeUnit()); diff --git a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostHouseKeepingPlugin.java b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostHouseKeepingPlugin.java index d2fd4daaa5..d119190842 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostHouseKeepingPlugin.java +++ b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostHouseKeepingPlugin.java @@ -20,16 +20,27 @@ */ package org.apache.qpid.server.virtualhost.plugins; +import org.apache.log4j.Logger; import org.apache.qpid.server.virtualhost.HouseKeepingTask; import org.apache.qpid.server.virtualhost.VirtualHost; import java.util.concurrent.TimeUnit; -public abstract class VirtualHostHouseKeepingPlugin extends HouseKeepingTask +public abstract class VirtualHostHouseKeepingPlugin extends HouseKeepingTask implements VirtualHostPlugin { + protected final Logger _logger = Logger.getLogger(getClass()); + + protected VirtualHost _virtualhost; + public VirtualHostHouseKeepingPlugin(VirtualHost vhost) { super(vhost); + setVirtualHost(vhost); + } + + public void setVirtualHost(VirtualHost vhost) + { + _virtualhost = vhost; } /** @@ -47,5 +58,4 @@ public abstract class VirtualHostHouseKeepingPlugin extends HouseKeepingTask * @see java.util.concurrent.TimeUnit for valid value. */ public abstract TimeUnit getTimeUnit(); - } diff --git a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java new file mode 100644 index 0000000000..59ab7ec673 --- /dev/null +++ b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPlugin.java @@ -0,0 +1,43 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.server.virtualhost.plugins; + +import org.apache.qpid.server.plugins.Plugin; +import org.apache.qpid.server.virtualhost.VirtualHost; + +public interface VirtualHostPlugin extends Runnable, Plugin +{ + public void setVirtualHost(VirtualHost vhost); + + /** + * Long value representing the delay between repeats + * + * @return + */ + public long getDelay(); + + /** + * Option to specify what the delay value represents + * @see java.util.concurrent.TimeUnit for valid value. + * @return + */ + public String getTimeUnit(); +} diff --git a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPluginFactory.java b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPluginFactory.java index c8bea18444..5335925fb0 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPluginFactory.java +++ b/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPluginFactory.java @@ -20,9 +20,10 @@ */ package org.apache.qpid.server.virtualhost.plugins; +import org.apache.commons.configuration.ConfigurationException; import org.apache.qpid.server.virtualhost.VirtualHost; public interface VirtualHostPluginFactory { - public VirtualHostHouseKeepingPlugin newInstance(VirtualHost vhost); + public VirtualHostHouseKeepingPlugin newInstance(VirtualHost vhost) throws ConfigurationException; } -- cgit v1.2.1