summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2013-05-03 11:08:28 +0000
committerRobert Gemmell <robbie@apache.org>2013-05-03 11:08:28 +0000
commitb162949c9fd2b4d2ac6ea455ed538eec5b1909fb (patch)
treeb44312bf1a17a26eeb01d325b06c6c264a50d771
parent7ee66edb2e18127a12994f559520933f7a811a4b (diff)
downloadqpid-python-b162949c9fd2b4d2ac6ea455ed538eec5b1909fb.tar.gz
QPID-4809: add support for setting configuration properties through the command line and BrokerOptions that can be used by the broker configuration store to resolve variables in the config, use this to supply the default port number values.
Povides chance to alter the ports when first starting the broker and using the initial config file to populate the config store. merged from trunk r1478696 git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.22@1478725 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/Broker.java3
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/BrokerOptions.java52
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java27
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreator.java7
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java10
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java17
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/JsonConfigurationStoreFactory.java7
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/MemoryConfigurationStoreFactory.java7
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/ConfigurationStoreFactory.java5
-rw-r--r--qpid/java/broker/src/main/resources/initial-config.json8
-rw-r--r--qpid/java/broker/src/test/java/org/apache/qpid/server/BrokerOptionsTest.java44
-rw-r--r--qpid/java/broker/src/test/java/org/apache/qpid/server/MainTest.java50
-rw-r--r--qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreatorTest.java15
-rw-r--r--qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java12
-rw-r--r--qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStoreTest.java12
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/test/utils/TestBrokerConfiguration.java2
16 files changed, 230 insertions, 48 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/Broker.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/Broker.java
index dd0fde5f7a..25322c7a71 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/Broker.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/Broker.java
@@ -124,7 +124,8 @@ public class Broker
}
BrokerConfigurationStoreCreator storeCreator = new BrokerConfigurationStoreCreator();
- ConfigurationEntryStore store = storeCreator.createStore(storeLocation, storeType, options.getInitialConfigurationLocation(), options.isOverwriteConfigurationStore());
+ ConfigurationEntryStore store = storeCreator.createStore(storeLocation, storeType, options.getInitialConfigurationLocation(),
+ options.isOverwriteConfigurationStore(), options.getConfigProperties());
if (options.isManagementMode())
{
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/BrokerOptions.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/BrokerOptions.java
index 5c2a8fd090..3ba4ae6e91 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/BrokerOptions.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/BrokerOptions.java
@@ -21,6 +21,10 @@
package org.apache.qpid.server;
import java.io.File;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.qpid.server.configuration.BrokerProperties;
import org.apache.qpid.server.configuration.ConfigurationEntryStore;
@@ -29,6 +33,16 @@ import org.apache.qpid.server.util.StringUtil;
public class BrokerOptions
{
+ public static final String QPID_AMQP_PORT = "qpid.amqp_port";
+ public static final String QPID_HTTP_PORT = "qpid.http_port";
+ public static final String QPID_RMI_PORT = "qpid.rmi_port";
+ public static final String QPID_JMX_PORT = "qpid.jmx_port";
+
+ public static final String DEFAULT_AMQP_PORT_NUMBER = "5672";
+ public static final String DEFAULT_HTTP_PORT_NUMBER = "8080";
+ public static final String DEFAULT_RMI_PORT_NUMBER = "8999";
+ public static final String DEFAULT_JMX_PORT_NUMBER = "9099";
+
public static final String DEFAULT_INITIAL_CONFIG_NAME = "initial-config.json";
public static final String DEFAULT_STORE_TYPE = "json";
public static final String DEFAULT_CONFIG_NAME_PREFIX = "config";
@@ -55,6 +69,7 @@ public class BrokerOptions
private String _workingDir;
private boolean _skipLoggingConfiguration;
private boolean _overwriteConfigurationStore;
+ private Map<String, String> _configProperties = new HashMap<String,String>();
public String getLogConfigFile()
{
@@ -289,4 +304,41 @@ public class BrokerOptions
{
_skipLoggingConfiguration = skipLoggingConfiguration;
}
+
+ /**
+ * Sets the named configuration property to the given value.
+ *
+ * Passing a null value causes removal of a previous value, and restores any default there may have been.
+ */
+ public void setConfigProperty(String name, String value)
+ {
+ if(value == null)
+ {
+ _configProperties.remove(name);
+ }
+ else
+ {
+ _configProperties.put(name, value);
+ }
+ }
+
+ /**
+ * Get an un-editable copy of the configuration properties, representing
+ * the user-configured values as well as any defaults for properties
+ * not otherwise configured.
+ *
+ * Subsequent property changes are not reflected in this map.
+ */
+ public Map<String,String> getConfigProperties()
+ {
+ ConcurrentHashMap<String, String> properties = new ConcurrentHashMap<String,String>();
+ properties.putAll(_configProperties);
+
+ properties.putIfAbsent(QPID_AMQP_PORT, String.valueOf(DEFAULT_AMQP_PORT_NUMBER));
+ properties.putIfAbsent(QPID_HTTP_PORT, String.valueOf(DEFAULT_HTTP_PORT_NUMBER));
+ properties.putIfAbsent(QPID_RMI_PORT, String.valueOf(DEFAULT_RMI_PORT_NUMBER));
+ properties.putIfAbsent(QPID_JMX_PORT, String.valueOf(DEFAULT_JMX_PORT_NUMBER));
+
+ return Collections.unmodifiableMap(properties);
+ }
}
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java
index 46612613dd..03514939ec 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java
@@ -60,6 +60,10 @@ public class Main
" optionally specified file path, or as " + BrokerOptions.DEFAULT_INITIAL_CONFIG_NAME + " in the current directory")
.withLongOpt("create-initial-config").create("cic");
+ private static final Option OPTION_CONFIGURATION_PROPERTY = OptionBuilder.withArgName("name=value").hasArg()
+ .withDescription("set a configuration property to use when resolving variables in the broker configuration store, with format 'name=value'")
+ .withLongOpt("config-property").create("prop");
+
private static final Option OPTION_LOG_CONFIG_FILE =
OptionBuilder.withArgName("file").hasArg()
.withDescription("use the specified log4j xml configuration file. By "
@@ -103,6 +107,7 @@ public class Main
OPTIONS.addOption(OPTION_MM_CONNECTOR_PORT);
OPTIONS.addOption(OPTION_MM_HTTP_PORT);
OPTIONS.addOption(OPTION_MM_PASSWORD);
+ OPTIONS.addOption(OPTION_CONFIGURATION_PROPERTY);
}
protected CommandLine _commandLine;
@@ -210,6 +215,28 @@ public class Main
}
else
{
+ String[] configPropPairs = _commandLine.getOptionValues(OPTION_CONFIGURATION_PROPERTY.getOpt());
+ if(configPropPairs != null && configPropPairs.length > 0)
+ {
+ for(String s : configPropPairs)
+ {
+ int firstEquals = s.indexOf("=");
+ if(firstEquals == -1)
+ {
+ throw new IllegalArgumentException("Configuration property argument is not of the format name=value: " + s);
+ }
+ String name = s.substring(0, firstEquals);
+ String value = s.substring(firstEquals + 1);
+
+ if(name.equals(""))
+ {
+ throw new IllegalArgumentException("Configuration property argument is not of the format name=value: " + s);
+ }
+
+ options.setConfigProperty(name, value);
+ }
+ }
+
String configurationStore = _commandLine.getOptionValue(OPTION_CONFIGURATION_STORE_PATH.getOpt());
if (configurationStore != null)
{
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 8ce74ff334..999602bc2d 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
@@ -61,17 +61,18 @@ public class BrokerConfigurationStoreCreator
* @param storeType store type
* @param initialConfigLocation initial store location
* @param overwrite whether to overwrite an existing configuration store with the initial configuration
+ * @param configProperties a map of configuration properties the store can use to resolve configuration variables
* @throws IllegalConfigurationException if store type is unknown
*/
- public ConfigurationEntryStore createStore(String storeLocation, String storeType, String initialConfigLocation, boolean overwrite)
+ public ConfigurationEntryStore createStore(String storeLocation, String storeType, String initialConfigLocation, boolean overwrite, Map<String, String> configProperties)
{
- ConfigurationEntryStore initialStore = new MemoryConfigurationEntryStore(initialConfigLocation, null);
+ ConfigurationEntryStore initialStore = new MemoryConfigurationEntryStore(initialConfigLocation, null, configProperties);
ConfigurationStoreFactory factory = _factories.get(storeType.toLowerCase());
if (factory == null)
{
throw new IllegalConfigurationException("Unknown store type: " + storeType);
}
- return factory.createStore(storeLocation, initialStore, overwrite);
+ return factory.createStore(storeLocation, initialStore, overwrite, configProperties);
}
public Collection<String> getStoreTypes()
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 5f7e68b62a..cec75e5015 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
@@ -1,6 +1,7 @@
package org.apache.qpid.server.configuration.store;
import java.io.File;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@@ -15,14 +16,9 @@ public class JsonConfigurationEntryStore extends MemoryConfigurationEntryStore
private File _storeFile;
- public JsonConfigurationEntryStore(String storeLocation, ConfigurationEntryStore initialStore)
+ public JsonConfigurationEntryStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite, Map<String, String> configProperties)
{
- this(storeLocation, initialStore, false);
- }
-
- public JsonConfigurationEntryStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite)
- {
- super();
+ super(configProperties);
_storeFile = new File(storeLocation);
if(_storeFile.isDirectory())
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java
index 6ee26c0726..24e0e3bbff 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java
@@ -48,6 +48,7 @@ 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.Strings;
+import org.apache.qpid.util.Strings.ChainedResolver;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParser;
@@ -77,18 +78,22 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore
private boolean _generatedObjectIdDuringLoad;
- protected MemoryConfigurationEntryStore()
+ private ChainedResolver _resolver;
+
+ protected MemoryConfigurationEntryStore(Map<String, String> configProperties)
{
_objectMapper = new ObjectMapper();
_objectMapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
_objectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
_entries = new HashMap<UUID, ConfigurationEntry>();
_relationshipClasses = buildRelationshipClassMap();
+ _resolver = new Strings.ChainedResolver(Strings.SYSTEM_RESOLVER,
+ new Strings.MapResolver(configProperties));
}
- MemoryConfigurationEntryStore(String json)
+ MemoryConfigurationEntryStore(String json, Map<String, String> configProperties)
{
- this();
+ this(configProperties);
if (json == null || "".equals(json))
{
createRootEntry();
@@ -99,9 +104,9 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore
}
}
- public MemoryConfigurationEntryStore(String initialStoreLocation, ConfigurationEntryStore initialStore)
+ public MemoryConfigurationEntryStore(String initialStoreLocation, ConfigurationEntryStore initialStore, Map<String, String> configProperties)
{
- this();
+ this(configProperties);
if (initialStore == null && (initialStoreLocation == null || "".equals(initialStoreLocation) ))
{
throw new IllegalConfigurationException("Cannot instantiate the memory broker store as neither initial store nor initial store location is provided");
@@ -609,7 +614,7 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore
}
else
{
- return Strings.expand(node.asText());
+ return Strings.expand(node.asText(), _resolver);
}
}
else if (node.isArray())
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/JsonConfigurationStoreFactory.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/JsonConfigurationStoreFactory.java
index 7c7d3e2071..d4e0a23b1b 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/JsonConfigurationStoreFactory.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/JsonConfigurationStoreFactory.java
@@ -20,6 +20,8 @@
*/
package org.apache.qpid.server.configuration.store.factory;
+import java.util.Map;
+
import org.apache.qpid.server.configuration.ConfigurationEntryStore;
import org.apache.qpid.server.configuration.store.JsonConfigurationEntryStore;
import org.apache.qpid.server.plugin.ConfigurationStoreFactory;
@@ -27,9 +29,9 @@ import org.apache.qpid.server.plugin.ConfigurationStoreFactory;
public class JsonConfigurationStoreFactory implements ConfigurationStoreFactory
{
@Override
- public ConfigurationEntryStore createStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite)
+ public ConfigurationEntryStore createStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite, Map<String, String> configProperties)
{
- return new JsonConfigurationEntryStore(storeLocation, initialStore, overwrite);
+ return new JsonConfigurationEntryStore(storeLocation, initialStore, overwrite, configProperties);
}
@Override
@@ -37,5 +39,4 @@ public class JsonConfigurationStoreFactory implements ConfigurationStoreFactory
{
return JsonConfigurationEntryStore.STORE_TYPE;
}
-
}
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/MemoryConfigurationStoreFactory.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/MemoryConfigurationStoreFactory.java
index ed952ff475..fd52b2c93e 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/MemoryConfigurationStoreFactory.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/factory/MemoryConfigurationStoreFactory.java
@@ -20,6 +20,8 @@
*/
package org.apache.qpid.server.configuration.store.factory;
+import java.util.Map;
+
import org.apache.qpid.server.configuration.ConfigurationEntryStore;
import org.apache.qpid.server.configuration.store.MemoryConfigurationEntryStore;
import org.apache.qpid.server.plugin.ConfigurationStoreFactory;
@@ -27,9 +29,9 @@ import org.apache.qpid.server.plugin.ConfigurationStoreFactory;
public class MemoryConfigurationStoreFactory implements ConfigurationStoreFactory
{
@Override
- public ConfigurationEntryStore createStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite)
+ public ConfigurationEntryStore createStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite, Map<String, String> configProperties)
{
- return new MemoryConfigurationEntryStore(null, initialStore);
+ return new MemoryConfigurationEntryStore(null, initialStore, configProperties);
}
@Override
@@ -37,5 +39,4 @@ public class MemoryConfigurationStoreFactory implements ConfigurationStoreFacto
{
return MemoryConfigurationEntryStore.STORE_TYPE;
}
-
}
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/ConfigurationStoreFactory.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/ConfigurationStoreFactory.java
index c451ae2adc..d964578cb7 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/ConfigurationStoreFactory.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/ConfigurationStoreFactory.java
@@ -20,6 +20,8 @@
*/
package org.apache.qpid.server.plugin;
+import java.util.Map;
+
import org.apache.qpid.server.configuration.ConfigurationEntryStore;
import org.apache.qpid.server.configuration.IllegalConfigurationException;
@@ -39,7 +41,8 @@ public interface ConfigurationStoreFactory
* @param storeLocation store location
* @param initialStore initial store
* @param overwrite overwrite existing store with initial store
+ * @param configProperties a map of configuration properties the store can use to resolve configuration variables
* @throws IllegalConfigurationException if store cannot be opened in the given location
*/
- public ConfigurationEntryStore createStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite);
+ public ConfigurationEntryStore createStore(String storeLocation, ConfigurationEntryStore initialStore, boolean overwrite, Map<String, String> configProperties);
}
diff --git a/qpid/java/broker/src/main/resources/initial-config.json b/qpid/java/broker/src/main/resources/initial-config.json
index f8b724d351..e510c34178 100644
--- a/qpid/java/broker/src/main/resources/initial-config.json
+++ b/qpid/java/broker/src/main/resources/initial-config.json
@@ -29,20 +29,20 @@
} ],
"ports" : [ {
"name" : "AMQP",
- "port" : 5672,
+ "port" : "${qpid.amqp_port}",
"authenticationProvider" : "passwordFile"
}, {
"name" : "HTTP",
- "port" : 8080,
+ "port" : "${qpid.http_port}",
"authenticationProvider" : "passwordFile",
"protocols" : [ "HTTP" ]
}, {
"name" : "RMI_REGISTRY",
- "port" : 8999,
+ "port" : "${qpid.rmi_port}",
"protocols" : [ "RMI" ]
}, {
"name" : "JMX_CONNECTOR",
- "port" : 9099,
+ "port" : "${qpid.jmx_port}",
"authenticationProvider" : "passwordFile",
"protocols" : [ "JMX_RMI" ]
}],
diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/BrokerOptionsTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/BrokerOptionsTest.java
index 08031c36a4..4b7c99baf1 100644
--- a/qpid/java/broker/src/test/java/org/apache/qpid/server/BrokerOptionsTest.java
+++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/BrokerOptionsTest.java
@@ -21,6 +21,7 @@
package org.apache.qpid.server;
import java.io.File;
+import java.util.Map;
import org.apache.qpid.test.utils.QpidTestCase;
@@ -226,4 +227,47 @@ public class BrokerOptionsTest extends QpidTestCase
_options.setManagementModePassword("test");
assertEquals("Unexpected management mode password", "test", _options.getManagementModePassword());
}
+
+ public void testGetDefaultConfigProperties()
+ {
+ Map<String,String> props = _options.getConfigProperties();
+
+ assertEquals("unexpected number of entries", 4, props.keySet().size());
+
+ assertEquals(BrokerOptions.DEFAULT_AMQP_PORT_NUMBER, props.get(BrokerOptions.QPID_AMQP_PORT));
+ assertEquals(BrokerOptions.DEFAULT_HTTP_PORT_NUMBER, props.get(BrokerOptions.QPID_HTTP_PORT));
+ assertEquals(BrokerOptions.DEFAULT_RMI_PORT_NUMBER, props.get(BrokerOptions.QPID_RMI_PORT));
+ assertEquals(BrokerOptions.DEFAULT_JMX_PORT_NUMBER, props.get(BrokerOptions.QPID_JMX_PORT));
+ }
+
+ public void testSetDefaultConfigProperties()
+ {
+ String oldPort = BrokerOptions.DEFAULT_AMQP_PORT_NUMBER;
+ String newPort = "12345";
+
+ _options.setConfigProperty(BrokerOptions.QPID_AMQP_PORT, newPort);
+ Map<String,String> props = _options.getConfigProperties();
+ assertEquals("unexpected number of entries", 4, props.keySet().size());
+ assertEquals(newPort, props.get(BrokerOptions.QPID_AMQP_PORT));
+ assertEquals(BrokerOptions.DEFAULT_HTTP_PORT_NUMBER, props.get(BrokerOptions.QPID_HTTP_PORT));
+ assertEquals(BrokerOptions.DEFAULT_RMI_PORT_NUMBER, props.get(BrokerOptions.QPID_RMI_PORT));
+ assertEquals(BrokerOptions.DEFAULT_JMX_PORT_NUMBER, props.get(BrokerOptions.QPID_JMX_PORT));
+
+ _options.setConfigProperty(BrokerOptions.QPID_AMQP_PORT, null);
+ props = _options.getConfigProperties();
+ assertEquals("unexpected number of entries", 4, props.keySet().size());
+ assertEquals(oldPort, props.get(BrokerOptions.QPID_AMQP_PORT));
+ assertEquals(BrokerOptions.DEFAULT_HTTP_PORT_NUMBER, props.get(BrokerOptions.QPID_HTTP_PORT));
+ assertEquals(BrokerOptions.DEFAULT_RMI_PORT_NUMBER, props.get(BrokerOptions.QPID_RMI_PORT));
+ assertEquals(BrokerOptions.DEFAULT_JMX_PORT_NUMBER, props.get(BrokerOptions.QPID_JMX_PORT));
+
+ _options.setConfigProperty("name", "value");
+ props = _options.getConfigProperties();
+ assertEquals("unexpected number of entries", 5, props.keySet().size());
+ assertEquals(oldPort, props.get(BrokerOptions.QPID_AMQP_PORT));
+ assertEquals(BrokerOptions.DEFAULT_HTTP_PORT_NUMBER, props.get(BrokerOptions.QPID_HTTP_PORT));
+ assertEquals(BrokerOptions.DEFAULT_RMI_PORT_NUMBER, props.get(BrokerOptions.QPID_RMI_PORT));
+ assertEquals(BrokerOptions.DEFAULT_JMX_PORT_NUMBER, props.get(BrokerOptions.QPID_JMX_PORT));
+ assertEquals("value", props.get("name"));
+ }
}
diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/MainTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/MainTest.java
index d7579e2b2a..7e451fca86 100644
--- a/qpid/java/broker/src/test/java/org/apache/qpid/server/MainTest.java
+++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/MainTest.java
@@ -21,6 +21,7 @@
package org.apache.qpid.server;
import java.io.File;
+import java.util.Map;
import org.apache.commons.cli.CommandLine;
import org.apache.qpid.server.configuration.BrokerProperties;
@@ -33,6 +34,8 @@ import org.apache.qpid.test.utils.QpidTestCase;
*/
public class MainTest extends QpidTestCase
{
+ private Exception _startupException;
+
public void testNoOptionsSpecified()
{
BrokerOptions options = startDummyMain("");
@@ -193,6 +196,40 @@ public class MainTest extends QpidTestCase
assertNotNull(options.getManagementModePassword());
}
+ public void testSetConfigProperties()
+ {
+ //short name
+ String newPort = "12345";
+ BrokerOptions options = startDummyMain("-prop name=value -prop " + BrokerOptions.QPID_AMQP_PORT + "=" + newPort);
+
+ Map<String, String> props = options.getConfigProperties();
+
+ assertEquals(newPort, props.get(BrokerOptions.QPID_AMQP_PORT));
+ assertEquals("value", props.get("name"));
+
+ //long name
+ newPort = "678910";
+ options = startDummyMain("--config-property name2=value2 --config-property " + BrokerOptions.QPID_AMQP_PORT + "=" + newPort);
+
+ props = options.getConfigProperties();
+
+ assertEquals(newPort, props.get(BrokerOptions.QPID_AMQP_PORT));
+ assertEquals("value2", props.get("name2"));
+ }
+
+ public void testSetConfigPropertiesInvalidFormat()
+ {
+ //missing equals
+ startDummyMain("-prop namevalue");
+ assertTrue("expected exception did not occur",
+ _startupException instanceof IllegalArgumentException);
+
+ //no name specified
+ startDummyMain("-prop =value");
+ assertTrue("expected exception did not occur",
+ _startupException instanceof IllegalArgumentException);
+ }
+
private BrokerOptions startDummyMain(String commandLine)
{
return (new TestMain(commandLine.split("\\s"))).getOptions();
@@ -208,6 +245,19 @@ public class MainTest extends QpidTestCase
}
@Override
+ protected void execute()
+ {
+ try
+ {
+ super.execute();
+ }
+ catch(Exception re)
+ {
+ MainTest.this._startupException = re;
+ }
+ }
+
+ @Override
protected void startBroker(BrokerOptions options)
{
_options = options;
diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreatorTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreatorTest.java
index 7555a5632c..8fc7d99246 100644
--- a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreatorTest.java
+++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/BrokerConfigurationStoreCreatorTest.java
@@ -22,6 +22,7 @@ package org.apache.qpid.server.configuration;
import java.io.File;
import java.io.StringWriter;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@@ -73,11 +74,11 @@ public class BrokerConfigurationStoreCreatorTest extends QpidTestCase
public void testCreateJsonStore()
{
- ConfigurationEntryStore store = _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "json", BrokerOptions.DEFAULT_INITIAL_CONFIG_LOCATION, false);
+ ConfigurationEntryStore store = _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "json", BrokerOptions.DEFAULT_INITIAL_CONFIG_LOCATION, false, new BrokerOptions().getConfigProperties());
assertNotNull("Store was not created", store);
assertTrue("File should exists", _userStoreLocation.exists());
assertTrue("File size should be greater than 0", _userStoreLocation.length() > 0);
- JsonConfigurationEntryStore jsonStore = new JsonConfigurationEntryStore(_userStoreLocation.getAbsolutePath(), null);
+ JsonConfigurationEntryStore jsonStore = new JsonConfigurationEntryStore(_userStoreLocation.getAbsolutePath(), null, false, Collections.<String,String>emptyMap());
Set<UUID> childrenIds = jsonStore.getRootEntry().getChildrenIds();
assertFalse("Unexpected children: " + childrenIds, childrenIds.isEmpty());
}
@@ -112,11 +113,11 @@ public class BrokerConfigurationStoreCreatorTest extends QpidTestCase
File _initialStoreFile = TestFileUtils.createTempFile(this, ".json", brokerJson);
- ConfigurationEntryStore store = _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "json", _initialStoreFile.getAbsolutePath(), false);
+ ConfigurationEntryStore store = _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "json", _initialStoreFile.getAbsolutePath(), false, Collections.<String,String>emptyMap());
assertNotNull("Store was not created", store);
assertTrue("File should exists", _userStoreLocation.exists());
assertTrue("File size should be greater than 0", _userStoreLocation.length() > 0);
- JsonConfigurationEntryStore jsonStore = new JsonConfigurationEntryStore(_userStoreLocation.getAbsolutePath(), null);
+ JsonConfigurationEntryStore jsonStore = new JsonConfigurationEntryStore(_userStoreLocation.getAbsolutePath(), null, false, Collections.<String,String>emptyMap());
ConfigurationEntry entry = jsonStore.getRootEntry();
assertEquals("Unexpected root id", testBrokerId, entry.getId());
Map<String, Object> attributes = entry.getAttributes();
@@ -128,13 +129,13 @@ public class BrokerConfigurationStoreCreatorTest extends QpidTestCase
if(overwrite)
{
- ConfigurationEntryStore overwrittenStore = _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "json", BrokerOptions.DEFAULT_INITIAL_CONFIG_LOCATION, true);
+ ConfigurationEntryStore overwrittenStore = _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "json", BrokerOptions.DEFAULT_INITIAL_CONFIG_LOCATION, true, new BrokerOptions().getConfigProperties());
assertNotNull("Store was not created", overwrittenStore);
assertTrue("File should exists", _userStoreLocation.exists());
assertTrue("File size should be greater than 0", _userStoreLocation.length() > 0);
//check the contents reflect the test store content having been overwritten with the default store
- JsonConfigurationEntryStore reopenedOverwrittenStore = new JsonConfigurationEntryStore(_userStoreLocation.getAbsolutePath(), null, false);
+ JsonConfigurationEntryStore reopenedOverwrittenStore = new JsonConfigurationEntryStore(_userStoreLocation.getAbsolutePath(), null, false, Collections.<String,String>emptyMap());
entry = reopenedOverwrittenStore.getRootEntry();
assertFalse("Root id did not change, store content was not overwritten", testBrokerId.equals(entry.getId()));
attributes = entry.getAttributes();
@@ -150,7 +151,7 @@ public class BrokerConfigurationStoreCreatorTest extends QpidTestCase
{
try
{
- _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "derby", null, false);
+ _storeCreator.createStore(_userStoreLocation.getAbsolutePath(), "other", null, false, Collections.<String,String>emptyMap());
fail("Store is not yet supported");
}
catch(IllegalConfigurationException e)
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 b30508ee0b..9ee93a345f 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
@@ -42,7 +42,7 @@ public class JsonConfigurationEntryStoreTest extends ConfigurationEntryStoreTest
protected ConfigurationEntryStore createStore(UUID brokerId, Map<String, Object> brokerAttributes) throws Exception
{
_storeFile = createStoreFile(brokerId, brokerAttributes);
- JsonConfigurationEntryStore store = new JsonConfigurationEntryStore(_storeFile.getAbsolutePath(), null);
+ JsonConfigurationEntryStore store = new JsonConfigurationEntryStore(_storeFile.getAbsolutePath(), null, false, Collections.<String,String>emptyMap());
return store;
}
@@ -83,7 +83,7 @@ public class JsonConfigurationEntryStoreTest extends ConfigurationEntryStoreTest
attributes, brokerConfigEntry.getChildrenIds(), store);
store.save(updatedBrokerEntry);
- JsonConfigurationEntryStore store2 = new JsonConfigurationEntryStore(_storeFile.getAbsolutePath(), null);
+ JsonConfigurationEntryStore store2 = new JsonConfigurationEntryStore(_storeFile.getAbsolutePath(), null, false, Collections.<String,String>emptyMap());
assertEquals("Unresolved default virtualhost value", defaultVhost, store2.getRootEntry().getAttributes().get(Broker.DEFAULT_VIRTUAL_HOST));
}
@@ -93,7 +93,7 @@ public class JsonConfigurationEntryStoreTest extends ConfigurationEntryStoreTest
File file = TestFileUtils.createTempFile(this, ".json");
try
{
- new JsonConfigurationEntryStore(file.getAbsolutePath(), null);
+ new JsonConfigurationEntryStore(file.getAbsolutePath(), null, false, Collections.<String,String>emptyMap());
fail("Cannot create a new store without initial store");
}
catch(IllegalConfigurationException e)
@@ -109,7 +109,7 @@ public class JsonConfigurationEntryStoreTest extends ConfigurationEntryStoreTest
brokerAttributes.put(Broker.NAME, getTestName());
File file = createStoreFile(brokerId, brokerAttributes);
- JsonConfigurationEntryStore store = new JsonConfigurationEntryStore(file.getAbsolutePath(), null);
+ JsonConfigurationEntryStore store = new JsonConfigurationEntryStore(file.getAbsolutePath(), null, false, Collections.<String,String>emptyMap());
ConfigurationEntry root = store.getRootEntry();
assertNotNull("Root entry is not found", root);
assertEquals("Unexpected root entry", brokerId, root.getId());
@@ -127,10 +127,10 @@ public class JsonConfigurationEntryStoreTest extends ConfigurationEntryStoreTest
brokerAttributes.put(Broker.NAME, getTestName());
File initialStoreFile = createStoreFile(brokerId, brokerAttributes);
- JsonConfigurationEntryStore initialStore = new JsonConfigurationEntryStore(initialStoreFile.getAbsolutePath(), null);
+ JsonConfigurationEntryStore initialStore = new JsonConfigurationEntryStore(initialStoreFile.getAbsolutePath(), null, false, Collections.<String,String>emptyMap());
File storeFile = TestFileUtils.createTempFile(this, ".json");
- JsonConfigurationEntryStore store = new JsonConfigurationEntryStore(storeFile.getAbsolutePath(), initialStore);
+ JsonConfigurationEntryStore store = new JsonConfigurationEntryStore(storeFile.getAbsolutePath(), initialStore, false, Collections.<String,String>emptyMap());
ConfigurationEntry root = store.getRootEntry();
assertNotNull("Root entry is not found", root);
diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStoreTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStoreTest.java
index 314e673c08..1ed8433034 100644
--- a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStoreTest.java
+++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStoreTest.java
@@ -24,7 +24,7 @@ public class MemoryConfigurationEntryStoreTest extends ConfigurationEntryStoreTe
broker.putAll(brokerAttributes);
ObjectMapper mapper = new ObjectMapper();
- return new MemoryConfigurationEntryStore(mapper.writeValueAsString(broker));
+ return new MemoryConfigurationEntryStore(mapper.writeValueAsString(broker), Collections.<String,String>emptyMap());
}
@Override
@@ -38,7 +38,7 @@ public class MemoryConfigurationEntryStoreTest extends ConfigurationEntryStoreTe
{
try
{
- new MemoryConfigurationEntryStore(null, null);
+ new MemoryConfigurationEntryStore(null, null, Collections.<String,String>emptyMap());
fail("Cannot create a memory store without either initial store or path to an initial store file");
}
catch(IllegalConfigurationException e)
@@ -49,7 +49,7 @@ public class MemoryConfigurationEntryStoreTest extends ConfigurationEntryStoreTe
public void testCreateWithNullJson()
{
- MemoryConfigurationEntryStore store = new MemoryConfigurationEntryStore(null);
+ MemoryConfigurationEntryStore store = new MemoryConfigurationEntryStore(null, Collections.<String,String>emptyMap());
ConfigurationEntry root = store.getRootEntry();
assertNotNull("Root entry is not found", root);
@@ -61,7 +61,7 @@ public class MemoryConfigurationEntryStoreTest extends ConfigurationEntryStoreTe
Map<String, Object> brokerAttributes = new HashMap<String, Object>();
brokerAttributes.put(Broker.NAME, getTestName());
MemoryConfigurationEntryStore initialStoreFile = (MemoryConfigurationEntryStore)createStore(brokerId, brokerAttributes);
- MemoryConfigurationEntryStore store = new MemoryConfigurationEntryStore(null, initialStoreFile);
+ MemoryConfigurationEntryStore store = new MemoryConfigurationEntryStore(null, initialStoreFile, Collections.<String,String>emptyMap());
ConfigurationEntry root = store.getRootEntry();
assertNotNull("Root entry is not found", root);
@@ -82,11 +82,11 @@ public class MemoryConfigurationEntryStoreTest extends ConfigurationEntryStoreTe
setTestSystemProperty("QPID_HOME", TMP_FOLDER);
setTestSystemProperty("QPID_WORK", TMP_FOLDER + File.separator + "work");
}
- MemoryConfigurationEntryStore initialStore = new MemoryConfigurationEntryStore(BrokerOptions.DEFAULT_INITIAL_CONFIG_LOCATION, null);
+ MemoryConfigurationEntryStore initialStore = new MemoryConfigurationEntryStore(BrokerOptions.DEFAULT_INITIAL_CONFIG_LOCATION, null, new BrokerOptions().getConfigProperties());
ConfigurationEntry initialStoreRoot = initialStore.getRootEntry();
assertNotNull("Initial store root entry is not found", initialStoreRoot);
- MemoryConfigurationEntryStore store = new MemoryConfigurationEntryStore(null, initialStore);
+ MemoryConfigurationEntryStore store = new MemoryConfigurationEntryStore(null, initialStore, Collections.<String,String>emptyMap());
ConfigurationEntry root = store.getRootEntry();
assertNotNull("Root entry is not found", root);
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/TestBrokerConfiguration.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/TestBrokerConfiguration.java
index a91c9bb752..9cb1e6dfcb 100644
--- a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/TestBrokerConfiguration.java
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/TestBrokerConfiguration.java
@@ -70,7 +70,7 @@ public class TestBrokerConfiguration
public TestBrokerConfiguration(String storeType, String intialStoreLocation)
{
- _store = new MemoryConfigurationEntryStore(intialStoreLocation, null);
+ _store = new MemoryConfigurationEntryStore(intialStoreLocation, null, Collections.<String,String>emptyMap());
}
public boolean setBrokerAttribute(String name, Object value)