summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Rudyy <orudyy@apache.org>2013-01-25 17:53:37 +0000
committerAlex Rudyy <orudyy@apache.org>2013-01-25 17:53:37 +0000
commit9aa5072a34e02eea6515996e1b6555841252f6b1 (patch)
tree3560920ea045e301f7533b051d55830dae4bf30e
parent8b89e502ab0739f648f09dc8a3222a57c54aa85c (diff)
downloadqpid-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.java2
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java39
-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.java2
-rw-r--r--qpid/java/systests/etc/config-systests.json9
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"
} ]