summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)