diff options
author | Alex Rudyy <orudyy@apache.org> | 2013-01-25 17:53:37 +0000 |
---|---|---|
committer | Alex Rudyy <orudyy@apache.org> | 2013-01-25 17:53:37 +0000 |
commit | 9aa5072a34e02eea6515996e1b6555841252f6b1 (patch) | |
tree | 3560920ea045e301f7533b051d55830dae4bf30e | |
parent | 8b89e502ab0739f648f09dc8a3222a57c54aa85c (diff) | |
download | qpid-python-9aa5072a34e02eea6515996e1b6555841252f6b1.tar.gz |
QPID-4390: Change json configuration store to identify configuration entry type based on relationship name
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/java-broker-config-qpid-4390@1438619 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreator.java | 2 | ||||
-rw-r--r-- | qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java | 39 | ||||
-rw-r--r-- | qpid/java/broker/src/main/resources/initial-store.json (renamed from qpid/java/broker/src/main/resources/default.json) | 9 | ||||
-rw-r--r-- | qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java | 2 | ||||
-rw-r--r-- | qpid/java/systests/etc/config-systests.json | 9 |
5 files changed, 30 insertions, 31 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreator.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreator.java index c96f0dd463..9bd6fca645 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreator.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreator.java @@ -29,7 +29,7 @@ public class BrokerConfigurationStoreCreator /** * Path to resource containing broker default configuration */ - public static final String INITIAL_STORE_LOCATION = "default.json"; + public static final String INITIAL_STORE_LOCATION = "initial-store.json"; /** * Create broker configuration store for given store location, store 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 969935376a..2e0c132181 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 @@ -24,6 +24,8 @@ import org.apache.qpid.server.configuration.ConfigurationEntryStore; import org.apache.qpid.server.configuration.BrokerConfigurationStoreCreator; 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.Model; import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.util.FileUtils; import org.apache.qpid.util.Strings; @@ -38,17 +40,16 @@ import org.codehaus.jackson.node.ArrayNode; public class JsonConfigurationEntryStore implements ConfigurationEntryStore { - private static final String DEFAULT_BROKER_TYPE = Broker.class.getSimpleName(); private static final String DEFAULT_BROKER_NAME = "Broker"; private static final String ID = "id"; - private static final String TYPE = "type"; + private static final String TYPE = "@type"; private ObjectMapper _objectMapper; private Map<UUID, ConfigurationEntry> _entries; private File _storeFile; private UUID _rootId; private String _initialStoreLocation; - + private Map<String, Class<? extends ConfiguredObject>> _relationshipClasses; public JsonConfigurationEntryStore() { @@ -62,6 +63,21 @@ public class JsonConfigurationEntryStore implements ConfigurationEntryStore _objectMapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); _objectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true); _entries = new HashMap<UUID, ConfigurationEntry>(); + _relationshipClasses = buildRelationshipClassMap(); + } + + private Map<String, Class<? extends ConfiguredObject>> buildRelationshipClassMap() + { + Map<String, Class<? extends ConfiguredObject>> relationships = new HashMap<String, Class<? extends ConfiguredObject>>(); + + Collection<Class<? extends ConfiguredObject>> children = Model.getInstance().getChildTypes(Broker.class); + for (Class<? extends ConfiguredObject> childClass : children) + { + String name = childClass.getSimpleName().toLowerCase(); + String relationshipName = name + (name.endsWith("s") ? "es" : "s"); + relationships.put(relationshipName, childClass); + } + return relationships; } public void load(URL storeURL) @@ -71,7 +87,7 @@ public class JsonConfigurationEntryStore implements ConfigurationEntryStore throw new IllegalStateException("Cannot load the store from"); } JsonNode node = load(storeURL, _objectMapper); - ConfigurationEntry brokerEntry = toEntry(node, true, _entries); + ConfigurationEntry brokerEntry = toEntry(node, Broker.class, _entries); _rootId = brokerEntry.getId(); } @@ -309,7 +325,7 @@ public class JsonConfigurationEntryStore implements ConfigurationEntryStore return root; } - private ConfigurationEntry toEntry(JsonNode parent, boolean isRoot, Map<UUID, ConfigurationEntry> entries) + private ConfigurationEntry toEntry(JsonNode parent, Class<? extends ConfiguredObject> expectedConfiguredObjectClass, Map<UUID, ConfigurationEntry> entries) { Map<String, Object> attributes = null; Set<UUID> childrenIds = new TreeSet<UUID>(); @@ -338,8 +354,9 @@ public class JsonConfigurationEntryStore implements ConfigurationEntryStore JsonNode element = elements.next(); if (element.isObject()) { + Class<? extends ConfiguredObject> expectedChildConfiguredObjectClass = _relationshipClasses.get(fieldName); // assuming it is a child node - ConfigurationEntry entry = toEntry(element, false, entries); + ConfigurationEntry entry = toEntry(element, expectedChildConfiguredObjectClass, entries); childrenIds.add(entry.getId()); } else @@ -375,13 +392,13 @@ public class JsonConfigurationEntryStore implements ConfigurationEntryStore if (type == null) { - if (isRoot) + if (expectedConfiguredObjectClass == null) { - type = DEFAULT_BROKER_TYPE; + throw new IllegalConfigurationException("Type attribute is not provided for configuration entry " + parent); } else { - throw new IllegalConfigurationException("Type attribute is not provided for configuration entry " + parent); + type = expectedConfiguredObjectClass.getSimpleName(); } } String name = null; @@ -391,7 +408,7 @@ public class JsonConfigurationEntryStore implements ConfigurationEntryStore } if ((name == null || "".equals(name))) { - if (isRoot) + if (expectedConfiguredObjectClass == Broker.class) { name = DEFAULT_BROKER_NAME; } @@ -403,7 +420,7 @@ public class JsonConfigurationEntryStore implements ConfigurationEntryStore UUID id = null; if (idAsString == null) { - if (isRoot) + if (expectedConfiguredObjectClass == Broker.class) { id = UUIDGenerator.generateRandomUUID(); } diff --git a/qpid/java/broker/src/main/resources/default.json b/qpid/java/broker/src/main/resources/initial-store.json index de36492eda..a80ad95bd4 100644 --- a/qpid/java/broker/src/main/resources/default.json +++ b/qpid/java/broker/src/main/resources/initial-store.json @@ -19,48 +19,39 @@ * */ { - "type" : "Broker", "name": "QpidBroker", "defaultAuthenticationProvider" : "defaultAuthenticationProvider", "defaultVirtualHost" : "default", "authenticationproviders" : [ { - "type" : "AuthenticationProvider", "name" : "defaultAuthenticationProvider", "authenticationProviderType" : "PlainPasswordFileAuthenticationProvider", "path" : "${QPID_HOME}/etc/passwd" } ], "ports" : [ { - "type" : "Port", "name" : "5672-AMQP", "port" : 5672 }, { - "type" : "Port", "name" : "8080-HTTP", "port" : 8080, "protocols" : [ "HTTP" ] }, { - "type" : "Port", "name" : "8999-RMI", "port" : 8999, "protocols" : [ "RMI" ] }, { - "type" : "Port", "name" : "9099-JMX_RMI", "port" : 9099, "protocols" : [ "JMX_RMI" ] }], "virtualhosts" : [ { - "type" : "VirtualHost", "name" : "default", "storeType" : "DERBY", "storePath" : "${QPID_WORK}/store" } ], "plugins" : [ { - "type" : "Plugin", "pluginType" : "MANAGEMENT-HTTP", "name" : "httpManagement" }, { - "type" : "Plugin", "pluginType" : "MANAGEMENT-JMX", "name" : "jmxManagement" } ] diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java index 539da83d85..a18d5501f0 100644 --- a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java +++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java @@ -33,7 +33,7 @@ public class JsonConfigurationEntryStoreTest extends ConfigurationEntryStoreTest Map<String, Object> brokerObjectMap = new HashMap<String, Object>(); brokerObjectMap.put(Broker.ID, brokerId); - brokerObjectMap.put("type", Broker.class.getSimpleName()); + brokerObjectMap.put("@type", Broker.class.getSimpleName()); brokerObjectMap.putAll(brokerAttributes); StringWriter sw = new StringWriter(); diff --git a/qpid/java/systests/etc/config-systests.json b/qpid/java/systests/etc/config-systests.json index 8bc0cfda39..a5b85a2050 100644 --- a/qpid/java/systests/etc/config-systests.json +++ b/qpid/java/systests/etc/config-systests.json @@ -19,7 +19,6 @@ * */ { - "type" : "Broker", "name": "QpidBroker", "defaultAuthenticationProvider" : "plain", "defaultVirtualHost" : "test", @@ -28,44 +27,36 @@ "trustStorePath": "${QPID_HOME}/../test-profiles/test_resources/ssl/java_client_truststore.jks", "trustStorePassword": "password", "authenticationproviders" : [ { - "type" : "AuthenticationProvider", "name" : "plain", "authenticationProviderType" : "PlainPasswordFileAuthenticationProvider", "path" : "${QPID_HOME}/etc/passwd" } ], "ports" : [ { - "type" : "Port", "name" : "amqp", "port" : "${test.port}" }, { - "type" : "Port", "name" : "http", "port" : "${test.hport}", "protocols" : [ "HTTP" ] }, { - "type" : "Port", "name" : "rmi", "port" : "${test.mport}", "protocols" : [ "RMI" ] }, { - "type" : "Port", "name" : "jmx", "port" : "${test.cport}", "protocols" : [ "JMX_RMI" ] }], "virtualhosts" : [ { - "type" : "VirtualHost", "name" : "test", "configPath" : "${broker.virtualhosts-config}" } ] /* , "plugins" : [ { - "type" : "Plugin", "pluginType" : "MANAGEMENT-HTTP", "name" : "httpManagement" }, { - "type" : "Plugin", "pluginType" : "MANAGEMENT-JMX", "name" : "jmxManagement" } ] |