summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAidan Skinner <aidan@apache.org>2009-04-23 16:07:43 +0000
committerAidan Skinner <aidan@apache.org>2009-04-23 16:07:43 +0000
commit9a8b1019f111c597ceebdc1f40d4d92bdaa284c9 (patch)
tree3bc5bbbf6f3de3c781fabe11dc5f1955930af89c
parentb40f766f9cb0345fe1b2a9b0cadec11eeb647e58 (diff)
downloadqpid-python-9a8b1019f111c597ceebdc1f40d4d92bdaa284c9.tar.gz
QPID-1826: Ensure that server-wide configuration variables in virtualhosts.xml are honored. Add sample-flattened parse tree from M4 and test to ensure that values are parsed appropriately.
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.5-release@767952 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/broker/etc/persistent_config-config-test.xml93
-rw-r--r--qpid/java/broker/etc/sample-parsed-config.xml76
-rw-r--r--qpid/java/broker/etc/virtualhosts-config-test.xml40
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java125
-rw-r--r--qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java18
5 files changed, 298 insertions, 54 deletions
diff --git a/qpid/java/broker/etc/persistent_config-config-test.xml b/qpid/java/broker/etc/persistent_config-config-test.xml
new file mode 100644
index 0000000000..258f54397d
--- /dev/null
+++ b/qpid/java/broker/etc/persistent_config-config-test.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ -
+ - Licensed to the Apache Software Foundation (ASF) under one
+ - or more contributor license agreements. See the NOTICE file
+ - distributed with this work for additional information
+ - regarding copyright ownership. The ASF licenses this file
+ - to you under the Apache License, Version 2.0 (the
+ - "License"); you may not use this file except in compliance
+ - with the License. You may obtain a copy of the License at
+ -
+ - http://www.apache.org/licenses/LICENSE-2.0
+ -
+ - Unless required by applicable law or agreed to in writing,
+ - software distributed under the License is distributed on an
+ - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ - KIND, either express or implied. See the License for the
+ - specific language governing permissions and limitations
+ - under the License.
+ -
+
+ This is an example config using the BDBMessageStore available from
+ the Red Hat Messaging project at etp.108.redhat.com and distributed under GPL.
+ -->
+
+<broker>
+ <work>${QPID_WORK}</work>
+ <conf>${QPID_HOME}/etc</conf>
+ <passwordDir>${conf}</passwordDir>
+ <connector>
+ <transport>nio</transport>
+ <port>5672</port>
+ <socketReceiveBuffer>32768</socketReceiveBuffer>
+ <socketSendBuffer>32768</socketSendBuffer>
+ </connector>
+ <management>
+ <enabled>false</enabled>
+ <jmxport>8999</jmxport>
+ </management>
+ <advanced>
+ <filterchain enableExecutorPool="true"/>
+ <enablePooledAllocator>false</enablePooledAllocator>
+ <enableDirectBuffers>false</enableDirectBuffers>
+ <framesize>65535</framesize>
+ <compressBufferOnQueue>false</compressBufferOnQueue>
+ </advanced>
+
+ <security>
+ <principal-databases>
+ <principal-database>
+ <name>passwordfile</name>
+ <class>org.apache.qpid.server.security.auth.database.PlainPasswordFilePrincipalDatabase</class>
+ <attributes>
+ <attribute>
+ <name>passwordFile</name>
+ <value>${passwordDir}/passwd</value>
+ </attribute>
+ </attributes>
+ </principal-database>
+ </principal-databases>
+
+ <access>
+ <class>org.apache.qpid.server.security.access.plugins.AllowAll</class>
+ </access>
+ <jmx>
+ <access>${passwordDir}/jmxremote.access</access>
+ <principal-database>passwordfile</principal-database>
+ </jmx>
+ </security>
+
+ <virtualhosts>
+ <virtualhost>
+ <name>dev-only</name>
+ <dev-only>
+ <store>
+ <class>org.apache.qpid.server.store.MemoryMessageStore</class>
+ <environment-path>${work}/bdbstore/dev-only-store</environment-path>
+ </store>
+ </dev-only>
+ </virtualhost>
+ </virtualhosts>
+ <heartbeat>
+ <delay>0</delay>
+ <timeoutFactor>2.0</timeoutFactor>
+ </heartbeat>
+ <queue>
+ <auto_register>true</auto_register>
+ </queue>
+
+ <virtualhosts>${conf}/virtualhosts-config-test.xml</virtualhosts>
+</broker>
+
+
diff --git a/qpid/java/broker/etc/sample-parsed-config.xml b/qpid/java/broker/etc/sample-parsed-config.xml
new file mode 100644
index 0000000000..6c4366a84a
--- /dev/null
+++ b/qpid/java/broker/etc/sample-parsed-config.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+<work>${QPID_WORK}</work>
+<conf>${QPID_HOME}/etc</conf>
+<passwordDir>${conf}</passwordDir>
+<connector>
+<transport>nio</transport>
+<port>5672</port>
+<socketReceiveBuffer>32768</socketReceiveBuffer>
+<socketSendBuffer>32768</socketSendBuffer>
+</connector>
+<management>
+<enabled>false</enabled>
+<jmxport>8999</jmxport>
+</management>
+<advanced>
+<filterchain enableExecutorPool="true"/>
+<enablePooledAllocator>false</enablePooledAllocator>
+<enableDirectBuffers>false</enableDirectBuffers>
+<framesize>65535</framesize>
+<compressBufferOnQueue>false</compressBufferOnQueue>
+</advanced>
+<security>
+<principal-databases>
+<principal-database>
+<name>passwordfile</name>
+<class>org.apache.qpid.server.security.auth.database.PlainPasswordFilePrincipalDatabase</class>
+<attributes>
+<attribute>
+<name>passwordFile</name>
+<value>${passwordDir}/passwd</value>
+</attribute>
+</attributes>
+</principal-database>
+</principal-databases>
+<access>
+<class>org.apache.qpid.server.security.access.plugins.AllowAll</class>
+</access>
+<jmx>
+<access>${passwordDir}/jmxremote.access</access>
+<principal-database>passwordfile</principal-database>
+</jmx>
+</security>
+<virtualhosts>${conf}/virtualhosts-config-test.xml<virtualhost>
+<name>dev-only</name>
+<dev-only>
+<store>
+<class>org.apache.qpid.server.store.MemoryMessageStore</class>
+<environment-path>${work}/bdbstore/dev-only-store</environment-path>
+</store>
+</dev-only>
+</virtualhost>
+</virtualhosts>
+<heartbeat>
+<delay>0</delay>
+<timeoutFactor>2.0</timeoutFactor>
+</heartbeat>
+<queue>
+<auto_register>true</auto_register>
+</queue>
+<default>dev-only</default>
+<virtualhost>
+<name>dev-only</name>
+<dev-only>
+<queues>
+<exchange>amq.direct</exchange>
+<maximumQueueDepth>102400</maximumQueueDepth>
+<maximumMessageSize>20480</maximumMessageSize>
+<maximumMessageAge>60000</maximumMessageAge>
+<queue>
+<name>dev-queue</name>
+</queue>
+</queues>
+</dev-only>
+</virtualhost>
+</configuration>
diff --git a/qpid/java/broker/etc/virtualhosts-config-test.xml b/qpid/java/broker/etc/virtualhosts-config-test.xml
new file mode 100644
index 0000000000..168aa074da
--- /dev/null
+++ b/qpid/java/broker/etc/virtualhosts-config-test.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ -
+ - Licensed to the Apache Software Foundation (ASF) under one
+ - or more contributor license agreements. See the NOTICE file
+ - distributed with this work for additional information
+ - regarding copyright ownership. The ASF licenses this file
+ - to you under the Apache License, Version 2.0 (the
+ - "License"); you may not use this file except in compliance
+ - with the License. You may obtain a copy of the License at
+ -
+ - http://www.apache.org/licenses/LICENSE-2.0
+ -
+ - Unless required by applicable law or agreed to in writing,
+ - software distributed under the License is distributed on an
+ - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ - KIND, either express or implied. See the License for the
+ - specific language governing permissions and limitations
+ - under the License.
+ -
+ -->
+<virtualhosts>
+ <default>dev-only</default>
+ <virtualhost>
+ <name>dev-only</name>
+ <dev-only>
+ <queues>
+ <exchange>amq.direct</exchange>
+ <!-- Small defaults for development -->
+ <maximumQueueDepth>102400</maximumQueueDepth> <!-- 100k -->
+ <maximumMessageSize>20480</maximumMessageSize> <!-- 20kb -->
+ <maximumMessageAge>60000</maximumMessageAge> <!-- 1 mins -->
+
+ <queue>
+ <name>dev-queue</name>
+ </queue>
+ </queues>
+ </dev-only>
+ </virtualhost>
+</virtualhosts>
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
index 24add696b3..9d7936f0c6 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
@@ -47,7 +47,7 @@ import sun.misc.SignalHandler;
public class ServerConfiguration implements SignalHandler
{
- private static Configuration _config;
+ private Configuration _config;
private static final int DEFAULT_FRAME_SIZE = 65536;
private static final int DEFAULT_BUFFER_READ_LIMIT_SIZE = 262144;
@@ -113,11 +113,11 @@ public class ServerConfiguration implements SignalHandler
public ServerConfiguration(Configuration conf) throws ConfigurationException
{
- _config = conf;
+ setConfig(conf);
substituteEnvironmentVariables();
- _jmxPort = _config.getInt("management.jmxport", 8999);
+ _jmxPort = getConfig().getInt("management.jmxport", 8999);
_securityConfiguration = new SecurityConfiguration(conf.subset("security"));
setupVirtualHosts(conf);
@@ -150,6 +150,13 @@ public class ServerConfiguration implements SignalHandler
VirtualHostConfiguration vhostConfig = new VirtualHostConfiguration(name, conf.subset("virtualhosts.virtualhost."+name));
_virtualHosts.put(vhostConfig.getName(), vhostConfig);
}
+ // Grab things other than the virtualhosts themselves
+ Iterator keys = vhostConfiguration.getKeys();
+ while (keys.hasNext())
+ {
+ String key = (String) keys.next();
+ conf.setProperty(key, vhostConfiguration.getProperty(key));
+ }
}
}
}
@@ -161,7 +168,7 @@ public class ServerConfiguration implements SignalHandler
String val = System.getenv(var.getKey());
if (val != null)
{
- _config.setProperty(var.getValue(), val);
+ getConfig().setProperty(var.getValue(), val);
}
}
}
@@ -246,6 +253,16 @@ public class ServerConfiguration implements SignalHandler
}
}
+ public void setConfig(Configuration _config)
+ {
+ this._config = _config;
+ }
+
+ public Configuration getConfig()
+ {
+ return _config;
+ }
+
public String getQpidWork()
{
return System.getProperty("QPID_WORK", System.getProperty("java.io.tmpdir"));
@@ -263,7 +280,7 @@ public class ServerConfiguration implements SignalHandler
public boolean getPlatformMbeanserver()
{
- return _config.getBoolean("management.platform-mbeanserver", true);
+ return getConfig().getBoolean("management.platform-mbeanserver", true);
}
public String[] getVirtualHosts()
@@ -273,7 +290,7 @@ public class ServerConfiguration implements SignalHandler
public String getPluginDirectory()
{
- return _config.getString("plugin-directory");
+ return getConfig().getString("plugin-directory");
}
public VirtualHostConfiguration getVirtualHostConfig(String name)
@@ -283,84 +300,84 @@ public class ServerConfiguration implements SignalHandler
public List<String> getPrincipalDatabaseNames()
{
- return _config.getList("security.principal-databases.principal-database.name");
+ return getConfig().getList("security.principal-databases.principal-database.name");
}
public List<String> getPrincipalDatabaseClass()
{
- return _config.getList("security.principal-databases.principal-database.class");
+ return getConfig().getList("security.principal-databases.principal-database.class");
}
public List<String> getPrincipalDatabaseAttributeNames(int index)
{
String name = "security.principal-databases.principal-database(" + index + ")." + "attributes.attribute.name";
- return _config.getList(name);
+ return getConfig().getList(name);
}
public List<String> getPrincipalDatabaseAttributeValues(int index)
{
String name = "security.principal-databases.principal-database(" + index + ")." + "attributes.attribute.value";
- return _config.getList(name);
+ return getConfig().getList(name);
}
public List<String> getManagementPrincipalDBs()
{
- return _config.getList("security.jmx.principal-database");
+ return getConfig().getList("security.jmx.principal-database");
}
public List<String> getManagementAccessList()
{
- return _config.getList("security.jmx.access");
+ return getConfig().getList("security.jmx.access");
}
public int getFrameSize()
{
- return _config.getInt("advanced.framesize", DEFAULT_FRAME_SIZE);
+ return getConfig().getInt("advanced.framesize", DEFAULT_FRAME_SIZE);
}
public boolean getProtectIOEnabled()
{
- return _config.getBoolean("broker.connector.protectio.enabled", false);
+ return getConfig().getBoolean("broker.connector.protectio.enabled", false);
}
public int getBufferReadLimit()
{
- return _config.getInt("broker.connector.protectio.readBufferLimitSize", DEFAULT_BUFFER_READ_LIMIT_SIZE);
+ return getConfig().getInt("broker.connector.protectio.readBufferLimitSize", DEFAULT_BUFFER_READ_LIMIT_SIZE);
}
public int getBufferWriteLimit()
{
- return _config.getInt("broker.connector.protectio.writeBufferLimitSize", DEFAULT_BUFFER_WRITE_LIMIT_SIZE);
+ return getConfig().getInt("broker.connector.protectio.writeBufferLimitSize", DEFAULT_BUFFER_WRITE_LIMIT_SIZE);
}
public boolean getSynchedClocks()
{
- return _config.getBoolean("advanced.synced-clocks", false);
+ return getConfig().getBoolean("advanced.synced-clocks", false);
}
public boolean getMsgAuth()
{
- return _config.getBoolean("security.msg-auth", false);
+ return getConfig().getBoolean("security.msg-auth", false);
}
public String getJMXPrincipalDatabase()
{
- return _config.getString("security.jmx.principal-database");
+ return getConfig().getString("security.jmx.principal-database");
}
public String getManagementKeyStorePath()
{
- return _config.getString("management.ssl.keyStorePath", null);
+ return getConfig().getString("management.ssl.keyStorePath", null);
}
public boolean getManagementSSLEnabled()
{
- return _config.getBoolean("management.ssl.enabled", true);
+ return getConfig().getBoolean("management.ssl.enabled", true);
}
public String getManagementKeyStorePassword()
{
- return _config.getString("management.ssl.keyStorePassword");
+ return getConfig().getString("management.ssl.keyStorePassword");
}
public SecurityConfiguration getSecurityConfiguration()
@@ -370,158 +387,158 @@ public class ServerConfiguration implements SignalHandler
public boolean getQueueAutoRegister()
{
- return _config.getBoolean("queue.auto_register", true);
+ return getConfig().getBoolean("queue.auto_register", true);
}
public boolean getManagementEnabled()
{
- return _config.getBoolean("management.enabled", true);
+ return getConfig().getBoolean("management.enabled", true);
}
public void setManagementEnabled(boolean enabled)
{
- _config.setProperty("management.enabled", enabled);
+ getConfig().setProperty("management.enabled", enabled);
}
public int getHeartBeatDelay()
{
- return _config.getInt("heartbeat.delay", 5);
+ return getConfig().getInt("heartbeat.delay", 5);
}
public double getHeartBeatTimeout()
{
- return _config.getDouble("heartbeat.timeoutFactor", 2.0);
+ return getConfig().getDouble("heartbeat.timeoutFactor", 2.0);
}
public int getDeliveryPoolSize()
{
- return _config.getInt("delivery.poolsize", 0);
+ return getConfig().getInt("delivery.poolsize", 0);
}
public long getMaximumMessageAge()
{
- return _config.getLong("maximumMessageAge", 0);
+ return getConfig().getLong("maximumMessageAge", 0);
}
public long getMaximumMessageCount()
{
- return _config.getLong("maximumMessageCount", 0);
+ return getConfig().getLong("maximumMessageCount", 0);
}
public long getMaximumQueueDepth()
{
- return _config.getLong("maximumQueueDepth", 0);
+ return getConfig().getLong("maximumQueueDepth", 0);
}
public long getMaximumMessageSize()
{
- return _config.getLong("maximumMessageSize", 0);
+ return getConfig().getLong("maximumMessageSize", 0);
}
public long getMinimumAlertRepeatGap()
{
- return _config.getLong("minimumAlertRepeatGap", 0);
+ return getConfig().getLong("minimumAlertRepeatGap", 0);
}
public int getProcessors()
{
- return _config.getInt("connector.processors", 4);
+ return getConfig().getInt("connector.processors", 4);
}
public int getPort()
{
- return _config.getInt("connector.port", DEFAULT_PORT);
+ return getConfig().getInt("connector.port", DEFAULT_PORT);
}
public String getBind()
{
- return _config.getString("connector.bind", "wildcard");
+ return getConfig().getString("connector.bind", "wildcard");
}
public int getReceiveBufferSize()
{
- return _config.getInt("connector.socketReceiveBuffer", 32767);
+ return getConfig().getInt("connector.socketReceiveBuffer", 32767);
}
public int getWriteBufferSize()
{
- return _config.getInt("connector.socketWriteBuffer", 32767);
+ return getConfig().getInt("connector.socketWriteBuffer", 32767);
}
public boolean getTcpNoDelay()
{
- return _config.getBoolean("connector.tcpNoDelay", true);
+ return getConfig().getBoolean("connector.tcpNoDelay", true);
}
public boolean getEnableExecutorPool()
{
- return _config.getBoolean("advanced.filterchain[@enableExecutorPool]", false);
+ return getConfig().getBoolean("advanced.filterchain[@enableExecutorPool]", false);
}
public boolean getEnablePooledAllocator()
{
- return _config.getBoolean("advanced.enablePooledAllocator", false);
+ return getConfig().getBoolean("advanced.enablePooledAllocator", false);
}
public boolean getEnableDirectBuffers()
{
- return _config.getBoolean("advanced.enableDirectBuffers", false);
+ return getConfig().getBoolean("advanced.enableDirectBuffers", false);
}
public boolean getEnableSSL()
{
- return _config.getBoolean("connector.ssl.enabled", false);
+ return getConfig().getBoolean("connector.ssl.enabled", false);
}
public boolean getSSLOnly()
{
- return _config.getBoolean("connector.ssl.sslOnly", true);
+ return getConfig().getBoolean("connector.ssl.sslOnly", true);
}
public int getSSLPort()
{
- return _config.getInt("connector.ssl.port", DEFAUL_SSL_PORT);
+ return getConfig().getInt("connector.ssl.port", DEFAUL_SSL_PORT);
}
public String getKeystorePath()
{
- return _config.getString("connector.ssl.keystorePath", "none");
+ return getConfig().getString("connector.ssl.keystorePath", "none");
}
public String getKeystorePassword()
{
- return _config.getString("connector.ssl.keystorePassword", "none");
+ return getConfig().getString("connector.ssl.keystorePassword", "none");
}
public String getCertType()
{
- return _config.getString("connector.ssl.certType", "SunX509");
+ return getConfig().getString("connector.ssl.certType", "SunX509");
}
public boolean getQpidNIO()
{
- return _config.getBoolean("connector.qpidnio", false);
+ return getConfig().getBoolean("connector.qpidnio", false);
}
public boolean getUseBiasedWrites()
{
- return _config.getBoolean("advanced.useWriteBiasedPool", false);
+ return getConfig().getBoolean("advanced.useWriteBiasedPool", false);
}
public String getDefaultVirtualHost()
{
- return _config.getString("virtualhosts.default");
+ return getConfig().getString("virtualhosts.default");
}
public void setHousekeepingExpiredMessageCheckPeriod(long value)
{
- _config.setProperty("housekeeping.expiredMessageCheckPeriod", value);
+ getConfig().setProperty("housekeeping.expiredMessageCheckPeriod", value);
}
public long getHousekeepingCheckPeriod()
{
- return _config.getLong("housekeeping.checkPeriod",
- _config.getLong("housekeeping.expiredMessageCheckPeriod",
+ return getConfig().getLong("housekeeping.checkPeriod",
+ getConfig().getLong("housekeeping.expiredMessageCheckPeriod",
DEFAULT_HOUSEKEEPING_PERIOD));
}
}
diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java
index 0152fc5122..fabd4ce923 100644
--- a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java
+++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java
@@ -24,8 +24,10 @@ import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;
+import java.util.Iterator;
import java.util.List;
+import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.SystemConfiguration;
@@ -924,4 +926,20 @@ public class ServerConfigurationTest extends TestCase
assertFalse(reg.getAccessManager().authoriseConnect(session, virtualHost));
}
+ public void testnewParserOutputVsOldParserOutput() throws ConfigurationException
+ {
+ String configDir = System.getProperty("QPID_HOME")+"/etc";
+
+ XMLConfiguration oldConfig = new XMLConfiguration(configDir +"/sample-parsed-config.xml");
+ Configuration newConfig = new ServerConfiguration(new File(configDir+"/persistent_config-config-test.xml")).getConfig();
+
+ Iterator xmlKeys = oldConfig.getKeys();
+ while (xmlKeys.hasNext())
+ {
+ String key = (String) xmlKeys.next();
+ assertEquals("Incorrect value for "+key, oldConfig.getProperty(key), newConfig.getProperty(key));
+ }
+ }
+
+
}