You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ai...@apache.org on 2009/04/23 18:05:34 UTC

svn commit: r767951 - in /qpid/trunk/qpid/java/broker: etc/ src/main/java/org/apache/qpid/server/configuration/ src/test/java/org/apache/qpid/server/configuration/

Author: aidan
Date: Thu Apr 23 16:05:34 2009
New Revision: 767951

URL: http://svn.apache.org/viewvc?rev=767951&view=rev
Log:
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.

Added:
    qpid/trunk/qpid/java/broker/etc/persistent_config-config-test.xml
    qpid/trunk/qpid/java/broker/etc/sample-parsed-config.xml
    qpid/trunk/qpid/java/broker/etc/virtualhosts-config-test.xml
Modified:
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
    qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java

Added: qpid/trunk/qpid/java/broker/etc/persistent_config-config-test.xml
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/etc/persistent_config-config-test.xml?rev=767951&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker/etc/persistent_config-config-test.xml (added)
+++ qpid/trunk/qpid/java/broker/etc/persistent_config-config-test.xml Thu Apr 23 16:05:34 2009
@@ -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>
+
+

Added: qpid/trunk/qpid/java/broker/etc/sample-parsed-config.xml
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/etc/sample-parsed-config.xml?rev=767951&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker/etc/sample-parsed-config.xml (added)
+++ qpid/trunk/qpid/java/broker/etc/sample-parsed-config.xml Thu Apr 23 16:05:34 2009
@@ -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>

Added: qpid/trunk/qpid/java/broker/etc/virtualhosts-config-test.xml
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/etc/virtualhosts-config-test.xml?rev=767951&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker/etc/virtualhosts-config-test.xml (added)
+++ qpid/trunk/qpid/java/broker/etc/virtualhosts-config-test.xml Thu Apr 23 16:05:34 2009
@@ -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>

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java?rev=767951&r1=767950&r2=767951&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java Thu Apr 23 16:05:34 2009
@@ -47,7 +47,7 @@
 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 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 @@
                     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 @@
             String val = System.getenv(var.getKey());
             if (val != null)
             {
-                _config.setProperty(var.getValue(), val); 
+                getConfig().setProperty(var.getValue(), val); 
             }
         }
     }
@@ -246,6 +253,16 @@
         }
     }
 
+    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 boolean getPlatformMbeanserver()
     {
-        return _config.getBoolean("management.platform-mbeanserver", true);
+        return getConfig().getBoolean("management.platform-mbeanserver", true);
     }
 
     public String[] getVirtualHosts()
@@ -273,7 +290,7 @@
 
     public String getPluginDirectory()
     {
-        return _config.getString("plugin-directory");
+        return getConfig().getString("plugin-directory");
     }
 
     public VirtualHostConfiguration getVirtualHostConfig(String name)
@@ -283,84 +300,84 @@
 
     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 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));
     }
 }

Modified: qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java?rev=767951&r1=767950&r2=767951&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java (original)
+++ qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java Thu Apr 23 16:05:34 2009
@@ -24,8 +24,10 @@
 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 @@
         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));
+        }
+    }
+    
+    
 }



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org