diff options
author | Alex Rudyy <orudyy@apache.org> | 2013-01-04 17:44:20 +0000 |
---|---|---|
committer | Alex Rudyy <orudyy@apache.org> | 2013-01-04 17:44:20 +0000 |
commit | 5c6f1f048e07976aafa30249230ca3a7a72423f6 (patch) | |
tree | ae632e4ca9cca3a87b8da364963d25768e7f1513 | |
parent | 21ebe679928fab6f3cd17129b561af7df4eac373 (diff) | |
download | qpid-python-5c6f1f048e07976aafa30249230ca3a7a72423f6.tar.gz |
QPID-4390: Add accessors for management plugin attributes, introduce the relationship between Broker and Plugins
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/java-broker-config-qpid-4390@1428997 13f79535-47bb-0310-9956-ffa450edef68
12 files changed, 191 insertions, 21 deletions
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java index 4656d11710..473a7754e9 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java @@ -22,6 +22,7 @@ package org.apache.qpid.server.management.plugin; import java.io.File; import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.UUID; @@ -47,6 +48,7 @@ import org.apache.qpid.server.model.Exchange; import org.apache.qpid.server.model.Group; import org.apache.qpid.server.model.GroupMember; import org.apache.qpid.server.model.GroupProvider; +import org.apache.qpid.server.model.Plugin; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.Protocol; import org.apache.qpid.server.model.Queue; @@ -68,6 +70,18 @@ public class HttpManagement extends AbstractPluginAdapter { private final Logger _logger = Logger.getLogger(HttpManagement.class); + private static final Collection<String> AVAILABLE_ATTRIBUTES = new HashSet<String>(Plugin.AVAILABLE_ATTRIBUTES); + static + { + AVAILABLE_ATTRIBUTES.add(HttpManagementFactory.HTTP_BASIC_AUTHENTICATION_ENABLED); + AVAILABLE_ATTRIBUTES.add(HttpManagementFactory.HTTPS_BASIC_AUTHENTICATION_ENABLED); + AVAILABLE_ATTRIBUTES.add(HttpManagementFactory.HTTP_SASL_AUTHENTICATION_ENABLED); + AVAILABLE_ATTRIBUTES.add(HttpManagementFactory.HTTPS_SASL_AUTHENTICATION_ENABLED); + AVAILABLE_ATTRIBUTES.add(HttpManagementFactory.TIME_OUT); + AVAILABLE_ATTRIBUTES.add(HttpManagementFactory.PLUGIN_TYPE); + } + + public static final String ENTRY_POINT_PATH = "/management"; private static final String OPERATIONAL_LOGGING_NAME = "Web"; @@ -330,4 +344,40 @@ public class HttpManagement extends AbstractPluginAdapter { return "HttpManagement"; } + + @Override + public Collection<String> getAttributeNames() + { + return Collections.unmodifiableCollection(AVAILABLE_ATTRIBUTES); + } + + @Override + public Object getAttribute(String name) + { + if(HttpManagementFactory.HTTP_BASIC_AUTHENTICATION_ENABLED.equals(name)) + { + return _configuration.isHttpBasicAuthenticationEnabled(); + } + else if(HttpManagementFactory.HTTPS_BASIC_AUTHENTICATION_ENABLED.equals(name)) + { + return _configuration.isHttpsBasicAuthenticationEnabled(); + } + else if(HttpManagementFactory.HTTP_SASL_AUTHENTICATION_ENABLED.equals(name)) + { + return _configuration.isHttpSaslAuthenticationEnabled(); + } + else if(HttpManagementFactory.HTTPS_SASL_AUTHENTICATION_ENABLED.equals(name)) + { + return _configuration.isHttpSaslAuthenticationEnabled(); + } + else if(HttpManagementFactory.TIME_OUT.equals(name)) + { + return _configuration.getSessionTimeout(); + } + else if(HttpManagementFactory.PLUGIN_TYPE.equals(name)) + { + return HttpManagementFactory.PLUGIN_NAME; + } + return super.getAttribute(name); + } } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementFactory.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementFactory.java index 96a1546ae0..5a82297b50 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementFactory.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementFactory.java @@ -19,14 +19,14 @@ package org.apache.qpid.server.management.plugin; import static org.apache.qpid.server.util.MapValueConverter.getBooleanAttribute; -import static org.apache.qpid.server.util.MapValueConverter.getStringAttribute; import static org.apache.qpid.server.util.MapValueConverter.getIntegerAttribute; +import static org.apache.qpid.server.util.MapValueConverter.getStringAttribute; import java.util.Map; import java.util.UUID; import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.model.Plugin; import org.apache.qpid.server.plugin.PluginFactory; public class HttpManagementFactory implements PluginFactory @@ -45,7 +45,7 @@ public class HttpManagementFactory implements PluginFactory public static final String PLUGIN_NAME = "MANAGEMENT-HTTP"; @Override - public ConfiguredObject createInstance(UUID id, Map<String, Object> attributes, Broker broker) + public Plugin createInstance(UUID id, Map<String, Object> attributes, Broker broker) { if (!PLUGIN_NAME.equals(attributes.get(PLUGIN_TYPE))) { diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java index 1da82faeff..122a0accd4 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java @@ -23,7 +23,9 @@ package org.apache.qpid.server.jmx; import java.io.IOException; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.UUID; @@ -41,6 +43,7 @@ import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ConfigurationChangeListener; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.PasswordCredentialManagingAuthenticationProvider; +import org.apache.qpid.server.model.Plugin; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.Protocol; import org.apache.qpid.server.model.State; @@ -52,6 +55,14 @@ public class JMXManagement extends AbstractPluginAdapter implements Configuratio { private static final Logger LOGGER = Logger.getLogger(JMXManagement.class); + private static final Collection<String> AVAILABLE_ATTRIBUTES = new HashSet<String>(Plugin.AVAILABLE_ATTRIBUTES); + static + { + AVAILABLE_ATTRIBUTES.add(JMXManagementFactory.MANAGEMENT_RIGHTS_INFER_ALL_ACCESS); + AVAILABLE_ATTRIBUTES.add(JMXManagementFactory.PLUGIN_TYPE); + AVAILABLE_ATTRIBUTES.add(JMXManagementFactory.USE_PLATFORM_MBEAN_SERVER); + } + private final Broker _broker; private JMXManagedObjectRegistry _objectRegistry; @@ -285,4 +296,28 @@ public class JMXManagement extends AbstractPluginAdapter implements Configuratio { return "JMXManagement"; } + + @Override + public Collection<String> getAttributeNames() + { + return Collections.unmodifiableCollection(AVAILABLE_ATTRIBUTES); + } + + @Override + public Object getAttribute(String name) + { + if(JMXManagementFactory.MANAGEMENT_RIGHTS_INFER_ALL_ACCESS.equals(name)) + { + return _jmxConfiguration.isManagementRightsInferAllAccess(); + } + else if(JMXManagementFactory.USE_PLATFORM_MBEAN_SERVER.equals(name)) + { + return _jmxConfiguration.isPlatformMBeanServer(); + } + else if(JMXManagementFactory.PLUGIN_TYPE.equals(name)) + { + return JMXManagementFactory.PLUGIN_NAME; + } + return super.getAttribute(name); + } } diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementFactory.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementFactory.java index 9b45924219..c50a67f923 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementFactory.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementFactory.java @@ -26,7 +26,7 @@ import java.util.UUID; import org.apache.log4j.Logger; import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.model.Plugin; import org.apache.qpid.server.plugin.PluginFactory; public class JMXManagementFactory implements PluginFactory @@ -41,7 +41,7 @@ public class JMXManagementFactory implements PluginFactory public static final String PLUGIN_NAME = "MANAGEMENT-JMX"; @Override - public ConfiguredObject createInstance(UUID id, Map<String, Object> attributes, Broker broker) + public Plugin createInstance(UUID id, Map<String, Object> attributes, Broker broker) { if (PLUGIN_NAME.equals(attributes.get(PLUGIN_TYPE))) { diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java index eb77c5fcf5..b6a83dc99d 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java @@ -66,11 +66,11 @@ public class JsonConfigurationEntryStore implements ConfigurationEntryStore { this(); _storeFile = storeFile; - if (storeFile.exists()) + if (_storeFile.exists()) { - if (storeFile.length() > 0) + if (_storeFile.length() > 0) { - URL storeURL = fileToURL(storeFile); + URL storeURL = fileToURL(_storeFile); JsonNode node = load(storeURL, _objectMapper); ConfigurationEntry brokerEntry = toEntry(node, true, _entries); _rootId = brokerEntry.getId(); @@ -78,8 +78,9 @@ public class JsonConfigurationEntryStore implements ConfigurationEntryStore } else { - createStoreFile(storeFile); + createStoreFile(_storeFile); } + if (_rootId == null) { _rootId = createUUID(DEFAULT_BROKER_TYPE, DEFAULT_BROKER_NAME); @@ -151,6 +152,11 @@ public class JsonConfigurationEntryStore implements ConfigurationEntryStore return _entries.get(id); } + public void saveTo(File file) + { + saveAsTree(_rootId, _entries, _objectMapper, file); + } + private void createStoreFile(File storeFile) { File parent = storeFile.getParentFile(); diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Model.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Model.java index 08c6b0e69f..2c05dce9cb 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Model.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Model.java @@ -50,6 +50,7 @@ public class Model addRelationship(Broker.class, GroupProvider.class); addRelationship(Broker.class, TrustStore.class); addRelationship(Broker.class, KeyStore.class); + addRelationship(Broker.class, Plugin.class); addRelationship(VirtualHost.class, Exchange.class); addRelationship(VirtualHost.class, Queue.class); diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Plugin.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Plugin.java index 4820bf9e37..b9503a5841 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Plugin.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Plugin.java @@ -20,7 +20,33 @@ */ package org.apache.qpid.server.model; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; + public interface Plugin extends ConfiguredObject { - //Hack, using it for the class name only for consistency with the other things. + //Hack, using it for the class name only for consistency with the other things. + String CREATED = "created"; + String DURABLE = "durable"; + String ID = "id"; + String LIFETIME_POLICY = "lifetimePolicy"; + String NAME = "name"; + String STATE = "state"; + String TIME_TO_LIVE = "timeToLive"; + String UPDATED = "updated"; + + // Attributes + public static final Collection<String> AVAILABLE_ATTRIBUTES = + Collections.unmodifiableList( + Arrays.asList( + ID, + NAME, + STATE, + DURABLE, + LIFETIME_POLICY, + TIME_TO_LIVE, + CREATED, + UPDATED + )); } diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java index 93d8e21743..c0a4fcdd29 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java @@ -71,7 +71,8 @@ public abstract class AbstractPluginAdapter extends AbstractAdapter implements P } @Override - public LifetimePolicy setLifetimePolicy(LifetimePolicy expected, LifetimePolicy desired) throws IllegalStateException, AccessControlException, IllegalArgumentException + public LifetimePolicy setLifetimePolicy(LifetimePolicy expected, LifetimePolicy desired) throws IllegalStateException, + AccessControlException, IllegalArgumentException { throw new UnsupportedOperationException(); } @@ -83,7 +84,8 @@ public abstract class AbstractPluginAdapter extends AbstractAdapter implements P } @Override - public long setTimeToLive(long expected, long desired) throws IllegalStateException, AccessControlException, IllegalArgumentException + public long setTimeToLive(long expected, long desired) throws IllegalStateException, AccessControlException, + IllegalArgumentException { throw new UnsupportedOperationException(); } @@ -101,9 +103,53 @@ public abstract class AbstractPluginAdapter extends AbstractAdapter implements P } @Override - public <C extends ConfiguredObject> C createChild(Class<C> childClass, Map<String, Object> attributes, ConfiguredObject... otherParents) + public <C extends ConfiguredObject> C createChild(Class<C> childClass, Map<String, Object> attributes, + ConfiguredObject... otherParents) { throw new UnsupportedOperationException(); } + @Override + public Collection<String> getAttributeNames() + { + return AVAILABLE_ATTRIBUTES; + } + + @Override + public Object getAttribute(String name) + { + if (ID.equals(name)) + { + return getId(); + } + else if (NAME.equals(name)) + { + return getName(); + } + else if (STATE.equals(name)) + { + return getActualState(); + } + else if (DURABLE.equals(name)) + { + return isDurable(); + } + else if (LIFETIME_POLICY.equals(name)) + { + return getLifetimePolicy(); + } + else if (TIME_TO_LIVE.equals(name)) + { + return getTimeToLive(); + } + else if (CREATED.equals(name)) + { + + } + else if (UPDATED.equals(name)) + { + + } + return super.getAttribute(name); + } } diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java index ff53e35404..89351dfb0f 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java @@ -50,6 +50,7 @@ import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.GroupProvider; import org.apache.qpid.server.model.KeyStore; import org.apache.qpid.server.model.LifetimePolicy; +import org.apache.qpid.server.model.Plugin; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.Statistics; @@ -319,7 +320,7 @@ public class BrokerAdapter extends AbstractAdapter implements Broker, Configurat { return (Collection<C>) getTrustStores(); } - else if(clazz == ConfiguredObject.class) + else if(clazz == Plugin.class) { return (Collection<C>) getPlugins(); } @@ -795,10 +796,14 @@ public class BrokerAdapter extends AbstractAdapter implements Broker, Configurat { addTrustStore((TrustStore)object); } - else + else if(object instanceof Plugin) { addPlugin(object); } + else + { + throw new IllegalArgumentException("Attempted to recover unexpected type of configured object: " + object.getClass().getName()); + } } @Override diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/PluginFactory.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/PluginFactory.java index c4c260698b..af24f62e28 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/PluginFactory.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/PluginFactory.java @@ -22,11 +22,11 @@ import java.util.Map; import java.util.UUID; import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.model.Plugin; public interface PluginFactory { static final String PLUGIN_TYPE = "pluginType"; - ConfiguredObject createInstance(UUID id, Map<String, Object> attributes, Broker broker); + Plugin createInstance(UUID id, Map<String, Object> attributes, Broker broker); } diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java index 99acc28413..633070fa65 100644 --- a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java +++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java @@ -321,7 +321,7 @@ public class BrokerRecovererTest extends TestCase public void testCreateBrokerWithPlugins() { ConfigurationEntry pluginEntry = mock(ConfigurationEntry.class); - ConfiguredObject plugin = mock(ConfiguredObject.class); + Plugin plugin = mock(Plugin.class); _brokerEntryChildren.put(Plugin.class.getSimpleName(), Arrays.asList(pluginEntry)); RecovererProvider recovererProvider = createRecoveryProvider(new ConfigurationEntry[]{pluginEntry, _authenticationProviderEntry1}, @@ -331,7 +331,7 @@ public class BrokerRecovererTest extends TestCase assertNotNull(broker); assertEquals(_brokerId, broker.getId()); - assertEquals(Collections.singleton(plugin), new HashSet<ConfiguredObject>(broker.getChildren(ConfiguredObject.class))); + assertEquals(Collections.singleton(plugin), new HashSet<ConfiguredObject>(broker.getChildren(Plugin.class))); } public void testCreateBrokerWithKeyStores() diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/PluginRecovererTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/PluginRecovererTest.java index c64bf4f030..42fd742407 100644 --- a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/PluginRecovererTest.java +++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/PluginRecovererTest.java @@ -34,6 +34,7 @@ import org.apache.qpid.server.configuration.ConfigurationEntry; import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.model.Plugin; import org.apache.qpid.server.plugin.PluginFactory; import org.apache.qpid.server.plugin.QpidServiceLoader; @@ -68,7 +69,7 @@ public class PluginRecovererTest extends TestCase public void testCreate() { - ConfiguredObject pluginFromFactory = mock(ConfiguredObject.class); + Plugin pluginFromFactory = mock(Plugin.class); when(pluginFromFactory.getId()).thenReturn(_id); when(_factory.createInstance(_id, _attributes, _broker)).thenReturn(pluginFromFactory); @@ -81,7 +82,7 @@ public class PluginRecovererTest extends TestCase public void testCreateThrowsExceptionForUnexpectedId() { - ConfiguredObject pluginFromFactory = mock(ConfiguredObject.class); + Plugin pluginFromFactory = mock(Plugin.class); when(pluginFromFactory.getId()).thenReturn(UUID.randomUUID()); when(_factory.createInstance(_id, _attributes, _broker)).thenReturn(pluginFromFactory); |