diff options
| author | Alex Rudyy <orudyy@apache.org> | 2014-03-12 13:19:29 +0000 |
|---|---|---|
| committer | Alex Rudyy <orudyy@apache.org> | 2014-03-12 13:19:29 +0000 |
| commit | f10abece85c408a2185afe8f3075f0ed82451aeb (patch) | |
| tree | b56a98d59e5786a39901a08f7fde53b7aa218541 /qpid/java/broker-core/src | |
| parent | a038ecc0c2da1fdd8cff38051bba3c8ffca4df1e (diff) | |
| download | qpid-python-f10abece85c408a2185afe8f3075f0ed82451aeb.tar.gz | |
QPID-5624: Remove virtualhost xml configuration. Move virtual host configuration into broker configuration store"
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/java-broker-bdb-ha2@1576732 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-core/src')
36 files changed, 365 insertions, 2728 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java deleted file mode 100644 index 8f77de56b8..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - * - * 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. - * - */ -package org.apache.qpid.server.configuration; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.Map; -import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.Configuration; -import org.apache.commons.configuration.ConfigurationException; - -import org.apache.qpid.exchange.ExchangeDefaults; -import org.apache.qpid.server.configuration.plugins.AbstractConfiguration; - -import java.util.List; - -public class QueueConfiguration extends AbstractConfiguration -{ - private String _name; - private VirtualHostConfiguration _vHostConfig; - - public QueueConfiguration(String name, VirtualHostConfiguration virtualHostConfiguration) throws ConfigurationException - { - _vHostConfig = virtualHostConfiguration; - _name = name; - - CompositeConfiguration mungedConf = new CompositeConfiguration(); - mungedConf.addConfiguration(_vHostConfig.getConfig().subset("queues.queue." + escapeTagName(name))); - - setConfiguration("virtualhosts.virtualhost.queues.queue", mungedConf); - } - - public String[] getElementsProcessed() - { - return new String[]{"maximumMessageSize", - "maximumQueueDepth", - "maximumMessageCount", - "maximumMessageAge", - "minimumAlertRepeatGap", - "durable", - "exchange", - "exclusive", - "queue", - "autodelete", - "priority", - "priorities", - "routingKey", - "capacity", - "flowResumeCapacity", - "lvq", - "lvqKey", - "sortKey", - "maximumDeliveryCount", - "deadLetterQueues", - "argument" - }; - } - - @Override - public void validateConfiguration() throws ConfigurationException - { - //Currently doesn't do validation - } - - public VirtualHostConfiguration getVirtualHostConfiguration() - { - return _vHostConfig; - } - - private boolean getDefaultedBoolean(String attribute) - { - final Configuration config = _vHostConfig.getConfig(); - if(config.containsKey("queues."+attribute)) - { - final boolean defaultValue = config.getBoolean("queues." + attribute); - return getBooleanValue(attribute, defaultValue); - } - else - { - return getBooleanValue(attribute); - } - } - - public boolean getDurable() - { - return getDefaultedBoolean("durable"); - } - - public boolean getExclusive() - { - return getDefaultedBoolean("exclusive"); - } - - public boolean getAutoDelete() - { - return getDefaultedBoolean("autodelete"); - } - - public String getOwner() - { - return getStringValue("owner", null); - } - - public boolean getPriority() - { - return getDefaultedBoolean("priority"); - } - - public int getPriorities() - { - final Configuration config = _vHostConfig.getConfig(); - - int defaultValue; - if(config.containsKey("queues.priorities")) - { - defaultValue = config.getInt("queues.priorities"); - } - else - { - defaultValue = -1; - } - return getIntValue("priorities", defaultValue); - } - - public String getExchange() - { - final Configuration config = _vHostConfig.getConfig(); - - String defaultValue; - - if(config.containsKey("queues.exchange")) - { - defaultValue = config.getString("queues.exchange"); - } - else - { - defaultValue = ""; - } - - return getStringValue("exchange", defaultValue); - } - - public List getRoutingKeys() - { - return getListValue("routingKey"); - } - - public String getName() - { - return _name; - } - - public String getDescription() - { - return getStringValue("description"); - } - - public int getMaximumMessageAge() - { - return getIntValue("maximumMessageAge"); - } - - public long getMaximumQueueDepth() - { - return getLongValue("maximumQueueDepth"); - } - - public long getMaximumMessageSize() - { - return getLongValue("maximumMessageSize"); - } - - public long getMaximumMessageCount() - { - return getLongValue("maximumMessageCount"); - } - - public long getMinimumAlertRepeatGap() - { - return getLongValue("minimumAlertRepeatGap"); - } - - public long getCapacity() - { - return getLongValue("capacity"); - } - - public long getFlowResumeCapacity() - { - return getLongValue("flowResumeCapacity"); - } - - public boolean isLVQ() - { - return getBooleanValue("lvq"); - } - - public String getLVQKey() - { - return getStringValue("lvqKey", null); - } - - public String getQueueSortKey() - { - return getStringValue("sortKey", null); - } - - public int getMaxDeliveryCount() - { - return getIntValue("maximumDeliveryCount", _vHostConfig.getMaxDeliveryCount()); - } - - /** - * Check if dead letter queue delivery is enabled, deferring to the virtualhost configuration if not set. - */ - public boolean isDeadLetterQueueEnabled() - { - return getBooleanValue("deadLetterQueues", _vHostConfig.isDeadLetterQueueEnabled()); - } - - public Map<String,String> getArguments() - { - return getMap("argument"); - } - - public Map<String,String> getBindingArguments(String routingKey) - { - - return getConfig().containsKey(routingKey+".bindingArgument") ? getMap(routingKey+".bindingArgument") : null; - } -} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java deleted file mode 100644 index 189f5916e0..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/VirtualHostConfiguration.java +++ /dev/null @@ -1,301 +0,0 @@ -/* - * - * 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. - * - */ -package org.apache.qpid.server.configuration; - -import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.Configuration; -import org.apache.commons.configuration.ConfigurationException; - -import org.apache.qpid.server.configuration.plugins.AbstractConfiguration; -import org.apache.qpid.server.model.Broker; - -import java.io.File; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -public class VirtualHostConfiguration extends AbstractConfiguration -{ - private final String _name; - private final Map<String, QueueConfiguration> _queues = new HashMap<String, QueueConfiguration>(); - private final Map<String, ExchangeConfiguration> _exchanges = new HashMap<String, ExchangeConfiguration>(); - private final Broker _broker; - private final long _defaultHouseKeepingCheckPeriod; - - public VirtualHostConfiguration(String name, Configuration config, Broker broker) throws ConfigurationException - { - _name = name; - _broker = broker; - - // store value of this attribute for running life of virtual host since updating of this value has no run-time effect - _defaultHouseKeepingCheckPeriod = ((Number)_broker.getAttribute(Broker.VIRTUALHOST_HOUSEKEEPING_CHECK_PERIOD)).longValue(); - setConfiguration(config); - } - - public VirtualHostConfiguration(String name, File configurationFile, Broker broker) throws ConfigurationException - { - this(name, loadConfiguration(name, configurationFile), broker); - } - - private static Configuration loadConfiguration(String name, File configurationFile) throws ConfigurationException - { - Configuration configuration = null; - if (configurationFile == null) - { - throw new IllegalConfigurationException("Virtualhost configuration file must be supplied!"); - } - else - { - Configuration virtualHostConfig = XmlConfigurationUtilities.parseConfig(configurationFile); - - // check for the element with the same name as virtual host - Configuration config = virtualHostConfig.subset("virtualhost." + XmlConfigurationUtilities.escapeTagName(name)); - if (config.isEmpty()) - { - throw new IllegalConfigurationException("No configuration found for virtual host '" + name + "' in " + configurationFile.getAbsolutePath()); - } - else - { - configuration = config; - } - } - return configuration; - } - - /** - * Apply the given configuration to this VirtualHostConfiguration - * - * @param config the config to apply - * @throws ConfigurationException if a problem occurs with configuration - */ - public void setConfiguration(Configuration config) throws ConfigurationException - { - setConfiguration("virtualhosts.virtualhost", config); - - Iterator i = getListValue("queues.queue.name").iterator(); - - while (i.hasNext()) - { - String queueName = (String) i.next(); - _queues.put(queueName, new QueueConfiguration(queueName, this)); - } - - i = getListValue("exchanges.exchange.name").iterator(); - int count = 0; - while (i.hasNext()) - { - CompositeConfiguration mungedConf = new CompositeConfiguration(); - mungedConf.addConfiguration(config.subset("exchanges.exchange(" + count++ + ")")); - mungedConf.addConfiguration(getConfig().subset("exchanges")); - String exchName = (String) i.next(); - _exchanges.put(exchName, new ExchangeConfiguration(exchName, mungedConf)); - } - } - - public String getName() - { - return _name; - } - - public long getHousekeepingCheckPeriod() - { - return getLongValue("housekeeping.checkPeriod", _defaultHouseKeepingCheckPeriod); - } - - public Configuration getStoreConfiguration() - { - return getConfig().subset("store"); - } - - public String getMessageStoreClass() - { - return getStringValue("store.class", null); - } - - public void setMessageStoreClass(String storeFactoryClass) - { - getConfig().setProperty("store.class", storeFactoryClass); - } - - public List getExchanges() - { - return getListValue("exchanges.exchange.name"); - } - - public String[] getQueueNames() - { - return _queues.keySet().toArray(new String[_queues.size()]); - } - - public ExchangeConfiguration getExchangeConfiguration(String exchangeName) - { - return _exchanges.get(exchangeName); - } - - public QueueConfiguration getQueueConfiguration(String queueName) - { - // We might be asked for the config for a queue we don't know about, - // such as one that's been dynamically created. Those get the defaults by default. - if (_queues.containsKey(queueName)) - { - return _queues.get(queueName); - } - else - { - try - { - return new QueueConfiguration(queueName, this); - } - catch (ConfigurationException e) - { - // The configuration is empty so there can't be an error. - return null; - } - } - } - - public int getMaximumMessageAge() - { - return getIntValue("queues.maximumMessageAge", getBrokerAttributeAsInt(Broker.QUEUE_ALERT_THRESHOLD_MESSAGE_AGE)); - } - - public Long getMaximumQueueDepth() - { - return getLongValue("queues.maximumQueueDepth", getBrokerAttributeAsLong(Broker.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES)); - } - - public Long getMaximumMessageSize() - { - return getLongValue("queues.maximumMessageSize", getBrokerAttributeAsLong(Broker.QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE)); - } - - public Long getMaximumMessageCount() - { - return getLongValue("queues.maximumMessageCount", getBrokerAttributeAsLong(Broker.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES)); - } - - public Long getMinimumAlertRepeatGap() - { - return getLongValue("queues.minimumAlertRepeatGap", getBrokerAttributeAsLong(Broker.QUEUE_ALERT_REPEAT_GAP)); - } - - public long getCapacity() - { - return getLongValue("queues.capacity", getBrokerAttributeAsLong(Broker.QUEUE_FLOW_CONTROL_SIZE_BYTES)); - } - - public long getFlowResumeCapacity() - { - return getLongValue("queues.flowResumeCapacity", getBrokerAttributeAsLong(Broker.QUEUE_FLOW_CONTROL_RESUME_SIZE_BYTES)); - } - - public String[] getElementsProcessed() - { - return new String[]{"queues", "exchanges", "custom-exchanges", "store", "housekeeping"}; - - } - - @Override - public void validateConfiguration() throws ConfigurationException - { - // QPID-3249. Support for specifying authentication name at vhost level is no longer supported. - if (getListValue("security.authentication.name").size() > 0) - { - String message = "Validation error : security/authentication/name is no longer a supported element within the configuration xml." - + " It appears in virtual host definition : " + _name; - throw new ConfigurationException(message); - } - - // QPID-3266. Tidy up housekeeping configuration option for scheduling frequency - if (contains("housekeeping.expiredMessageCheckPeriod")) - { - String message = "Validation error : housekeeping/expiredMessageCheckPeriod must be replaced by housekeeping/checkPeriod." - + " It appears in virtual host definition : " + _name; - throw new ConfigurationException(message); - } - } - - public int getHouseKeepingThreadCount() - { - return getIntValue("housekeeping.poolSize", Runtime.getRuntime().availableProcessors()); - } - - public long getTransactionTimeoutOpenWarn() - { - return getLongValue("transactionTimeout.openWarn", - getBrokerAttributeAsLong(Broker.VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_WARN)); - } - - public long getTransactionTimeoutOpenClose() - { - return getLongValue("transactionTimeout.openClose", - getBrokerAttributeAsLong(Broker.VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE)); - } - - public long getTransactionTimeoutIdleWarn() - { - return getLongValue("transactionTimeout.idleWarn", - getBrokerAttributeAsLong(Broker.VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_WARN)); - } - - public long getTransactionTimeoutIdleClose() - { - return getLongValue("transactionTimeout.idleClose", - getBrokerAttributeAsLong(Broker.VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE)); - } - - public int getMaxDeliveryCount() - { - return getIntValue("queues.maximumDeliveryCount", getBrokerAttributeAsInt(Broker.QUEUE_MAXIMUM_DELIVERY_ATTEMPTS)); - } - - /** - * Check if dead letter queue delivery is enabled, deferring to the broker configuration if not set. - */ - public boolean isDeadLetterQueueEnabled() - { - return getBooleanValue("queues.deadLetterQueues", getBrokerAttributeAsBoolean(Broker.QUEUE_DEAD_LETTER_QUEUE_ENABLED)); - } - - private long getBrokerAttributeAsLong(String name) - { - Number brokerValue = (Number)_broker.getAttribute(name); - return brokerValue == null? 0 : brokerValue.longValue(); - } - - private int getBrokerAttributeAsInt(String name) - { - Number brokerValue = (Number)_broker.getAttribute(name); - return brokerValue == null? 0 : brokerValue.intValue(); - } - - private boolean getBrokerAttributeAsBoolean(String name) - { - Boolean brokerValue = (Boolean)_broker.getAttribute(name); - return brokerValue == null? false : brokerValue.booleanValue(); - } - - public String getType() - { - return getStringValue("type", "org.apache.qpid.server.store.berkeleydb.BDBHAMessageStore".equals(getMessageStoreClass()) ? "BDB_HA": "STANDARD"); - } -} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/XmlConfigurationUtilities.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/XmlConfigurationUtilities.java deleted file mode 100644 index 84972c1e0a..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/XmlConfigurationUtilities.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * - * 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. - * - */ -package org.apache.qpid.server.configuration; - -import java.io.File; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; - -import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.Configuration; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.ConfigurationFactory; -import org.apache.commons.configuration.SystemConfiguration; -import org.apache.commons.configuration.XMLConfiguration; - -public class XmlConfigurationUtilities -{ - - // Our configuration class needs to make the interpolate method - // public so it can be called below from the config method. - public static class MyConfiguration extends CompositeConfiguration - { - public String interpolate(String obj) - { - return super.interpolate(obj); - } - } - - public static Configuration parseConfig(File file) throws ConfigurationException - { - ConfigurationFactory factory = new ConfigurationFactory(); - factory.setConfigurationFileName(file.getAbsolutePath()); - Configuration conf = factory.getConfiguration(); - - Iterator<?> keys = conf.getKeys(); - if (!keys.hasNext()) - { - keys = null; - conf = flatConfig(file); - } - - return conf; - } - - public final static Configuration flatConfig(File file) throws ConfigurationException - { - // We have to override the interpolate methods so that - // interpolation takes place across the entirety of the - // composite configuration. Without doing this each - // configuration object only interpolates variables defined - // inside itself. - final MyConfiguration conf = new MyConfiguration(); - conf.addConfiguration(new SystemConfiguration() - { - protected String interpolate(String o) - { - return conf.interpolate(o); - } - }); - conf.addConfiguration(new XMLConfiguration(file) - { - protected String interpolate(String o) - { - return conf.interpolate(o); - } - }); - return conf; - } - - public static String escapeTagName(String name) - { - return name.replaceAll("\\.", "\\.\\."); - } -} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/plugins/AbstractConfiguration.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/plugins/AbstractConfiguration.java deleted file mode 100644 index c28ea726c0..0000000000 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/plugins/AbstractConfiguration.java +++ /dev/null @@ -1,344 +0,0 @@ -/* - * 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. - */ -package org.apache.qpid.server.configuration.plugins; - -import java.util.LinkedHashMap; -import java.util.Map; -import org.apache.commons.configuration.Configuration; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.ConversionException; -import org.apache.log4j.Logger; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.Set; - -public abstract class AbstractConfiguration -{ - protected static final Logger _logger = Logger.getLogger(AbstractConfiguration.class); - - private Configuration _config; - - /** - * The Elements that this Plugin can process. - * - * For a Queues plugin that would be a list containing: - * <ul> - * <li>queue - the queue entries - * <li>the alerting values for defaults - * <li>exchange - the default exchange - * <li>durable - set the default durability - * </ul> - */ - abstract public String[] getElementsProcessed(); - - /** Performs configuration validation. */ - public void validateConfiguration() throws ConfigurationException - { - // Override in sub-classes - } - - public Configuration getConfig() - { - return _config; - } - - /** - * Sets the configuration for this plugin - * - * @param path - * @param configuration the configuration for this plugin. - */ - public void setConfiguration(String path, Configuration configuration) throws ConfigurationException - { - _config = configuration; - - // Extract a list of elements for processing - Iterator<?> keys = configuration.getKeys(); - - Set<String> elements = new HashSet<String>(); - while (keys.hasNext()) - { - String key = (String) keys.next(); - - int elementNameIndex = key.indexOf("."); - - String element = key.trim(); - if (elementNameIndex != -1) - { - element = key.substring(0, elementNameIndex).trim(); - } - - // Trim any element properties - elementNameIndex = element.indexOf("["); - if (elementNameIndex > 0) - { - element = element.substring(0, elementNameIndex).trim(); - } - - elements.add(element); - } - - //Remove the items we already expect in the configuration - for (String tag : getElementsProcessed()) - { - - // Work round the issue with Commons configuration. - // With an XMLConfiguration the key will be [@property] - // but with a CompositeConfiguration it will be @property]. - // Hide this issue from our users so when/if we change the - // configuration they don't have to. - int bracketIndex = tag.indexOf("["); - if (bracketIndex != -1) - { - tag = tag.substring(bracketIndex + 1, tag.length()); - } - - elements.remove(tag); - } - - if (_logger.isInfoEnabled()) - { - if (!elements.isEmpty()) - { - _logger.info("Elements to lookup:" + path); - for (String tag : elements) - { - _logger.info("Tag:'" + tag + "'"); - } - } - } - - validateConfiguration(); - } - - /** Helper method to print out list of keys in a {@link Configuration}. */ - public static final void showKeys(Configuration config) - { - if (config.isEmpty()) - { - _logger.info("Configuration is empty"); - } - else - { - Iterator<?> keys = config.getKeys(); - while (keys.hasNext()) - { - String key = (String) keys.next(); - _logger.info("Configuration key: " + key); - } - } - } - - protected boolean hasConfiguration() - { - return _config != null; - } - - /// Getters - - protected double getDoubleValue(String property) - { - return getDoubleValue(property, 0.0); - } - - protected double getDoubleValue(String property, double defaultValue) - { - return _config.getDouble(property, defaultValue); - } - - protected long getLongValue(String property) - { - return getLongValue(property, 0); - } - - protected long getLongValue(String property, long defaultValue) - { - return _config.getLong(property, defaultValue); - } - - protected int getIntValue(String property) - { - return getIntValue(property, 0); - } - - protected int getIntValue(String property, int defaultValue) - { - return _config.getInt(property, defaultValue); - } - - protected String getStringValue(String property) - { - return getStringValue(property, null); - } - - protected String getStringValue(String property, String defaultValue) - { - return _config.getString(property, defaultValue); - } - - protected boolean getBooleanValue(String property) - { - return getBooleanValue(property, false); - } - - protected boolean getBooleanValue(String property, boolean defaultValue) - { - return _config.getBoolean(property, defaultValue); - } - - protected List getListValue(String property) - { - return getListValue(property, Collections.EMPTY_LIST); - } - - protected List getListValue(String property, List defaultValue) - { - return _config.getList(property, defaultValue); - } - - /// Validation Helpers - - protected boolean contains(String property) - { - return _config.getProperty(property) != null; - } - - /** - * Provide mechanism to validate Configuration contains a Positive Long Value - * - * @param property - * - * @throws ConfigurationException - */ - protected void validatePositiveLong(String property) throws ConfigurationException - { - try - { - if (!containsPositiveLong(property)) - { - throw new ConfigurationException(this.getClass().getSimpleName() - + ": '" + property + - "' must be a Positive Long value."); - } - } - catch (Exception e) - { - Throwable last = e; - - // Find the first cause - if (e instanceof ConversionException) - { - Throwable t = e.getCause(); - while (t != null) - { - last = t; - t = last.getCause(); - } - } - - throw new ConfigurationException(this.getClass().getSimpleName() + - ": unable to configure invalid " + - property + ":" + - _config.getString(property), - last); - } - } - - protected boolean containsLong(String property) - { - try - { - _config.getLong(property); - return true; - } - catch (NoSuchElementException e) - { - return false; - } - } - - protected boolean containsPositiveLong(String property) - { - try - { - long value = _config.getLong(property); - return value > 0; - } - catch (NoSuchElementException e) - { - return false; - } - - } - - protected boolean containsInt(String property) - { - try - { - _config.getInt(property); - return true; - } - catch (NoSuchElementException e) - { - return false; - } - } - - protected boolean containsBoolean(String property) - { - try - { - _config.getBoolean(property); - return true; - } - catch (NoSuchElementException e) - { - return false; - } - } - - public static String escapeTagName(String name) - { - return name.replaceAll("\\.", "\\.\\."); - } - - protected void setConfig(Configuration config) - { - _config = config; - } - - protected Map<String,String> getMap(String name) - { - List elements = getListValue(name,Collections.emptyList()); - - Map<String,String> map = new LinkedHashMap(); - for(Object item : elements) - { - String[] keyValue = String.valueOf(item).split("=",2); - map.put(keyValue[0].trim(), keyValue.length > 1 ? keyValue[1].trim() : null); - } - return map; - } -} - - diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java index cc591b695e..010d74eb7f 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java @@ -545,7 +545,7 @@ public class MemoryConfigurationEntryStore implements ConfigurationEntryStore } else if (fieldNode.isObject()) { - // ignore, in-line objects are not supported yet + attributes.put(fieldName, toObject(fieldNode) ); } else { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java index d63a765144..928ea26819 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java @@ -22,8 +22,6 @@ package org.apache.qpid.server.model; import java.util.Collection; -import org.apache.qpid.server.message.MessageInstance; -import org.apache.qpid.server.queue.QueueEntry; import org.apache.qpid.server.queue.QueueEntryVisitor; @ManagedObject diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java index 4aec9b38a0..827c01f70f 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java @@ -56,7 +56,8 @@ public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject< String SUPPORTED_QUEUE_TYPES = "supportedQueueTypes"; String DURABLE = "durable"; String LIFETIME_POLICY = "lifetimePolicy"; - String CONFIG_PATH = "configPath"; + String SECURITY_ACL = "securityAcl"; + String HOUSE_KEEPING_THREAD_COUNT = "houseKeepingThreadCount"; // Attributes @@ -123,7 +124,10 @@ public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject< long getQueue_alertThresholdQueueDepthMessages(); @ManagedAttribute - String getConfigPath(); + String getSecurityAcl(); + + @ManagedAttribute + int getHouseKeepingThreadCount(); @ManagedStatistic long getQueueCount(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractConfiguredObject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractConfiguredObject.java index eda61f92b0..a498e3e59e 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractConfiguredObject.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractConfiguredObject.java @@ -377,6 +377,25 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im } } + <T extends ConfiguredObject<?>> Object getAttribute(String name, T parent, String parentAttributeName) + { + Object value = getActualAttribute(name); + if (value != null ) + { + return value; + } + if (parent != null) + { + value = parent.getAttribute(parentAttributeName); + if (value != null) + { + return value; + } + } + return getDefaultAttribute(name); + } + + @Override public String getDescription() { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java index 72b316c784..82051c3a41 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java @@ -20,7 +20,6 @@ */ package org.apache.qpid.server.model.adapter; -import java.io.File; import java.lang.reflect.Type; import java.security.AccessControlException; import java.util.ArrayList; @@ -31,15 +30,9 @@ import java.util.List; import java.util.Map; import java.util.UUID; -import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.commons.configuration.SystemConfiguration; import org.apache.log4j.Logger; import org.apache.qpid.server.exchange.AMQUnknownExchangeType; import org.apache.qpid.server.configuration.IllegalConfigurationException; -import org.apache.qpid.server.configuration.VirtualHostConfiguration; -import org.apache.qpid.server.configuration.XmlConfigurationUtilities.MyConfiguration; import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.message.MessageInstance; import org.apache.qpid.server.message.ServerMessage; @@ -75,8 +68,32 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo put(TYPE, String.class); put(STORE_PATH, String.class); put(STORE_TYPE, String.class); - put(CONFIG_PATH, String.class); put(STATE, State.class); + + put(QUEUE_ALERT_REPEAT_GAP, Long.class); + put(QUEUE_ALERT_THRESHOLD_MESSAGE_AGE, Long.class); + put(QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE, Long.class); + put(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES, Long.class); + put(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES, Long.class); + put(QUEUE_DEAD_LETTER_QUEUE_ENABLED, Boolean.class); + put(QUEUE_MAXIMUM_DELIVERY_ATTEMPTS, Integer.class); + put(QUEUE_FLOW_CONTROL_SIZE_BYTES, Long.class); + put(QUEUE_FLOW_RESUME_SIZE_BYTES, Long.class); + + put(HOUSEKEEPING_CHECK_PERIOD, Long.class); + put(STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE, Long.class); + put(STORE_TRANSACTION_IDLE_TIMEOUT_WARN, Long.class); + put(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE, Long.class); + put(STORE_TRANSACTION_OPEN_TIMEOUT_WARN, Long.class); + + put(CONFIG_STORE_TYPE, String.class); + put(CONFIG_STORE_PATH, String.class); + + }}); + + @SuppressWarnings("serial") + private static final Map<String, Object> DEFAULTS = Collections.unmodifiableMap(new HashMap<String, Object>(){{ + put(HOUSE_KEEPING_THREAD_COUNT, Runtime.getRuntime().availableProcessors()); }}); private org.apache.qpid.server.virtualhost.VirtualHost _virtualHost; @@ -90,7 +107,7 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo public VirtualHostAdapter(UUID id, Map<String, Object> attributes, Broker<?> broker, StatisticsGatherer brokerStatisticsGatherer, TaskExecutor taskExecutor) { - super(id, Collections.<String,Object>emptyMap(), MapValueConverter.convert(attributes, ATTRIBUTE_TYPES, false), taskExecutor, false); + super(id, DEFAULTS, MapValueConverter.convert(attributes, ATTRIBUTE_TYPES, false), taskExecutor, false); _broker = broker; _brokerStatisticsGatherer = brokerStatisticsGatherer; validateAttributes(); @@ -104,43 +121,10 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo { throw new IllegalConfigurationException("Virtual host name must be specified"); } - - String configurationFile = (String) getAttribute(CONFIG_PATH); - String type = (String) getAttribute(TYPE); - - boolean invalidAttributes = false; - if (configurationFile == null) - { - if (type == null) - { - invalidAttributes = true; - } - else - { - validateAttributes(type); - } - }/* - else - { - if (type != null) - { - invalidAttributes = true; - } - - }*/ - if (invalidAttributes) - { - throw new IllegalConfigurationException("Please specify either the 'configPath' attribute or 'type' attributes"); - } - - // pre-load the configuration in order to validate - try - { - createVirtualHostConfiguration(name); - } - catch(ConfigurationException e) + String type = getType(); + if (type == null || "".equals(type.trim())) { - throw new IllegalConfigurationException("Failed to validate configuration", e); + throw new IllegalConfigurationException("Virtual host type must be specified"); } } @@ -682,95 +666,96 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo { return LifetimePolicy.PERMANENT; } - else if (_virtualHost != null) + else if(QUEUE_ALERT_REPEAT_GAP.equals(name)) { - return getAttributeFromVirtualHostImplementation(name); + return getAttribute(QUEUE_ALERT_REPEAT_GAP, Broker.QUEUE_ALERT_REPEAT_GAP); } - return super.getAttribute(name); - } - - private Object getAttributeFromVirtualHostImplementation(String name) - { - if(SUPPORTED_EXCHANGE_TYPES.equals(name)) + else if(QUEUE_ALERT_THRESHOLD_MESSAGE_AGE.equals(name)) { - List<String> types = new ArrayList<String>(); - for(@SuppressWarnings("rawtypes") ExchangeType type : _virtualHost.getExchangeTypes()) - { - types.add(type.getType()); - } - return Collections.unmodifiableCollection(types); + return getAttribute(QUEUE_ALERT_THRESHOLD_MESSAGE_AGE, Broker.QUEUE_ALERT_THRESHOLD_MESSAGE_AGE); } - else if(SUPPORTED_QUEUE_TYPES.equals(name)) + else if(QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE.equals(name)) { - // TODO + return getAttribute(QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE, Broker.QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE); } - else if(QUEUE_DEAD_LETTER_QUEUE_ENABLED.equals(name)) + else if(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES.equals(name)) { - return _virtualHost.getConfiguration().isDeadLetterQueueEnabled(); + return getAttribute(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES, Broker.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES); } - else if(HOUSEKEEPING_CHECK_PERIOD.equals(name)) + else if(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES.equals(name)) + { + return getAttribute(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES, Broker.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES); + } + else if(QUEUE_DEAD_LETTER_QUEUE_ENABLED.equals(name)) { - return _virtualHost.getConfiguration().getHousekeepingCheckPeriod(); + return getAttribute(QUEUE_DEAD_LETTER_QUEUE_ENABLED, Broker.QUEUE_DEAD_LETTER_QUEUE_ENABLED); } else if(QUEUE_MAXIMUM_DELIVERY_ATTEMPTS.equals(name)) { - return _virtualHost.getConfiguration().getMaxDeliveryCount(); + return getAttribute(QUEUE_MAXIMUM_DELIVERY_ATTEMPTS, Broker.QUEUE_MAXIMUM_DELIVERY_ATTEMPTS); } else if(QUEUE_FLOW_CONTROL_SIZE_BYTES.equals(name)) { - return _virtualHost.getConfiguration().getCapacity(); + return getAttribute(QUEUE_FLOW_CONTROL_SIZE_BYTES, Broker.QUEUE_FLOW_CONTROL_SIZE_BYTES); } else if(QUEUE_FLOW_RESUME_SIZE_BYTES.equals(name)) { - return _virtualHost.getConfiguration().getFlowResumeCapacity(); - } - else if(STORE_TYPE.equals(name)) - { - return _virtualHost.getMessageStore().getStoreType(); + return getAttribute(QUEUE_FLOW_RESUME_SIZE_BYTES, Broker.QUEUE_FLOW_CONTROL_RESUME_SIZE_BYTES); } - else if(STORE_PATH.equals(name)) + else if(HOUSEKEEPING_CHECK_PERIOD.equals(name)) { - return _virtualHost.getMessageStore().getStoreLocation(); + return getAttribute(HOUSEKEEPING_CHECK_PERIOD, Broker.VIRTUALHOST_HOUSEKEEPING_CHECK_PERIOD); } else if(STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE.equals(name)) { - return _virtualHost.getConfiguration().getTransactionTimeoutIdleClose(); + return getAttribute(STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE, Broker.VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE); } else if(STORE_TRANSACTION_IDLE_TIMEOUT_WARN.equals(name)) { - return _virtualHost.getConfiguration().getTransactionTimeoutIdleWarn(); + return getAttribute(STORE_TRANSACTION_IDLE_TIMEOUT_WARN, Broker.VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_WARN); } else if(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE.equals(name)) { - return _virtualHost.getConfiguration().getTransactionTimeoutOpenClose(); + return getAttribute(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE, Broker.VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE); } else if(STORE_TRANSACTION_OPEN_TIMEOUT_WARN.equals(name)) { - return _virtualHost.getConfiguration().getTransactionTimeoutOpenWarn(); - } - else if(QUEUE_ALERT_REPEAT_GAP.equals(name)) - { - return _virtualHost.getConfiguration().getMinimumAlertRepeatGap(); - } - else if(QUEUE_ALERT_THRESHOLD_MESSAGE_AGE.equals(name)) - { - return _virtualHost.getConfiguration().getMaximumMessageAge(); - } - else if(QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE.equals(name)) - { - return _virtualHost.getConfiguration().getMaximumMessageSize(); - } - else if(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES.equals(name)) - { - return _virtualHost.getConfiguration().getMaximumQueueDepth(); + return getAttribute(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE, Broker.VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_WARN); } - else if(QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES.equals(name)) + else if (_virtualHost != null) { - return _virtualHost.getConfiguration().getMaximumMessageCount(); + if(SUPPORTED_EXCHANGE_TYPES.equals(name)) + { + List<String> types = new ArrayList<String>(); + for(@SuppressWarnings("rawtypes") ExchangeType type : _virtualHost.getExchangeTypes()) + { + types.add(type.getType()); + } + return Collections.unmodifiableCollection(types); + } + else if(SUPPORTED_QUEUE_TYPES.equals(name)) + { + // TODO + } + else if(STORE_TYPE.equals(name)) + { + return _virtualHost.getMessageStore().getStoreType(); + } + else if(STORE_PATH.equals(name)) + { + return _virtualHost.getMessageStore().getStoreLocation(); + } } return super.getAttribute(name); } + + Object getAttribute(String name, String brokerAttributeName) + { + return getAttribute(name, _broker, brokerAttributeName); + } + + @Override public Collection<String> getAttributeNames() { @@ -807,31 +792,31 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo @Override public boolean isQueue_deadLetterQueueEnabled() { - return _virtualHost.getConfiguration().isDeadLetterQueueEnabled(); + return (Boolean)getAttribute(VirtualHost.QUEUE_DEAD_LETTER_QUEUE_ENABLED); } @Override public long getHousekeepingCheckPeriod() { - return _virtualHost.getConfiguration().getHousekeepingCheckPeriod(); + return (Long)getAttribute(VirtualHost.HOUSEKEEPING_CHECK_PERIOD); } @Override public int getQueue_maximumDeliveryAttempts() { - return _virtualHost.getConfiguration().getMaxDeliveryCount(); + return (Integer)getAttribute(VirtualHost.QUEUE_MAXIMUM_DELIVERY_ATTEMPTS); } @Override public long getQueue_flowControlSizeBytes() { - return _virtualHost.getConfiguration().getCapacity(); + return (Long)getAttribute(VirtualHost.QUEUE_FLOW_CONTROL_SIZE_BYTES); } @Override public long getQueue_flowResumeSizeBytes() { - return _virtualHost.getConfiguration().getFlowResumeCapacity(); + return (Long)getAttribute(VirtualHost.QUEUE_FLOW_RESUME_SIZE_BYTES); } @Override @@ -843,7 +828,7 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo @Override public String getConfigStorePath() { - return (String) getAttribute(CONFIG_PATH); + return (String) getAttribute(CONFIG_STORE_PATH); } @Override @@ -861,61 +846,55 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo @Override public long getStoreTransactionIdleTimeoutClose() { - return _virtualHost.getConfiguration().getTransactionTimeoutIdleClose(); + return (Long)getAttribute(VirtualHost.STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE); } @Override public long getStoreTransactionIdleTimeoutWarn() { - return _virtualHost.getConfiguration().getTransactionTimeoutIdleWarn(); + return (Long)getAttribute(VirtualHost.STORE_TRANSACTION_IDLE_TIMEOUT_WARN); } @Override public long getStoreTransactionOpenTimeoutClose() { - return _virtualHost.getConfiguration().getTransactionTimeoutOpenClose(); + return (Long)getAttribute(VirtualHost.STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE); } @Override public long getStoreTransactionOpenTimeoutWarn() { - return _virtualHost.getConfiguration().getTransactionTimeoutOpenWarn(); + return (Long)getAttribute(VirtualHost.STORE_TRANSACTION_OPEN_TIMEOUT_WARN); } @Override public long getQueue_alertRepeatGap() { - return _virtualHost.getConfiguration().getMinimumAlertRepeatGap(); + return (Long)getAttribute(VirtualHost.QUEUE_ALERT_REPEAT_GAP); } @Override public long getQueue_alertThresholdMessageAge() { - return _virtualHost.getConfiguration().getMaximumMessageAge(); + return (Long)getAttribute(VirtualHost.QUEUE_ALERT_THRESHOLD_MESSAGE_AGE); } @Override public long getQueue_alertThresholdMessageSize() { - return _virtualHost.getConfiguration().getMaximumMessageSize(); + return (Long)getAttribute(VirtualHost.QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE); } @Override public long getQueue_alertThresholdQueueDepthBytes() { - return _virtualHost.getConfiguration().getMaximumQueueDepth(); + return (Long)getAttribute(VirtualHost.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES); } @Override public long getQueue_alertThresholdQueueDepthMessages() { - return _virtualHost.getConfiguration().getMaximumMessageCount(); - } - - @Override - public String getConfigPath() - { - return (String) getAttribute(CONFIG_PATH); + return (Long)getAttribute(VirtualHost.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES); } @Override @@ -960,6 +939,17 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo return _virtualHost.getMessageDeliveryStatistics().getTotal(); } + @Override + public String getSecurityAcl() + { + return (String)getAttribute(SECURITY_ACL); + } + + @Override + public int getHouseKeepingThreadCount() + { + return (Integer)getAttribute(HOUSE_KEEPING_THREAD_COUNT); + } @Override protected boolean setState(State currentState, State desiredState) @@ -1041,8 +1031,7 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo String virtualHostName = getName(); try { - VirtualHostConfiguration configuration = createVirtualHostConfiguration(virtualHostName); - String type = configuration.getType(); + String type = (String) getAttribute(TYPE); final VirtualHostFactory factory = VirtualHostFactory.FACTORIES.get(type); if(factory == null) { @@ -1053,11 +1042,10 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo _virtualHost = factory.createVirtualHost(_broker.getVirtualHostRegistry(), _brokerStatisticsGatherer, _broker.getSecurityManager(), - configuration, this); } } - catch (ConfigurationException e) + catch (Exception e) { throw new ServerScopedRuntimeException("Failed to create virtual host " + virtualHostName, e); } @@ -1078,53 +1066,6 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo } } - private VirtualHostConfiguration createVirtualHostConfiguration(String virtualHostName) throws ConfigurationException - { - VirtualHostConfiguration configuration; - String configurationFile = (String)getAttribute(CONFIG_PATH); - if (configurationFile == null) - { - final MyConfiguration basicConfiguration = new MyConfiguration(); - PropertiesConfiguration config = new PropertiesConfiguration(); - final String type = (String) getAttribute(TYPE); - config.addProperty("type", type); - VirtualHostFactory factory = VirtualHostFactory.FACTORIES.get(type); - if(factory != null) - { - for(Map.Entry<String,Object> entry : factory.createVirtualHostConfiguration(this).entrySet()) - { - config.addProperty(entry.getKey(), entry.getValue()); - } - } - basicConfiguration.addConfiguration(config); - - CompositeConfiguration compositeConfiguration = new CompositeConfiguration(); - compositeConfiguration.addConfiguration(new SystemConfiguration()); - compositeConfiguration.addConfiguration(basicConfiguration); - configuration = new VirtualHostConfiguration(virtualHostName, compositeConfiguration , _broker); - } - else - { - if (!new File(configurationFile).exists()) - { - throw new IllegalConfigurationException("Configuration file '" + configurationFile + "' does not exist"); - } - configuration = new VirtualHostConfiguration(virtualHostName, new File(configurationFile) , _broker); - String type = configuration.getType(); - changeAttribute(TYPE,null,type); - VirtualHostFactory factory = VirtualHostFactory.FACTORIES.get(type); - if(factory != null) - { - for(Map.Entry<String,Object> entry : factory.convertVirtualHostConfiguration(configuration.getConfig()).entrySet()) - { - changeAttribute(entry.getKey(), getAttribute(entry.getKey()), entry.getValue()); - } - } - - } - return configuration; - } - @Override public SecurityManager getSecurityManager() { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/DurableConfigurationStoreFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/DurableConfigurationStoreFactory.java index 94a029ced3..b83222f798 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/DurableConfigurationStoreFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/DurableConfigurationStoreFactory.java @@ -21,9 +21,7 @@ package org.apache.qpid.server.plugin; import java.util.Map; -import org.apache.commons.configuration.Configuration; import org.apache.qpid.server.store.DurableConfigurationStore; -import org.apache.qpid.server.store.MessageStore; public interface DurableConfigurationStoreFactory extends Pluggable { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java index 12fb9224bb..546f2fa05d 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java @@ -25,7 +25,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; -import org.apache.commons.configuration.Configuration; import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.store.jdbc.ConnectionProvider; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/MessageStoreFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/MessageStoreFactory.java index 81404dcba8..779dd06e9e 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/MessageStoreFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/MessageStoreFactory.java @@ -21,7 +21,6 @@ package org.apache.qpid.server.plugin; import java.util.Map; -import org.apache.commons.configuration.Configuration; import org.apache.qpid.server.store.MessageStore; public interface MessageStoreFactory extends Pluggable @@ -30,7 +29,5 @@ public interface MessageStoreFactory extends Pluggable MessageStore createMessageStore(); - public Map<String, Object> convertStoreConfiguration(Configuration configuration); - void validateAttributes(Map<String, Object> attributes); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/VirtualHostFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/VirtualHostFactory.java index a073c89a1b..8c5a39797a 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/VirtualHostFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/VirtualHostFactory.java @@ -25,8 +25,6 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; -import org.apache.commons.configuration.Configuration; -import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.model.adapter.VirtualHostAdapter; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.stats.StatisticsGatherer; @@ -40,15 +38,12 @@ public interface VirtualHostFactory extends Pluggable VirtualHost createVirtualHost(VirtualHostRegistry virtualHostRegistry, StatisticsGatherer brokerStatisticsGatherer, SecurityManager parentSecurityManager, - VirtualHostConfiguration hostConfig, org.apache.qpid.server.model.VirtualHost virtualHost); void validateAttributes(Map<String, Object> attributes); Map<String, Object> createVirtualHostConfiguration(VirtualHostAdapter virtualHostAdapter); - Map<String,Object> convertVirtualHostConfiguration(Configuration configuration); - static final class TYPES { private TYPES() diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java index dd82dfd681..3098572e39 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java @@ -26,11 +26,9 @@ import java.util.UUID; import org.apache.qpid.server.exchange.AMQUnknownExchangeType; import org.apache.qpid.server.exchange.ExchangeImpl; -import org.apache.qpid.server.model.ExclusivityPolicy; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.server.configuration.BrokerProperties; -import org.apache.qpid.server.configuration.QueueConfiguration; import org.apache.qpid.server.exchange.DefaultExchangeFactory; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.model.UUIDGenerator; @@ -74,50 +72,10 @@ public class AMQQueueFactory implements QueueFactory return createOrRestoreQueue(attributes, true); } - private AMQQueue createOrRestoreQueue(Map<String, Object> attributes, - boolean createInStore) + private AMQQueue createOrRestoreQueue(Map<String, Object> attributes, boolean createInStore) { - - String queueName = MapValueConverter.getStringAttribute(Queue.NAME,attributes); - - QueueConfiguration config = _virtualHost.getConfiguration().getQueueConfiguration(queueName); - - if (!attributes.containsKey(Queue.ALERT_THRESHOLD_MESSAGE_AGE) && config.getMaximumMessageAge() != 0) - { - attributes.put(Queue.ALERT_THRESHOLD_MESSAGE_AGE, config.getMaximumMessageAge()); - } - if (!attributes.containsKey(Queue.ALERT_THRESHOLD_QUEUE_DEPTH_BYTES) && config.getMaximumQueueDepth() != 0) - { - attributes.put(Queue.ALERT_THRESHOLD_QUEUE_DEPTH_BYTES, config.getMaximumQueueDepth()); - } - if (!attributes.containsKey(Queue.ALERT_THRESHOLD_MESSAGE_SIZE) && config.getMaximumMessageSize() != 0) - { - attributes.put(Queue.ALERT_THRESHOLD_MESSAGE_SIZE, config.getMaximumMessageSize()); - } - if (!attributes.containsKey(Queue.ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES) && config.getMaximumMessageCount() != 0) - { - attributes.put(Queue.ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES, config.getMaximumMessageCount()); - } - if (!attributes.containsKey(Queue.ALERT_REPEAT_GAP) && config.getMinimumAlertRepeatGap() != 0) - { - attributes.put(Queue.ALERT_REPEAT_GAP, config.getMinimumAlertRepeatGap()); - } - if (config.getMaxDeliveryCount() != 0 && !attributes.containsKey(Queue.MAXIMUM_DELIVERY_ATTEMPTS)) - { - attributes.put(Queue.MAXIMUM_DELIVERY_ATTEMPTS, config.getMaxDeliveryCount()); - } - if (!attributes.containsKey(Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES) && config.getCapacity() != 0) - { - attributes.put(Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES, config.getCapacity()); - } - if (!attributes.containsKey(Queue.QUEUE_FLOW_RESUME_SIZE_BYTES) && config.getFlowResumeCapacity() != 0) - { - attributes.put(Queue.QUEUE_FLOW_RESUME_SIZE_BYTES, config.getFlowResumeCapacity()); - } - - - boolean createDLQ = createDLQ(attributes, config); + boolean createDLQ = shouldCreateDLQ(attributes, _virtualHost.getDefaultDeadLetterQueueEnabled()); if (createDLQ) { validateDLNames(queueName); @@ -259,30 +217,7 @@ public class AMQQueueFactory implements QueueFactory queue.setAlternateExchange(dlExchange); } - public AMQQueue createAMQQueueImpl(QueueConfiguration config) - { - - Map<String, Object> arguments = createQueueAttributesFromConfig(_virtualHost, config); - - AMQQueue q = createOrRestoreQueue(arguments, false); - return q; - } - - /** - * Validates DLQ and DLE names - * <p> - * DLQ name and DLQ exchange name need to be validated in order to keep - * integrity in cases when queue name passes validation check but DLQ name - * or DL exchange name fails to pass it. Otherwise, we might have situations - * when queue is created but DL exchange or/and DLQ creation fail. - * <p> - * - * @param name - * queue name - * @throws IllegalArgumentException - * thrown if length of queue name or exchange name exceed 255 - */ - protected static void validateDLNames(String name) + private static void validateDLNames(String name) { // check if DLQ name and DLQ exchange name do not exceed 255 String exchangeName = getDeadLetterExchangeName(name); @@ -299,16 +234,7 @@ public class AMQQueueFactory implements QueueFactory } } - /** - * Checks if DLQ is enabled for the queue. - * - * @param arguments - * queue arguments - * @param qConfig - * queue configuration - * @return true if DLQ enabled - */ - protected static boolean createDLQ(Map<String, Object> arguments, QueueConfiguration qConfig) + private static boolean shouldCreateDLQ(Map<String, Object> arguments, boolean virtualHostDefaultDeadLetterQueueEnabled) { boolean autoDelete = MapValueConverter.getEnumAttribute(LifetimePolicy.class, Queue.LIFETIME_POLICY, @@ -320,7 +246,7 @@ public class AMQQueueFactory implements QueueFactory { boolean dlqArgumentPresent = arguments != null && arguments.containsKey(Queue.CREATE_DLQ_ON_CREATION); - if (dlqArgumentPresent || qConfig.isDeadLetterQueueEnabled()) + if (dlqArgumentPresent) { boolean dlqEnabled = true; if (dlqArgumentPresent) @@ -329,89 +255,21 @@ public class AMQQueueFactory implements QueueFactory dlqEnabled = (argument instanceof Boolean && ((Boolean)argument).booleanValue()) || (argument instanceof String && Boolean.parseBoolean(argument.toString())); } - return dlqEnabled ; + return dlqEnabled; } + return virtualHostDefaultDeadLetterQueueEnabled; } return false; } - /** - * Generates a dead letter queue name for a given queue name - * - * @param name - * queue name - * @return DLQ name - */ - protected static String getDeadLetterQueueName(String name) + private static String getDeadLetterQueueName(String name) { return name + System.getProperty(BrokerProperties.PROPERTY_DEAD_LETTER_QUEUE_SUFFIX, DEFAULT_DLQ_NAME_SUFFIX); } - /** - * Generates a dead letter exchange name for a given queue name - * - * @param name - * queue name - * @return DL exchange name - */ - protected static String getDeadLetterExchangeName(String name) + private static String getDeadLetterExchangeName(String name) { return name + System.getProperty(BrokerProperties.PROPERTY_DEAD_LETTER_EXCHANGE_SUFFIX, DefaultExchangeFactory.DEFAULT_DLE_NAME_SUFFIX); } - private static Map<String, Object> createQueueAttributesFromConfig(final VirtualHost virtualHost, - QueueConfiguration config) - { - Map<String,Object> attributes = new HashMap<String,Object>(); - - if(config.getArguments() != null && !config.getArguments().isEmpty()) - { - attributes.putAll(QueueArgumentsConverter.convertWireArgsToModel(new HashMap<String, Object>(config.getArguments()))); - } - - if(config.isLVQ() || config.getLVQKey() != null) - { - attributes.put(Queue.LVQ_KEY, - config.getLVQKey() == null ? ConflationQueue.DEFAULT_LVQ_KEY : config.getLVQKey()); - } - else if (config.getPriority() || config.getPriorities() > 0) - { - attributes.put(Queue.PRIORITIES, config.getPriorities() < 0 ? 10 : config.getPriorities()); - } - else if (config.getQueueSortKey() != null && !"".equals(config.getQueueSortKey())) - { - attributes.put(Queue.SORT_KEY, config.getQueueSortKey()); - } - - if (!config.getAutoDelete() && config.isDeadLetterQueueEnabled()) - { - attributes.put(Queue.CREATE_DLQ_ON_CREATION, true); - } - - if (config.getDescription() != null && !"".equals(config.getDescription())) - { - attributes.put(Queue.DESCRIPTION, config.getDescription()); - } - - attributes.put(Queue.DURABLE, config.getDurable()); - attributes.put(Queue.LIFETIME_POLICY, - config.getAutoDelete() ? LifetimePolicy.DELETE_ON_NO_OUTBOUND_LINKS : LifetimePolicy.PERMANENT); - if(config.getExclusive()) - { - attributes.put(Queue.EXCLUSIVE, ExclusivityPolicy.CONTAINER); - } - if(config.getOwner() != null) - { - attributes.put(Queue.OWNER, config.getOwner()); - } - - attributes.put(Queue.NAME, config.getName()); - - // we need queues that are defined in config to have deterministic ids. - attributes.put(Queue.ID, UUIDGenerator.generateQueueUUID(config.getName(), virtualHost.getName())); - - - return attributes; - } - } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java index a4719f6058..3ffa34f4fa 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java @@ -24,7 +24,6 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; import java.util.UUID; import java.util.concurrent.BlockingQueue; @@ -32,7 +31,6 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; -import org.apache.commons.configuration.ConfigurationException; import org.apache.log4j.Logger; import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.server.configuration.updater.TaskExecutor; @@ -41,9 +39,6 @@ import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.Queue; -import org.apache.qpid.server.configuration.ExchangeConfiguration; -import org.apache.qpid.server.configuration.QueueConfiguration; -import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.connection.ConnectionRegistry; import org.apache.qpid.server.connection.IConnectionRegistry; import org.apache.qpid.server.exchange.DefaultExchangeFactory; @@ -75,7 +70,6 @@ import org.apache.qpid.server.store.Event; import org.apache.qpid.server.store.EventListener; import org.apache.qpid.server.txn.DtxRegistry; import org.apache.qpid.server.util.MapValueConverter; -import org.apache.qpid.server.util.ServerScopedRuntimeException; public abstract class AbstractVirtualHost implements VirtualHost, IConnectionRegistry.RegistryChangeListener, EventListener { @@ -97,8 +91,6 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg private final SecurityManager _securityManager; - private final VirtualHostConfiguration _vhostConfig; - private final QueueRegistry _queueRegistry; private final ExchangeRegistry _exchangeRegistry; @@ -131,23 +123,11 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg public AbstractVirtualHost(VirtualHostRegistry virtualHostRegistry, StatisticsGatherer brokerStatisticsGatherer, SecurityManager parentSecurityManager, - VirtualHostConfiguration hostConfig, org.apache.qpid.server.model.VirtualHost virtualHost) { - if (hostConfig == null) - { - throw new IllegalArgumentException("HostConfig cannot be null"); - } - - if (hostConfig.getName() == null || hostConfig.getName().length() == 0) - { - throw new IllegalArgumentException("Illegal name (" + hostConfig.getName() + ") for virtualhost."); - } - _virtualHostRegistry = virtualHostRegistry; _brokerStatisticsGatherer = brokerStatisticsGatherer; - _vhostConfig = hostConfig; - _name = _vhostConfig.getName(); + _name = virtualHost.getName(); _dtxRegistry = new DtxRegistry(); _model = virtualHost; _eventLogger = virtualHostRegistry.getEventLogger(); @@ -156,12 +136,12 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg _eventLogger.message(VirtualHostMessages.CREATED(_name)); - _securityManager = new SecurityManager(parentSecurityManager, _vhostConfig.getConfig().getString("security.acl"), _name); + _securityManager = new SecurityManager(parentSecurityManager, virtualHost.getSecurityAcl(), _name); _connectionRegistry = new ConnectionRegistry(); _connectionRegistry.addRegistryChangeListener(this); - _houseKeepingTasks = new ScheduledThreadPoolExecutor(_vhostConfig.getHouseKeepingThreadCount()); + _houseKeepingTasks = new ScheduledThreadPoolExecutor(virtualHost.getHouseKeepingThreadCount()); _queueRegistry = new DefaultQueueRegistry(this); @@ -176,7 +156,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg initialiseStatistics(); - initialiseStorage(hostConfig, virtualHost); + initialiseStorage(virtualHost); getMessageStore().addEventListener(this, Event.PERSISTENT_MESSAGE_SIZE_OVERFULL); getMessageStore().addEventListener(this, Event.PERSISTENT_MESSAGE_SIZE_UNDERFULL); @@ -192,19 +172,13 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg } } - abstract protected void initialiseStorage(VirtualHostConfiguration hostConfig, - org.apache.qpid.server.model.VirtualHost virtualHost); + abstract protected void initialiseStorage(org.apache.qpid.server.model.VirtualHost<?> virtualHost); public IConnectionRegistry getConnectionRegistry() { return _connectionRegistry; } - public VirtualHostConfiguration getConfiguration() - { - return _vhostConfig; - } - public UUID getId() { return _id; @@ -306,135 +280,11 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg } - protected void initialiseModel(VirtualHostConfiguration config) + protected void initialiseModel() { - _logger.debug("Loading configuration for virtualhost: " + config.getName()); - + _logger.debug("Loading configuration for virtualhost: " + _model.getName()); _exchangeRegistry.initialise(_exchangeFactory); - - List<String> exchangeNames = config.getExchanges(); - - for (String exchangeName : exchangeNames) - { - try - { - configureExchange(config.getExchangeConfiguration(exchangeName)); - } - catch (UnknownExchangeException e) - { - throw new ServerScopedRuntimeException("Could not configure exchange " + exchangeName, e); - } - catch (ReservedExchangeNameException e) - { - throw new ServerScopedRuntimeException("Could not configure exchange " + exchangeName, e); - } - catch (AMQUnknownExchangeType e) - { - throw new ServerScopedRuntimeException("Could not configure exchange " + exchangeName, e); - } - } - - String[] queueNames = config.getQueueNames(); - - for (Object queueNameObj : queueNames) - { - String queueName = String.valueOf(queueNameObj); - try - { - configureQueue(config.getQueueConfiguration(queueName)); - } - catch (ConfigurationException e) - { - throw new ServerScopedRuntimeException("Could not configure queue " + queueName, e); - } - } - } - - private void configureExchange(ExchangeConfiguration exchangeConfiguration) - throws UnknownExchangeException, ReservedExchangeNameException, - AMQUnknownExchangeType - { - boolean durable = exchangeConfiguration.getDurable(); - boolean autodelete = exchangeConfiguration.getAutoDelete(); - try - { - Map<String,Object> attributes = new HashMap<String, Object>(); - - attributes.put(org.apache.qpid.server.model.Exchange.ID, null); - attributes.put(org.apache.qpid.server.model.Exchange.NAME, exchangeConfiguration.getName()); - attributes.put(org.apache.qpid.server.model.Exchange.TYPE, exchangeConfiguration.getType()); - attributes.put(org.apache.qpid.server.model.Exchange.DURABLE, durable); - attributes.put(org.apache.qpid.server.model.Exchange.LIFETIME_POLICY, - autodelete ? LifetimePolicy.DELETE_ON_NO_LINKS : LifetimePolicy.PERMANENT); - attributes.put(org.apache.qpid.server.model.Exchange.ALTERNATE_EXCHANGE, null); - ExchangeImpl newExchange = createExchange(attributes); - } - catch(ExchangeExistsException e) - { - _logger.info("Exchange " + exchangeConfiguration.getName() + " already defined. Configuration in XML file ignored"); - } - - } - - private void configureQueue(QueueConfiguration queueConfiguration) - throws ConfigurationException - { - AMQQueue queue = _queueFactory.createAMQQueueImpl(queueConfiguration); - String queueName = queue.getName(); - - if (queue.isDurable()) - { - DurableConfigurationStoreHelper.createQueue(getDurableConfigurationStore(), queue); - } - - //get the exchange name (returns empty String if none was specified) - String exchangeName = queueConfiguration.getExchange(); - - - if(ExchangeDefaults.DEFAULT_EXCHANGE_NAME.equals(exchangeName)) - { - //get routing keys in configuration (returns empty list if none are defined) - List<?> routingKeys = queueConfiguration.getRoutingKeys(); - if(!(routingKeys.isEmpty() || (routingKeys.size()==1 && routingKeys.contains(queueName)))) - { - throw new ConfigurationException("Attempt to bind queue '" + queueName + "' with binding key(s) " + - routingKeys + " without specifying an exchange"); - } - } - else - { - ExchangeImpl exchange = _exchangeRegistry.getExchange(exchangeName); - if (exchange == null) - { - throw new ConfigurationException("Attempt to bind queue '" + queueName + "' to unknown exchange:" + exchangeName); - } - - //get routing keys in configuration (returns empty list if none are defined) - List<?> routingKeys = queueConfiguration.getRoutingKeys(); - - for (Object routingKeyNameObj : routingKeys) - { - String routingKey = String.valueOf(routingKeyNameObj); - - configureBinding(queue, exchange, routingKey, (Map) queueConfiguration.getBindingArguments(routingKey)); - } - - if (!routingKeys.contains(queueName)) - { - //bind the queue to the named exchange using its name - configureBinding(queue, exchange, queueName, null); - } - } - } - - private void configureBinding(AMQQueue queue, ExchangeImpl exchange, String routingKey, Map<String,Object> arguments) - { - if (_logger.isInfoEnabled()) - { - _logger.info("Binding queue:" + queue + " with routing key '" + routingKey + "' to exchange:" + exchange.getName()); - } - exchange.addBinding(routingKey, queue, arguments); } public String getName() @@ -907,7 +757,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg try { - initialiseHouseKeeping(_vhostConfig.getHousekeepingCheckPeriod()); + initialiseHouseKeeping(_model.getHousekeepingCheckPeriod()); finalState = State.ACTIVE; } finally @@ -981,10 +831,10 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg } try { - session.checkTransactionStatus(_vhostConfig.getTransactionTimeoutOpenWarn(), - _vhostConfig.getTransactionTimeoutOpenClose(), - _vhostConfig.getTransactionTimeoutIdleWarn(), - _vhostConfig.getTransactionTimeoutIdleClose()); + session.checkTransactionStatus(_model.getStoreTransactionOpenTimeoutWarn(), + _model.getStoreTransactionOpenTimeoutClose(), + _model.getStoreTransactionIdleTimeoutWarn(), + _model.getStoreTransactionIdleTimeoutClose()); } catch (Exception e) { _logger.error("Exception in housekeeping for connection: " + connection.toString(), e); @@ -1039,49 +889,55 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg @Override public long getDefaultAlertThresholdMessageAge() { - return getConfiguration().getMaximumMessageAge(); + return _model.getQueue_alertThresholdMessageAge(); } @Override public long getDefaultAlertThresholdMessageSize() { - return getConfiguration().getMaximumMessageSize(); + return _model.getQueue_alertThresholdMessageSize(); } @Override public long getDefaultAlertThresholdQueueDepthMessages() { - return getConfiguration().getMaximumMessageCount(); + return _model.getQueue_alertThresholdQueueDepthMessages(); } @Override public long getDefaultAlertThresholdQueueDepthBytes() { - return getConfiguration().getMaximumQueueDepth(); + return _model.getQueue_alertThresholdQueueDepthBytes(); } @Override public long getDefaultAlertRepeatGap() { - return getConfiguration().getMinimumAlertRepeatGap(); + return _model.getQueue_alertRepeatGap(); } @Override public long getDefaultQueueFlowControlSizeBytes() { - return getConfiguration().getCapacity(); + return _model.getQueue_flowControlSizeBytes(); } @Override public long getDefaultQueueFlowResumeSizeBytes() { - return getConfiguration().getFlowResumeCapacity(); + return _model.getQueue_flowResumeSizeBytes(); } @Override public int getDefaultMaximumDeliveryAttempts() { - return getConfiguration().getMaxDeliveryCount(); + return _model.getQueue_maximumDeliveryAttempts(); + } + + @Override + public boolean getDefaultDeadLetterQueueEnabled() + { + return _model.isQueue_deadLetterQueueEnabled(); } @Override diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java index 9b576bf41f..f1bfb39eb8 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java @@ -19,7 +19,6 @@ package org.apache.qpid.server.virtualhost;/* * */ -import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.logging.subjects.MessageStoreLogSubject; import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.stats.StatisticsGatherer; @@ -29,7 +28,6 @@ import org.apache.qpid.server.store.DurableConfigurationStoreCreator; import org.apache.qpid.server.store.MessageStore; import org.apache.qpid.server.store.MessageStoreCreator; import org.apache.qpid.server.store.OperationalLoggingListener; -import org.apache.qpid.server.util.ServerScopedRuntimeException; public class StandardVirtualHost extends AbstractVirtualHost { @@ -40,54 +38,19 @@ public class StandardVirtualHost extends AbstractVirtualHost StandardVirtualHost(VirtualHostRegistry virtualHostRegistry, StatisticsGatherer brokerStatisticsGatherer, org.apache.qpid.server.security.SecurityManager parentSecurityManager, - VirtualHostConfiguration hostConfig, VirtualHost virtualHost) + VirtualHost virtualHost) { - super(virtualHostRegistry, brokerStatisticsGatherer, parentSecurityManager, hostConfig, virtualHost); + super(virtualHostRegistry, brokerStatisticsGatherer, parentSecurityManager, virtualHost); } - private MessageStore initialiseMessageStore(VirtualHostConfiguration hostConfig, VirtualHost virtualHost) + private MessageStore initialiseMessageStore(VirtualHost virtualHost) { final Object storeTypeAttr = virtualHost.getAttribute(VirtualHost.STORE_TYPE); String storeType = storeTypeAttr == null ? null : String.valueOf(storeTypeAttr); - MessageStore messageStore = null; - if (storeType == null) - { - try - { - final Class<?> clazz = Class.forName(hostConfig.getMessageStoreClass()); - final Object o = clazz.newInstance(); - - if (!(o instanceof MessageStore)) - { - throw new ClassCastException(clazz + " does not implement " + MessageStore.class); - } - - messageStore = (MessageStore) o; - } - catch (ClassNotFoundException e) - { - throw new ServerScopedRuntimeException("Failed to fina virtual host message store implementation, " + - "check the classpath and the configuration", e); - } - catch (InstantiationException e) - { - throw new ServerScopedRuntimeException("Failed to initialise virtual host store, " + - "check the configuration", e); - } - catch (IllegalAccessException e) - { - throw new ServerScopedRuntimeException("Failed to initialise virtual host store, " + - "check the configuration", e); - } - } - else - { - messageStore = new MessageStoreCreator().createMessageStore(storeType); - } + MessageStore messageStore = new MessageStoreCreator().createMessageStore(storeType); - final MessageStoreLogSubject storeLogSubject = new MessageStoreLogSubject(getName(), messageStore.getClass().getSimpleName()); OperationalLoggingListener.listen(messageStore, storeLogSubject, getEventLogger()); @@ -118,9 +81,9 @@ public class StandardVirtualHost extends AbstractVirtualHost } - protected void initialiseStorage(VirtualHostConfiguration hostConfig, VirtualHost virtualHost) + protected void initialiseStorage(VirtualHost virtualHost) { - _messageStore = initialiseMessageStore(hostConfig, virtualHost); + _messageStore = initialiseMessageStore(virtualHost); _durableConfigurationStore = initialiseConfigurationStore(virtualHost); @@ -132,7 +95,7 @@ public class StandardVirtualHost extends AbstractVirtualHost VirtualHostConfigRecoveryHandler recoveryHandler = new VirtualHostConfigRecoveryHandler(this); _messageStore.configureMessageStore(virtualHost, recoveryHandler, recoveryHandler); - initialiseModel(hostConfig); + initialiseModel(); _messageStore.activate(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java index c28bcb977f..5ae3623baa 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java @@ -21,13 +21,10 @@ package org.apache.qpid.server.virtualhost;/* import java.util.LinkedHashMap; import java.util.Map; -import org.apache.commons.configuration.Configuration; -import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.model.adapter.VirtualHostAdapter; import org.apache.qpid.server.plugin.MessageStoreFactory; import org.apache.qpid.server.plugin.VirtualHostFactory; import org.apache.qpid.server.stats.StatisticsGatherer; -import org.apache.qpid.server.store.MessageStoreConstants; import org.apache.qpid.server.store.MessageStoreCreator; public class StandardVirtualHostFactory implements VirtualHostFactory @@ -45,10 +42,9 @@ public class StandardVirtualHostFactory implements VirtualHostFactory public VirtualHost createVirtualHost(VirtualHostRegistry virtualHostRegistry, StatisticsGatherer brokerStatisticsGatherer, org.apache.qpid.server.security.SecurityManager parentSecurityManager, - VirtualHostConfiguration hostConfig, org.apache.qpid.server.model.VirtualHost virtualHost) { - return new StandardVirtualHost(virtualHostRegistry, brokerStatisticsGatherer, parentSecurityManager, hostConfig, virtualHost); + return new StandardVirtualHost(virtualHostRegistry, brokerStatisticsGatherer, parentSecurityManager, virtualHost); } @@ -96,23 +92,4 @@ public class StandardVirtualHostFactory implements VirtualHostFactory return convertedMap; } - @Override - public Map<String, Object> convertVirtualHostConfiguration(Configuration configuration) - { - Map<String,Object> convertedMap = new LinkedHashMap<String, Object>(); - Configuration storeConfiguration = configuration.subset("store"); - convertedMap.put(org.apache.qpid.server.model.VirtualHost.STORE_TYPE, storeConfiguration.getString("type")); - convertedMap.put(org.apache.qpid.server.model.VirtualHost.STORE_PATH, storeConfiguration.getString(MessageStoreConstants.ENVIRONMENT_PATH_PROPERTY)); - - convertedMap.put(MessageStoreConstants.OVERFULL_SIZE_ATTRIBUTE, storeConfiguration.getString(MessageStoreConstants.OVERFULL_SIZE_PROPERTY)); - convertedMap.put(MessageStoreConstants.UNDERFULL_SIZE_ATTRIBUTE, storeConfiguration.getString(MessageStoreConstants.UNDERFULL_SIZE_PROPERTY)); - - for(MessageStoreFactory mf : new MessageStoreCreator().getFactories()) - { - convertedMap.putAll(mf.convertStoreConfiguration(storeConfiguration)); - } - - return convertedMap; - - } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java index a06056de8f..f113abb25a 100755 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java @@ -28,7 +28,6 @@ import java.util.concurrent.ScheduledFuture; import org.apache.qpid.server.configuration.updater.TaskExecutor; import org.apache.qpid.server.exchange.AMQUnknownExchangeType; import org.apache.qpid.common.Closeable; -import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.connection.IConnectionRegistry; import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.logging.EventLogger; @@ -49,8 +48,6 @@ public interface VirtualHost extends DurableConfigurationStore.Source, Closeable { IConnectionRegistry getConnectionRegistry(); - VirtualHostConfiguration getConfiguration(); - String getName(); AMQQueue getQueue(String name); @@ -137,6 +134,8 @@ public interface VirtualHost extends DurableConfigurationStore.Source, Closeable int getDefaultMaximumDeliveryAttempts(); + boolean getDefaultDeadLetterQueueEnabled(); + TaskExecutor getTaskExecutor(); org.apache.qpid.server.model.VirtualHost getModel(); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/QueueConfigurationTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/QueueConfigurationTest.java deleted file mode 100644 index 2c3420a718..0000000000 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/QueueConfigurationTest.java +++ /dev/null @@ -1,269 +0,0 @@ -/* - * - * 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. - * - */ -package org.apache.qpid.server.configuration; - -import static org.mockito.Mockito.when; - -import java.util.Collections; -import junit.framework.TestCase; -import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.PropertiesConfiguration; - -import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.queue.QueueArgumentsConverter; -import org.apache.qpid.server.util.BrokerTestHelper; - -public class QueueConfigurationTest extends TestCase -{ - private VirtualHostConfiguration _emptyConf; - private PropertiesConfiguration _env; - private VirtualHostConfiguration _fullHostConf; - private Broker _broker; - - @Override - public void setUp() throws Exception - { - super.setUp(); - BrokerTestHelper.setUp(); - _broker = BrokerTestHelper.createBrokerMock(); - _env = new PropertiesConfiguration(); - _emptyConf = new VirtualHostConfiguration("test", _env, _broker); - - PropertiesConfiguration fullEnv = new PropertiesConfiguration(); - fullEnv.setProperty("queues.maximumMessageAge", 1); - fullEnv.setProperty("queues.maximumQueueDepth", 1); - fullEnv.setProperty("queues.maximumMessageSize", 1); - fullEnv.setProperty("queues.maximumMessageCount", 1); - fullEnv.setProperty("queues.minimumAlertRepeatGap", 1); - fullEnv.setProperty("queues.deadLetterQueues", true); - fullEnv.setProperty("queues.maximumDeliveryCount", 5); - - _fullHostConf = new VirtualHostConfiguration("test", fullEnv, _broker); - - } - - @Override - public void tearDown() throws Exception - { - BrokerTestHelper.tearDown(); - super.tearDown(); - } - - public void testMaxDeliveryCount() throws Exception - { - // broker MAXIMUM_DELIVERY_ATTEMPTS attribute is not set - when(_broker.getAttribute(Broker.QUEUE_MAXIMUM_DELIVERY_ATTEMPTS)).thenReturn(null); - - // Check default value - QueueConfiguration qConf = new QueueConfiguration("test", _emptyConf); - assertEquals("Unexpected default server configuration for max delivery count ", 0, qConf.getMaxDeliveryCount()); - - // set broker MAXIMUM_DELIVERY_ATTEMPTS attribute to 2 - when(_broker.getAttribute(Broker.QUEUE_MAXIMUM_DELIVERY_ATTEMPTS)).thenReturn(2); - - // Check that queue inherits the MAXIMUM_DELIVERY_ATTEMPTS value from broker - qConf = new QueueConfiguration("test", _emptyConf); - assertEquals("Unexpected default server configuration for max delivery count ", 2, qConf.getMaxDeliveryCount()); - - // Check explicit value - VirtualHostConfiguration vhostConfig = overrideConfiguration("maximumDeliveryCount", 7); - qConf = new QueueConfiguration("test", vhostConfig); - assertEquals("Unexpected host configuration for max delivery count", 7, qConf.getMaxDeliveryCount()); - - // Check inherited value - qConf = new QueueConfiguration("test", _fullHostConf); - assertEquals("Unexpected queue configuration for max delivery count", 5, qConf.getMaxDeliveryCount()); - } - - /** - * Tests that the default setting for DLQ configuration is disabled, and verifies that it can be overridden - * at a broker or virtualhost level. - * @throws Exception - */ - public void testIsDeadLetterQueueEnabled() throws Exception - { - // enable dead letter queues broker wide - when(_broker.getAttribute(Broker.QUEUE_DEAD_LETTER_QUEUE_ENABLED)).thenReturn(true); - - // Check that queue inherits the broker setting - QueueConfiguration qConf = new QueueConfiguration("test", _emptyConf); - assertTrue("Unexpected queue configuration for dead letter enabled attribute", qConf.isDeadLetterQueueEnabled()); - - // broker DEAD_LETTER_QUEUE_ENABLED is not set - when(_broker.getAttribute(Broker.QUEUE_DEAD_LETTER_QUEUE_ENABLED)).thenReturn(null); - - // Check that queue dead letter queue is not enabled - qConf = new QueueConfiguration("test", _emptyConf); - assertFalse("Unexpected queue configuration for dead letter enabled attribute", qConf.isDeadLetterQueueEnabled()); - - // Check explicit value - VirtualHostConfiguration vhostConfig = overrideConfiguration("deadLetterQueues", true); - qConf = new QueueConfiguration("test", vhostConfig); - assertTrue("Unexpected queue configuration for dead letter enabled attribute", qConf.isDeadLetterQueueEnabled()); - - // Check inherited value - qConf = new QueueConfiguration("test", _fullHostConf); - assertTrue("Unexpected queue configuration for dead letter enabled attribute", qConf.isDeadLetterQueueEnabled()); - } - - public void testGetMaximumMessageAge() throws ConfigurationException - { - // Check default value - QueueConfiguration qConf = new QueueConfiguration("test", _emptyConf); - assertEquals(0, qConf.getMaximumMessageAge()); - - // Check explicit value - VirtualHostConfiguration vhostConfig = overrideConfiguration("maximumMessageAge", 2); - - qConf = new QueueConfiguration("test", vhostConfig); - assertEquals(2, qConf.getMaximumMessageAge()); - - } - - public void testGetMaximumQueueDepth() throws ConfigurationException - { - // Check default value - QueueConfiguration qConf = new QueueConfiguration("test", _emptyConf); - assertEquals(0, qConf.getMaximumQueueDepth()); - - // Check explicit value - VirtualHostConfiguration vhostConfig = overrideConfiguration("maximumQueueDepth", 2); - qConf = new QueueConfiguration("test", vhostConfig); - assertEquals(2, qConf.getMaximumQueueDepth()); - - } - - public void testGetMaximumMessageSize() throws ConfigurationException - { - // Check default value - QueueConfiguration qConf = new QueueConfiguration("test", _emptyConf); - assertEquals(0, qConf.getMaximumMessageSize()); - - // Check explicit value - VirtualHostConfiguration vhostConfig = overrideConfiguration("maximumMessageSize", 2); - qConf = new QueueConfiguration("test", vhostConfig); - assertEquals(2, qConf.getMaximumMessageSize()); - - } - - public void testGetMaximumMessageCount() throws ConfigurationException - { - // Check default value - QueueConfiguration qConf = new QueueConfiguration("test", _emptyConf); - assertEquals(0, qConf.getMaximumMessageCount()); - - // Check explicit value - VirtualHostConfiguration vhostConfig = overrideConfiguration("maximumMessageCount", 2); - qConf = new QueueConfiguration("test", vhostConfig); - assertEquals(2, qConf.getMaximumMessageCount()); - - } - - public void testGetMinimumAlertRepeatGap() throws Exception - { - QueueConfiguration qConf = new QueueConfiguration("test", _emptyConf); - - // Check default value - qConf = new QueueConfiguration("test", _emptyConf); - assertEquals(0, qConf.getMinimumAlertRepeatGap()); - - // Check explicit value - VirtualHostConfiguration vhostConfig = overrideConfiguration("minimumAlertRepeatGap", 2); - qConf = new QueueConfiguration("test", vhostConfig); - assertEquals(2, qConf.getMinimumAlertRepeatGap()); - - } - - public void testSortQueueConfiguration() throws ConfigurationException - { - //Check default value - QueueConfiguration qConf = new QueueConfiguration("test", _emptyConf); - assertNull(qConf.getQueueSortKey()); - - // Check explicit value - final VirtualHostConfiguration vhostConfig = overrideConfiguration("sortKey", "test-sort-key"); - qConf = new QueueConfiguration("test", vhostConfig); - assertEquals("test-sort-key", qConf.getQueueSortKey()); - } - - public void testQueueDescription() throws ConfigurationException - { - //Check default value - QueueConfiguration qConf = new QueueConfiguration("test", _emptyConf); - assertNull(qConf.getDescription()); - - // Check explicit value - final VirtualHostConfiguration vhostConfig = overrideConfiguration("description", "mydescription"); - qConf = new QueueConfiguration("test", vhostConfig); - assertEquals("mydescription", qConf.getDescription()); - } - - - public void testQueueSingleArgument() throws ConfigurationException - { - //Check default value - QueueConfiguration qConf = new QueueConfiguration("test", _emptyConf); - assertTrue(qConf.getArguments().isEmpty()); - - // Check explicit value - final VirtualHostConfiguration vhostConfig = overrideConfiguration("argument", QueueArgumentsConverter.QPID_GROUP_HEADER_KEY + "=mykey"); - qConf = new QueueConfiguration("test", vhostConfig); - assertEquals(Collections.singletonMap(QueueArgumentsConverter.QPID_GROUP_HEADER_KEY,"mykey"), qConf.getArguments()); - } - - - public void testQueueMultipleArguments() throws ConfigurationException - { - //Check default value - QueueConfiguration qConf = new QueueConfiguration("test", _emptyConf); - assertTrue(qConf.getArguments().isEmpty()); - - - PropertiesConfiguration queueConfig = new PropertiesConfiguration(); - queueConfig.addProperty("queues.queue.test.argument", QueueArgumentsConverter.QPID_GROUP_HEADER_KEY + "=mykey"); - queueConfig.addProperty("queues.queue.test.argument", QueueArgumentsConverter.QPID_SHARED_MSG_GROUP + "=1"); - - CompositeConfiguration config = new CompositeConfiguration(); - config.addConfiguration(_fullHostConf.getConfig()); - config.addConfiguration(queueConfig); - - final VirtualHostConfiguration vhostConfig = new VirtualHostConfiguration("test", config, _broker);; - qConf = new QueueConfiguration("test", vhostConfig); - assertEquals(2, qConf.getArguments().size()); - assertEquals("mykey", qConf.getArguments().get(QueueArgumentsConverter.QPID_GROUP_HEADER_KEY)); - assertEquals("1", qConf.getArguments().get(QueueArgumentsConverter.QPID_SHARED_MSG_GROUP)); - } - - - private VirtualHostConfiguration overrideConfiguration(String property, Object value) - throws ConfigurationException - { - PropertiesConfiguration queueConfig = new PropertiesConfiguration(); - queueConfig.setProperty("queues.queue.test." + property, value); - - CompositeConfiguration config = new CompositeConfiguration(); - config.addConfiguration(_fullHostConf.getConfig()); - config.addConfiguration(queueConfig); - - return new VirtualHostConfiguration("test", config, _broker); - } -} diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java deleted file mode 100644 index bd11f7192b..0000000000 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java +++ /dev/null @@ -1,410 +0,0 @@ -/* - * 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. - * - */ -package org.apache.qpid.server.configuration; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import org.apache.commons.configuration.Configuration; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.XMLConfiguration; - -import org.apache.qpid.server.logging.EventLogger; -import org.apache.qpid.server.logging.NullMessageLogger; -import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.queue.PriorityQueue; -import org.apache.qpid.server.queue.AMQQueue; -import org.apache.qpid.server.store.TestableMemoryMessageStore; -import org.apache.qpid.server.util.BrokerTestHelper; -import org.apache.qpid.server.virtualhost.VirtualHost; -import org.apache.qpid.server.virtualhost.VirtualHostRegistry; -import org.apache.qpid.test.utils.QpidTestCase; - -public class VirtualHostConfigurationTest extends QpidTestCase -{ - private VirtualHostRegistry _virtualHostRegistry; - private XMLConfiguration _configXml; - private Broker _broker; - - @Override - public void setUp() throws Exception - { - super.setUp(); - BrokerTestHelper.setUp(); - _configXml = new XMLConfiguration(); - _configXml.addProperty("virtualhosts.virtualhost(-1).name", getName()); - _configXml.addProperty("virtualhosts.virtualhost(-1)."+getName()+".store.class", TestableMemoryMessageStore.class.getName()); - EventLogger eventLogger = new EventLogger(); - _virtualHostRegistry = new VirtualHostRegistry(eventLogger); - _broker = mock(Broker.class); - when(_broker.getAttribute(Broker.VIRTUALHOST_HOUSEKEEPING_CHECK_PERIOD)).thenReturn(30000l); - } - - @Override - public void tearDown() throws Exception - { - try - { - if (_virtualHostRegistry != null) - { - _virtualHostRegistry.close(); - } - } - finally - { - BrokerTestHelper.tearDown(); - super.tearDown(); - } - } - - private XMLConfiguration getConfigXml() - { - return _configXml; - } - - private VirtualHost createVirtualHost(String hostName) throws Exception - { - Configuration config = getConfigXml().subset("virtualhosts.virtualhost." + XmlConfigurationUtilities.escapeTagName(hostName)); - VirtualHostConfiguration virtualHostConfiguration = new VirtualHostConfiguration(hostName, config, _broker); - return BrokerTestHelper.createVirtualHost(virtualHostConfiguration, _virtualHostRegistry); - } - - public void testQueuePriority() throws Exception - { - // Set up queue with 5 priorities - getConfigXml().addProperty("virtualhosts.virtualhost.testQueuePriority.queues(-1).queue(-1).name(-1)", - "atest"); - getConfigXml().addProperty("virtualhosts.virtualhost.testQueuePriority.queues.queue.atest(-1).exchange", - "amq.direct"); - getConfigXml().addProperty("virtualhosts.virtualhost.testQueuePriority.queues.queue.atest.priorities", - "5"); - - // Set up queue with JMS style priorities - getConfigXml().addProperty("virtualhosts.virtualhost.testQueuePriority.queues(-1).queue(-1).name(-1)", - "ptest"); - getConfigXml().addProperty("virtualhosts.virtualhost.testQueuePriority.queues.queue.ptest(-1).exchange", - "amq.direct"); - getConfigXml().addProperty("virtualhosts.virtualhost.testQueuePriority.queues.queue.ptest.priority", - "true"); - - // Set up queue with no priorities - getConfigXml().addProperty("virtualhosts.virtualhost.testQueuePriority.queues(-1).queue(-1).name(-1)", - "ntest"); - getConfigXml().addProperty("virtualhosts.virtualhost.testQueuePriority.queues.queue.ntest(-1).exchange", - "amq.direct"); - getConfigXml().addProperty("virtualhosts.virtualhost.testQueuePriority.queues.queue.ntest.priority", - "false"); - - VirtualHost vhost = createVirtualHost(getName()); - - // Check that atest was a priority queue with 5 priorities - AMQQueue atest = vhost.getQueue("atest"); - assertTrue(atest instanceof PriorityQueue); - assertEquals(5, ((PriorityQueue) atest).getPriorities()); - - // Check that ptest was a priority queue with 10 priorities - AMQQueue ptest = vhost.getQueue("ptest"); - assertTrue(ptest instanceof PriorityQueue); - assertEquals(10, ((PriorityQueue) ptest).getPriorities()); - - // Check that ntest wasn't a priority queue - AMQQueue ntest = vhost.getQueue("ntest"); - assertFalse(ntest instanceof PriorityQueue); - } - - public void testQueueAlerts() throws Exception - { - // Set up queue with 5 priorities - getConfigXml().addProperty("virtualhosts.virtualhost.testQueueAlerts.queues.exchange", "amq.topic"); - getConfigXml().addProperty("virtualhosts.virtualhost.testQueueAlerts.queues.maximumQueueDepth", "1"); - getConfigXml().addProperty("virtualhosts.virtualhost.testQueueAlerts.queues.maximumMessageSize", "2"); - getConfigXml().addProperty("virtualhosts.virtualhost.testQueueAlerts.queues.maximumMessageAge", "3"); - - getConfigXml().addProperty("virtualhosts.virtualhost.testQueueAlerts.queues(-1).queue(1).name(1)", "atest"); - getConfigXml().addProperty("virtualhosts.virtualhost.testQueueAlerts.queues.queue.atest(-1).exchange", "amq.direct"); - getConfigXml().addProperty("virtualhosts.virtualhost.testQueueAlerts.queues.queue.atest(-1).maximumQueueDepth", "4"); - getConfigXml().addProperty("virtualhosts.virtualhost.testQueueAlerts.queues.queue.atest(-1).maximumMessageSize", "5"); - getConfigXml().addProperty("virtualhosts.virtualhost.testQueueAlerts.queues.queue.atest(-1).maximumMessageAge", "6"); - - getConfigXml().addProperty("virtualhosts.virtualhost.testQueueAlerts.queues(-1).queue(-1).name(-1)", "btest"); - - VirtualHost vhost = createVirtualHost(getName()); - - // Check specifically configured values - AMQQueue aTest = vhost.getQueue("atest"); - assertEquals(4, aTest.getAlertThresholdQueueDepthBytes()); - assertEquals(5, aTest.getAlertThresholdMessageSize()); - assertEquals(6, aTest.getAlertThresholdMessageAge()); - - // Check default values - AMQQueue bTest = vhost.getQueue("btest"); - assertEquals(1, bTest.getAlertThresholdQueueDepthBytes()); - assertEquals(2, bTest.getAlertThresholdMessageSize()); - assertEquals(3, bTest.getAlertThresholdMessageAge()); - } - - public void testMaxDeliveryCount() throws Exception - { - // Set up vhosts and queues - getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + ".queues.maximumDeliveryCount", 5); - getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + ".queues(-1).queue(-1).name", "biggles"); - getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + ".queues.queue.biggles.maximumDeliveryCount", 4); - getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + ".queues(-1).queue(-1).name", "beetle"); - - VirtualHost test = createVirtualHost(getName()); - - // Enabled specifically - assertEquals("Test vhost MDC was configured as enabled", 5 ,test.getConfiguration().getMaxDeliveryCount()); - - // Enabled by test vhost default - assertEquals("beetle queue DLQ was configured as enabled", test.getConfiguration().getMaxDeliveryCount(), test.getConfiguration().getQueueConfiguration("beetle").getMaxDeliveryCount()); - - // Disabled specifically - assertEquals("Biggles queue DLQ was configured as disabled", 4, test.getConfiguration().getQueueConfiguration("biggles").getMaxDeliveryCount()); - } - - /** - * Tests the full set of configuration options for enabling DLQs in the broker configuration. - */ - public void testIsDeadLetterQueueEnabled() throws Exception - { - // Set up vhosts and queues - getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + ".queues.deadLetterQueues", "true"); - getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + ".queues(-1).queue(-1).name", "biggles"); - getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + ".queues.queue.biggles.deadLetterQueues", "false"); - getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + ".queues(-1).queue(-1).name", "beetle"); - - - getConfigXml().addProperty("virtualhosts.virtualhost.name", getName() + "Extra"); - getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + "Extra.queues(-1).queue(-1).name", "r2d2"); - getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + "Extra.queues.queue.r2d2.deadLetterQueues", "true"); - getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + "Extra.queues(-1).queue(-1).name", "c3p0"); - getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + "Extra.store.class", TestableMemoryMessageStore.class.getName()); - - VirtualHost test = createVirtualHost(getName()); - VirtualHost extra = createVirtualHost(getName() + "Extra"); - - // Enabled specifically - assertTrue("Test vhost DLQ was configured as enabled", test.getConfiguration().isDeadLetterQueueEnabled()); - assertTrue("r2d2 queue DLQ was configured as enabled", extra.getConfiguration().getQueueConfiguration("r2d2").isDeadLetterQueueEnabled()); - - // Enabled by test vhost default - assertTrue("beetle queue DLQ was configured as enabled", test.getConfiguration().getQueueConfiguration("beetle").isDeadLetterQueueEnabled()); - - // Disabled specifically - assertFalse("Biggles queue DLQ was configured as disabled", test.getConfiguration().getQueueConfiguration("biggles").isDeadLetterQueueEnabled()); - - // Using broker default of disabled - assertFalse("Extra vhost DLQ disabled, using broker default", extra.getConfiguration().isDeadLetterQueueEnabled()); - assertFalse("c3p0 queue DLQ was configured as disabled", extra.getConfiguration().getQueueConfiguration("c3p0").isDeadLetterQueueEnabled()); - - // Get queues - AMQQueue biggles = test.getQueue("biggles"); - AMQQueue beetle = test.getQueue("beetle"); - AMQQueue r2d2 = extra.getQueue("r2d2"); - AMQQueue c3p0 = extra.getQueue("c3p0"); - - // Disabled specifically for this queue, overriding virtualhost setting - assertNull("Biggles queue should not have alt exchange as DLQ should be configured as disabled: " + biggles.getAlternateExchange(), biggles.getAlternateExchange()); - - // Enabled for all queues on the virtualhost - assertNotNull("Beetle queue should have an alt exchange as DLQ should be enabled, using test vhost default", beetle.getAlternateExchange()); - - // Enabled specifically for this queue, overriding the default broker setting of disabled - assertNotNull("R2D2 queue should have an alt exchange as DLQ should be configured as enabled", r2d2.getAlternateExchange()); - - // Disabled by the default broker setting - assertNull("C3PO queue should not have an alt exchange as DLQ should be disabled, using broker default", c3p0.getAlternateExchange()); - } - - /** - * Test that the house keeping pool sizes is correctly processed - * - * @throws Exception - */ - public void testHouseKeepingThreadCount() throws Exception - { - int initialPoolSize = 10; - - getConfigXml().addProperty("virtualhosts.virtualhost.testHouseKeepingThreadCount.housekeeping.poolSize", - initialPoolSize); - - VirtualHost vhost = createVirtualHost(getName()); - - assertEquals("HouseKeeping PoolSize not set correctly.", - initialPoolSize, vhost.getHouseKeepingPoolSize()); - } - - /** - * Test that we can dynamically change the thread pool size - * - * @throws Exception - */ - public void testDynamicHouseKeepingPoolSizeChange() throws Exception - { - int initialPoolSize = 10; - - getConfigXml().addProperty("virtualhosts.virtualhost.testDynamicHouseKeepingPoolSizeChange.housekeeping.poolSize", - initialPoolSize); - - VirtualHost vhost = createVirtualHost(getName()); - - assertEquals("HouseKeeping PoolSize not set correctly.", - initialPoolSize, vhost.getHouseKeepingPoolSize()); - - vhost.setHouseKeepingPoolSize(1); - - assertEquals("HouseKeeping PoolSize not correctly change.", - 1, vhost.getHouseKeepingPoolSize()); - - } - - /** - * Tests that the old element security.authentication.name is rejected. This element - * was never supported properly as authentication is performed before the virtual host - * is considered. - */ - public void testSecurityAuthenticationNameRejected() throws Exception - { - getConfigXml().addProperty("virtualhosts.virtualhost.testSecurityAuthenticationNameRejected.security.authentication.name", - "testdb"); - - try - { - createVirtualHost(getName()); - fail("Exception not thrown"); - } - catch(ConfigurationException ce) - { - assertEquals("Incorrect error message", - "Validation error : security/authentication/name is no longer a supported element within the configuration xml." + - " It appears in virtual host definition : " + getName(), - ce.getMessage()); - } - } - - /* - * Tests that the old element housekeeping.expiredMessageCheckPeriod. ... (that was - * replaced by housekeeping.checkPeriod) is rejected. - */ - public void testExpiredMessageCheckPeriodRejected() throws Exception - { - getConfigXml().addProperty("virtualhosts.virtualhost.testExpiredMessageCheckPeriodRejected.housekeeping.expiredMessageCheckPeriod", - 5); - - try - { - createVirtualHost(getName()); - fail("Exception not thrown"); - } - catch (ConfigurationException ce) - { - assertEquals("Incorrect error message", - "Validation error : housekeeping/expiredMessageCheckPeriod must be replaced by housekeeping/checkPeriod." + - " It appears in virtual host definition : " + getName(), - ce.getMessage()); - } - } - - /* - * Tests that the queues with dots in the names are fully supported. The XML configuration - * had problems with handling the tags containing dots due to the design of the Apache Commons - * Configuration library. The dots need to be escaped when accessing the XML configuration. - */ - public void testDotsInQueueName() throws Exception - { - // Set up vhosts and queue - getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + ".queues(-1).queue(-1).name", "dot.in.a.name"); - // Add a single property which is inside the <dot.in.a.name> queue tag - the maximum delivery count - getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + ".queues.queue.dot..in..a..name.maximumDeliveryCount", 5); - - VirtualHost test = createVirtualHost(getName()); - - // Check, that the property stored within the <dot.in.a.name> tag has been properly loaded - assertEquals("queue with dots in its name has been properly loaded", 5, test.getConfiguration().getQueueConfiguration("dot.in.a.name").getMaxDeliveryCount()); - } - - /* - * Tests that the virtual hosts with dots in the names are fully supported. The XML - * configuration had problems with handling the tags containing dots due to the design - * of the Apache Commons Configuration library. The dots need to be escaped when - * accessing the XML configuration. - */ - public void testDotsInVirtualHostName() throws Exception - { - // Set up vhosts - getConfigXml().addProperty("virtualhosts.virtualhost.name", "dot.in.a.name"); - // Add a single property which is inside the <dot.in.a.name> virtual host tag - the message store - getConfigXml().addProperty("virtualhosts.virtualhost.dot..in..a..name.store.class", TestableMemoryMessageStore.class.getName()); - - VirtualHost test = createVirtualHost("dot.in.a.name"); - - // Check, that the property stored within the <dot.in.a.name> tag has been properly loaded - assertEquals("virtual host with dots in the name has been properly loaded", TestableMemoryMessageStore.class.getName(), test.getMessageStore().getClass().getName()); - } - - public void testStoreTransactionIdleTimeoutClose() throws Exception - { - VirtualHost vhost = createVirtualHost(getName()); - assertEquals("Unexpected StoreTransactionIdleTimeoutClose value", 0, vhost.getConfiguration().getTransactionTimeoutIdleClose()); - - when(_broker.getAttribute(Broker.VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE)).thenReturn(1000l); - assertEquals("Unexpected StoreTransactionIdleTimeoutClose value", 1000l, vhost.getConfiguration().getTransactionTimeoutIdleClose()); - - vhost.getConfiguration().getConfig().setProperty("transactionTimeout.idleClose", 2000l); - assertEquals("Unexpected StoreTransactionIdleTimeoutClose value", 2000l, vhost.getConfiguration().getTransactionTimeoutIdleClose()); - } - - public void testStoreTransactionIdleTimeoutWarn() throws Exception - { - VirtualHost vhost = createVirtualHost(getName()); - assertEquals("Unexpected StoreTransactionIdleTimeoutWarn value", 0, vhost.getConfiguration().getTransactionTimeoutIdleWarn()); - - when(_broker.getAttribute(Broker.VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_WARN)).thenReturn(1000l); - assertEquals("Unexpected StoreTransactionIdleTimeoutWarn value", 1000l, vhost.getConfiguration().getTransactionTimeoutIdleWarn()); - - vhost.getConfiguration().getConfig().setProperty("transactionTimeout.idleWarn", 2000l); - assertEquals("Unexpected StoreTransactionIdleTimeoutWarn value", 2000l, vhost.getConfiguration().getTransactionTimeoutIdleWarn()); - } - - public void testStoreTransactionOpenTimeoutClose() throws Exception - { - VirtualHost vhost = createVirtualHost(getName()); - assertEquals("Unexpected StoreTransactionOpenTimeoutClose value", 0, vhost.getConfiguration().getTransactionTimeoutOpenClose()); - - when(_broker.getAttribute(Broker.VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE)).thenReturn(1000l); - assertEquals("Unexpected StoreTransactionOpenTimeoutClose value", 1000l, vhost.getConfiguration().getTransactionTimeoutOpenClose()); - - vhost.getConfiguration().getConfig().setProperty("transactionTimeout.openClose", 2000l); - assertEquals("Unexpected StoreTransactionOpenTimeoutClose value", 2000l, vhost.getConfiguration().getTransactionTimeoutOpenClose()); - } - - public void testStoreTransactionOpenTimeoutWarn() throws Exception - { - VirtualHost vhost = createVirtualHost(getName()); - assertEquals("Unexpected StoreTransactionOpenTimeoutWarn value", 0, vhost.getConfiguration().getTransactionTimeoutOpenWarn()); - - when(_broker.getAttribute(Broker.VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_WARN)).thenReturn(1000l); - assertEquals("Unexpected StoreTransactionOpenTimeoutWarn value", 1000l, vhost.getConfiguration().getTransactionTimeoutOpenWarn()); - - vhost.getConfiguration().getConfig().setProperty("transactionTimeout.openWarn", 2000l); - assertEquals("Unexpected StoreTransactionOpenTimeoutWarn value", 2000l, vhost.getConfiguration().getTransactionTimeoutOpenWarn()); - } -} diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/plugins/AbstractConfigurationTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/plugins/AbstractConfigurationTest.java deleted file mode 100644 index 79abae85cd..0000000000 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/plugins/AbstractConfigurationTest.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * - * 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. - * - */ -package org.apache.qpid.server.configuration.plugins; - -import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.XMLConfiguration; - -import org.apache.log4j.Logger; -import org.apache.qpid.test.utils.QpidTestCase; - -import java.util.List; - -/** - * Test that verifies that given a Configuration a ConfigurationPlugin can - * process and validate that data. - */ -public class AbstractConfigurationTest extends QpidTestCase -{ - private static final Logger _logger = Logger.getLogger(AbstractConfigurationTest.class); - - private static final double DOUBLE = 3.14; - private static final long POSITIVE_LONG = 1000; - private static final long NEGATIVE_LONG = -1000; - private static final int LIST_SIZE = 3; - - class TestConfigPlugin extends AbstractConfiguration - { - @Override - public String[] getElementsProcessed() - { - return new String[]{"[@property]", "name", - "positiveLong", "negativeLong", - "true", "list", "double"}; - } - - @Override - public void validateConfiguration() throws ConfigurationException - { - // no validation required - } - - public String getName() - { - return getStringValue("name"); - } - - public String getProperty() - { - return getStringValue("[@property]"); - } - - - } - - private TestConfigPlugin _plugin; - - @Override - public void setUp() throws Exception - { - // Test does not directly use the AppRegistry but the configured broker - // is required for the correct ConfigurationPlugin processing - super.setUp(); - XMLConfiguration xmlConfig = new XMLConfiguration(); - xmlConfig.addProperty("base.element[@property]", "property"); - xmlConfig.addProperty("base.element.name", "name"); - // We make these strings as that is how they will be read from the file. - xmlConfig.addProperty("base.element.positiveLong", String.valueOf(POSITIVE_LONG)); - xmlConfig.addProperty("base.element.negativeLong", String.valueOf(NEGATIVE_LONG)); - xmlConfig.addProperty("base.element.boolean", String.valueOf(true)); - xmlConfig.addProperty("base.element.double", String.valueOf(DOUBLE)); - for (int i = 0; i < LIST_SIZE; i++) - { - xmlConfig.addProperty("base.element.list", i); - } - - //Use a composite configuration as this is what our broker code uses. - CompositeConfiguration composite = new CompositeConfiguration(); - composite.addConfiguration(xmlConfig); - - _plugin = new TestConfigPlugin(); - - try - { - _plugin.setConfiguration("base.element", composite.subset("base.element")); - } - catch (ConfigurationException e) - { - _logger.error("Error setting up plugin configuration", e); - fail(e.toString()); - } - - } - - public void testHasConfiguration() - { - assertTrue("Plugin has no configuration ", _plugin.hasConfiguration()); - _plugin = new TestConfigPlugin(); - assertFalse("Plugins has configuration", _plugin.hasConfiguration()); - } - - public void testValuesRetrieved() - { - assertEquals("Name not correct", "name", _plugin.getName()); - assertEquals("Property not correct", "property", _plugin.getProperty()); - } - - public void testContainsPositiveLong() - { - assertTrue("positiveLong is not positive", _plugin.containsPositiveLong("positiveLong")); - assertFalse("NonExistentValue was found", _plugin.containsPositiveLong("NonExistentValue")); - - try - { - _plugin.validatePositiveLong("positiveLong"); - } - catch (ConfigurationException e) - { - fail(e.getMessage()); - } - - try - { - _plugin.validatePositiveLong("negativeLong"); - fail("negativeLong should not be positive"); - } - catch (ConfigurationException e) - { - assertEquals("negativeLong should not be reported as positive", - "TestConfigPlugin: unable to configure invalid negativeLong:" + NEGATIVE_LONG, e.getMessage()); - } - - } - - public void testDouble() - { - assertEquals("Double value not returned", DOUBLE, _plugin.getDoubleValue("double")); - assertEquals("default Double value not returned", 0.0, _plugin.getDoubleValue("NonExistent")); - assertEquals("set default Double value not returned", DOUBLE, _plugin.getDoubleValue("NonExistent", DOUBLE)); - } - - public void testLong() - { - assertTrue("Long value not returned", _plugin.containsLong("positiveLong")); - assertFalse("Long value returned", _plugin.containsLong("NonExistent")); - assertEquals("Long value not returned", POSITIVE_LONG, _plugin.getLongValue("positiveLong")); - assertEquals("default Long value not returned", 0, _plugin.getLongValue("NonExistent")); - assertEquals("set default Long value not returned", NEGATIVE_LONG, _plugin.getLongValue("NonExistent", NEGATIVE_LONG)); - } - - public void testInt() - { - assertTrue("Int value not returned", _plugin.containsInt("positiveLong")); - assertFalse("Int value returned", _plugin.containsInt("NonExistent")); - assertEquals("Int value not returned", (int) POSITIVE_LONG, _plugin.getIntValue("positiveLong")); - assertEquals("default Int value not returned", 0, _plugin.getIntValue("NonExistent")); - assertEquals("set default Int value not returned", (int) NEGATIVE_LONG, _plugin.getIntValue("NonExistent", (int) NEGATIVE_LONG)); - } - - public void testString() - { - assertEquals("String value not returned", "name", _plugin.getStringValue("name")); - assertNull("Null default String value not returned", _plugin.getStringValue("NonExistent", null)); - assertNull("default String value not returned", _plugin.getStringValue("NonExistent")); - assertEquals("default String value not returned", "Default", _plugin.getStringValue("NonExistent", "Default")); - } - - public void testBoolean() - { - assertTrue("Boolean value not returned", _plugin.containsBoolean("boolean")); - assertFalse("Boolean value not returned", _plugin.containsBoolean("NonExistent")); - assertTrue("Boolean value not returned", _plugin.getBooleanValue("boolean")); - assertFalse("default String value not returned", _plugin.getBooleanValue("NonExistent")); - assertTrue("set default String value not returned", _plugin.getBooleanValue("NonExistent", true)); - } - - public void testList() - { - assertTrue("list not found in plugin", _plugin.contains("list")); - List list = _plugin.getListValue("list"); - assertNotNull("Returned list should not be null", list); - assertEquals("List should not be empty", LIST_SIZE, list.size()); - - list = _plugin.getListValue("NonExistent"); - assertNotNull("Returned list should not be null", list); - assertEquals("List is not empty", 0, list.size()); - } - - public void testContains() - { - assertTrue("list not found in plugin", _plugin.contains("list")); - assertFalse("NonExistent found in plugin", _plugin.contains("NonExistent")); - } - -} diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostRecovererTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostRecovererTest.java index 9649838b00..0cf89842a1 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostRecovererTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostRecovererTest.java @@ -23,7 +23,6 @@ package org.apache.qpid.server.configuration.startup; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import java.io.File; import java.util.HashMap; import java.util.Map; @@ -36,33 +35,9 @@ import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.stats.StatisticsGatherer; import org.apache.qpid.server.virtualhost.StandardVirtualHostFactory; -import org.apache.qpid.test.utils.TestFileUtils; public class VirtualHostRecovererTest extends TestCase { - public void testCreate() - { - StatisticsGatherer statisticsGatherer = mock(StatisticsGatherer.class); - SecurityManager securityManager = mock(SecurityManager.class); - ConfigurationEntry entry = mock(ConfigurationEntry.class); - Broker parent = mock(Broker.class); - when(parent.getAttribute(Broker.VIRTUALHOST_HOUSEKEEPING_CHECK_PERIOD)).thenReturn(3000l); - when(parent.getSecurityManager()).thenReturn(securityManager); - - VirtualHostRecoverer recoverer = new VirtualHostRecoverer(statisticsGatherer); - Map<String, Object> attributes = new HashMap<String, Object>(); - String name = getName(); - attributes.put(VirtualHost.NAME, name); - File file = TestFileUtils.createTempFile(this, ".xml", "<virtualhosts><virtualhost><name>" + name + "</name><" + name - + "></" + name + "></virtualhost></virtualhosts>"); - attributes.put(VirtualHost.CONFIG_PATH, file.getAbsolutePath()); - when(entry.getAttributes()).thenReturn(attributes); - - VirtualHost host = recoverer.create(null, entry, parent); - - assertNotNull("Null is returned", host); - assertEquals("Unexpected name", getName(), host.getName()); - } public void testCreateVirtualHostFromStoreConfigAttributes() { @@ -91,8 +66,8 @@ public class VirtualHostRecovererTest extends TestCase { Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(VirtualHost.NAME, getName()); - attributes.put(VirtualHost.CONFIG_PATH, "/path/to/virtualhost.xml"); - String[] mandatoryAttributes = {VirtualHost.NAME, VirtualHost.CONFIG_PATH}; + attributes.put(VirtualHost.TYPE, "STANDARD"); + String[] mandatoryAttributes = {VirtualHost.NAME, VirtualHost.TYPE}; checkMandatoryAttributesAreValidated(mandatoryAttributes, attributes); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java index 133eb94e43..fdf3ec24a1 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java @@ -79,7 +79,7 @@ public abstract class ConfigurationEntryStoreTestCase extends QpidTestCase _virtualHostId = UUID.randomUUID(); _virtualHostAttributes = new HashMap<String, Object>(); _virtualHostAttributes.put(VirtualHost.NAME, "test"); - _virtualHostAttributes.put(VirtualHost.CONFIG_PATH, "/path/to/phantom/test"); + _virtualHostAttributes.put(VirtualHost.TYPE, "STANDARD"); _authenticationProviderId = UUID.randomUUID(); _authenticationProviderAttributes = new HashMap<String, Object>(); @@ -135,7 +135,7 @@ public abstract class ConfigurationEntryStoreTestCase extends QpidTestCase { Map<String, Object> virtualHostAttributes = new HashMap<String, Object>(); virtualHostAttributes.put(VirtualHost.NAME, getName()); - virtualHostAttributes.put(VirtualHost.CONFIG_PATH, "/path/to/phantom/virtualhost/config"); + virtualHostAttributes.put(VirtualHost.TYPE, "STANDARD"); UUID virtualHostId = UUID.randomUUID(); addConfiguration(virtualHostId, VirtualHost.class.getSimpleName(), virtualHostAttributes); @@ -149,13 +149,13 @@ public abstract class ConfigurationEntryStoreTestCase extends QpidTestCase { Map<String, Object> virtualHost1Attributes = new HashMap<String, Object>(); virtualHost1Attributes.put(VirtualHost.NAME, "test1"); - virtualHost1Attributes.put(VirtualHost.CONFIG_PATH, "/path/to/phantom/virtualhost/config1"); + virtualHost1Attributes.put(VirtualHost.TYPE, "STANDARD"); UUID virtualHost1Id = UUID.randomUUID(); addConfiguration(virtualHost1Id, VirtualHost.class.getSimpleName(), virtualHost1Attributes); Map<String, Object> virtualHost2Attributes = new HashMap<String, Object>(); virtualHost2Attributes.put(VirtualHost.NAME, "test1"); - virtualHost2Attributes.put(VirtualHost.CONFIG_PATH, "/path/to/phantom/virtualhost/config2"); + virtualHost2Attributes.put(VirtualHost.TYPE, "STANDARD"); UUID virtualHost2Id = UUID.randomUUID(); addConfiguration(virtualHost2Id, VirtualHost.class.getSimpleName(), virtualHost2Attributes); @@ -207,7 +207,7 @@ public abstract class ConfigurationEntryStoreTestCase extends QpidTestCase { Map<String, Object> virtualHostAttributes = new HashMap<String, Object>(); virtualHostAttributes.put(VirtualHost.NAME, "test1"); - virtualHostAttributes.put(VirtualHost.CONFIG_PATH, "/path/to/phantom/virtualhost/config1"); + virtualHostAttributes.put(VirtualHost.TYPE, "STANDARD"); UUID virtualHostId = UUID.randomUUID(); ConfigurationEntry hostEntry = new ConfigurationEntry(virtualHostId, VirtualHost.class.getSimpleName(), virtualHostAttributes, Collections.<UUID> emptySet(), _store); @@ -228,7 +228,7 @@ public abstract class ConfigurationEntryStoreTestCase extends QpidTestCase Map<String, Object> virtualHostAttributes = new HashMap<String, Object>(); virtualHostAttributes.put(VirtualHost.NAME, "test"); - virtualHostAttributes.put(VirtualHost.CONFIG_PATH, "/path/to/new/phantom/test/configuration"); + virtualHostAttributes.put(VirtualHost.TYPE, "STANDARD"); ConfigurationEntry updatedEntry = new ConfigurationEntry(_virtualHostId, VirtualHost.class.getSimpleName(), virtualHostAttributes, hostEntry.getChildrenIds(), _store); @@ -372,7 +372,7 @@ public abstract class ConfigurationEntryStoreTestCase extends QpidTestCase UUID virtualHostId = UUID.randomUUID(); Map<String, Object> virtualHostAttributes = new HashMap<String, Object>(); virtualHostAttributes.put(VirtualHost.NAME, "test1"); - virtualHostAttributes.put(VirtualHost.CONFIG_PATH, "/path/to/phantom/virtualhost/config1"); + virtualHostAttributes.put(VirtualHost.TYPE, "STANDARD"); ConfigurationEntry hostEntry = new ConfigurationEntry(virtualHostId, VirtualHost.class.getSimpleName(), virtualHostAttributes, Collections.<UUID> emptySet(), _store); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java index 34b4fbf1ab..bcdfce1d0a 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java @@ -213,7 +213,7 @@ public class ManagementModeStoreHandlerTest extends QpidTestCase when(virtualHost.getId()).thenReturn(virtualHostId); when(virtualHost.getType()).thenReturn(VirtualHost.class.getSimpleName()); Map<String, Object> attributes = new HashMap<String, Object>(); - attributes.put(VirtualHost.CONFIG_PATH, "/path/to/host.xml"); + attributes.put(VirtualHost.TYPE, "STANDARD"); when(virtualHost.getAttributes()).thenReturn(attributes); when(_store.getEntry(virtualHostId)).thenReturn(virtualHost); when(_root.getChildrenIds()).thenReturn(new HashSet<UUID>(Arrays.asList(_portEntryId, virtualHostId))); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/messages/AbstractTestMessages.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/messages/AbstractTestMessages.java index db52bb0e29..d0a282c20f 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/messages/AbstractTestMessages.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/messages/AbstractTestMessages.java @@ -20,9 +20,6 @@ */ package org.apache.qpid.server.logging.messages; -import org.apache.commons.configuration.Configuration; -import org.apache.commons.configuration.PropertiesConfiguration; - import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.logging.LogMessage; import org.apache.qpid.server.logging.LogSubject; @@ -35,7 +32,6 @@ import java.util.List; public abstract class AbstractTestMessages extends QpidTestCase { - protected Configuration _config = new PropertiesConfiguration(); protected LogMessage _logMessage = null; protected UnitTestMessageLogger _logger; protected LogSubject _logSubject = new TestBlankSubject(); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java index b8ecc4a2c0..2410df1fe0 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java @@ -54,6 +54,15 @@ public class VirtualHostTest extends QpidTestCase TaskExecutor taskExecutor = mock(TaskExecutor.class); when(taskExecutor.isTaskExecutorThread()).thenReturn(true); when(_broker.getTaskExecutor()).thenReturn(taskExecutor); + when(_broker.getAttribute(Broker.QUEUE_ALERT_THRESHOLD_MESSAGE_AGE)).thenReturn(0l); + when(_broker.getAttribute(Broker.QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE)).thenReturn(0l); + when(_broker.getAttribute(Broker.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES)).thenReturn(0l); + when(_broker.getAttribute(Broker.QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES)).thenReturn(0l); + when(_broker.getAttribute(Broker.QUEUE_ALERT_REPEAT_GAP)).thenReturn(10000l); + when(_broker.getAttribute(Broker.QUEUE_MAXIMUM_DELIVERY_ATTEMPTS)).thenReturn(0); + when(_broker.getAttribute(Broker.QUEUE_FLOW_CONTROL_RESUME_SIZE_BYTES)).thenReturn(0l); + when(_broker.getAttribute(Broker.QUEUE_FLOW_CONTROL_SIZE_BYTES)).thenReturn(0l); + when(_broker.getAttribute(Broker.QUEUE_DEAD_LETTER_QUEUE_ENABLED)).thenReturn(false); _recovererProvider = mock(RecovererProvider.class); _statisticsGatherer = mock(StatisticsGatherer.class); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java index 31a0b9d358..02921f987c 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java @@ -33,8 +33,6 @@ import java.util.UUID; import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.server.configuration.BrokerProperties; -import org.apache.qpid.server.configuration.QueueConfiguration; -import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.exchange.DefaultExchangeFactory; import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.logging.EventLogger; @@ -56,7 +54,6 @@ public class AMQQueueFactoryTest extends QpidTestCase private VirtualHost _virtualHost; private AMQQueueFactory _queueFactory; private List<AMQQueue> _queues; - private QueueConfiguration _queueConfiguration; @Override public void setUp() throws Exception @@ -67,12 +64,8 @@ public class AMQQueueFactoryTest extends QpidTestCase _virtualHost = mock(VirtualHost.class); when(_virtualHost.getSecurityManager()).thenReturn(mock(SecurityManager.class)); - - VirtualHostConfiguration vhostConfig = mock(VirtualHostConfiguration.class); - when(_virtualHost.getConfiguration()).thenReturn(vhostConfig); when(_virtualHost.getEventLogger()).thenReturn(new EventLogger()); - _queueConfiguration = mock(QueueConfiguration.class); - when(vhostConfig.getQueueConfiguration(anyString())).thenReturn(_queueConfiguration); + DurableConfigurationStore store = mock(DurableConfigurationStore.class); when(_virtualHost.getDurableConfigurationStore()).thenReturn(store); @@ -284,15 +277,14 @@ public class AMQQueueFactoryTest extends QpidTestCase String dlExchangeName = queueName + DefaultExchangeFactory.DEFAULT_DLE_NAME_SUFFIX; String dlQueueName = queueName + AMQQueueFactory.DEFAULT_DLQ_NAME_SUFFIX; - when(_queueConfiguration.getMaxDeliveryCount()).thenReturn(5); - when(_queueConfiguration.isDeadLetterQueueEnabled()).thenReturn(true); - assertNull("The DLQ should not yet exist", _virtualHost.getQueue(dlQueueName)); assertNull("The alternate exchange should not yet exist", _virtualHost.getExchange(dlExchangeName)); Map<String,Object> attributes = new HashMap<String, Object>(); attributes.put(Queue.ID, UUID.randomUUID()); attributes.put(Queue.NAME, queueName); + attributes.put(Queue.CREATE_DLQ_ON_CREATION, true); + attributes.put(Queue.MAXIMUM_DELIVERY_ATTEMPTS, 5); AMQQueue queue = _queueFactory.createQueue(attributes); @@ -501,19 +493,16 @@ public class AMQQueueFactoryTest extends QpidTestCase } } - public void testMessageGroupFromConfig() throws Exception + public void testMessageGroupQueue() throws Exception { - Map<String,String> arguments = new HashMap<String, String>(); - - arguments.put(QueueArgumentsConverter.QPID_GROUP_HEADER_KEY,"mykey"); - arguments.put(QueueArgumentsConverter.QPID_SHARED_MSG_GROUP,"1"); - - QueueConfiguration qConf = mock(QueueConfiguration.class); - when(qConf.getArguments()).thenReturn(arguments); - when(qConf.getName()).thenReturn("test"); + Map<String,Object> attributes = new HashMap<String, Object>(); + attributes.put(Queue.ID, UUID.randomUUID()); + attributes.put(Queue.NAME, getTestName()); + attributes.put(Queue.MESSAGE_GROUP_KEY,"mykey"); + attributes.put(Queue.MESSAGE_GROUP_SHARED_GROUPS, true); - AMQQueue queue = _queueFactory.createAMQQueueImpl(qConf); + AMQQueue queue = _queueFactory.createQueue(attributes); assertEquals("mykey", queue.getAttribute(Queue.MESSAGE_GROUP_KEY)); assertEquals(Boolean.TRUE, queue.getAttribute(Queue.MESSAGE_GROUP_SHARED_GROUPS)); } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueListTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueListTest.java index 7eda8ea4fa..34371b1b11 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueListTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueListTest.java @@ -28,8 +28,8 @@ import org.apache.qpid.server.message.AMQMessageHeader; import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.model.Queue; - import org.apache.qpid.server.security.SecurityManager; +import org.apache.qpid.server.util.BrokerTestHelper; import org.apache.qpid.server.virtualhost.VirtualHost; import org.apache.qpid.test.utils.QpidTestCase; @@ -49,6 +49,7 @@ public class PriorityQueueListTest extends QpidTestCase protected void setUp() { + BrokerTestHelper.setUp(); QueueEntry[] entries = new QueueEntry[PRIORITIES.length]; Map<String,Object> queueAttributes = new HashMap<String, Object>(); queueAttributes.put(Queue.ID, UUID.randomUUID()); @@ -81,6 +82,19 @@ public class PriorityQueueListTest extends QpidTestCase _priority5message2 = entries[2]; } + @Override + public void tearDown() throws Exception + { + try + { + super.tearDown(); + } + finally + { + BrokerTestHelper.tearDown(); + } + } + public void testPriorityQueueEntryCompareToItself() { //check messages compare to themselves properly diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java index 11c2451118..a9036a49a4 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/AbstractDurableConfigurationStoreTestCase.java @@ -36,7 +36,6 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.UUID; -import org.apache.commons.configuration.Configuration; import org.apache.qpid.common.AMQPFilterTypes; import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.exchange.ExchangeImpl; @@ -69,7 +68,6 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest private String _storePath; private String _storeName; private MessageStore _messageStore; - private Configuration _configuration; private VirtualHost _virtualHost; private ConfigurationRecoveryHandler _recoveryHandler; @@ -98,7 +96,7 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest _storePath = TMP_FOLDER + File.separator + _storeName; FileUtils.delete(new File(_storePath), true); setTestSystemProperty("QPID_WORK", TMP_FOLDER); - _configuration = mock(Configuration.class); + _recoveryHandler = mock(ConfigurationRecoveryHandler.class); _storedMessageRecoveryHandler = mock(StoredMessageRecoveryHandler.class); _logRecoveryHandler = mock(TransactionLogRecoveryHandler.class); @@ -116,8 +114,6 @@ public abstract class AbstractDurableConfigurationStoreTestCase extends QpidTest when(_exchange.getId()).thenReturn(_exchangeId); when(_exchange.getExchangeType()).thenReturn(mock(ExchangeType.class)); when(_exchange.getEventLogger()).thenReturn(new EventLogger()); - when(_configuration.getString(eq(MessageStoreConstants.ENVIRONMENT_PATH_PROPERTY), anyString())).thenReturn( - _storePath); when(_virtualHost.getAttribute(eq(VirtualHost.STORE_PATH))).thenReturn(_storePath); _bindingArgs = new HashMap<String, Object>(); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMemoryMessageStoreFactory.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMemoryMessageStoreFactory.java index fd2d4215ab..e2fb96bfef 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMemoryMessageStoreFactory.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMemoryMessageStoreFactory.java @@ -21,9 +21,7 @@ package org.apache.qpid.server.store; -import java.util.Collections; import java.util.Map; -import org.apache.commons.configuration.Configuration; import org.apache.qpid.server.plugin.MessageStoreFactory; public class TestMemoryMessageStoreFactory implements MessageStoreFactory @@ -42,12 +40,6 @@ public class TestMemoryMessageStoreFactory implements MessageStoreFactory } @Override - public Map<String, Object> convertStoreConfiguration(Configuration configuration) - { - return Collections.emptyMap(); - } - - @Override public void validateAttributes(Map<String, Object> attributes) { } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestableMemoryMessageStore.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestableMemoryMessageStore.java index 6b9bb08aa9..7d4dcd0280 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestableMemoryMessageStore.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestableMemoryMessageStore.java @@ -33,6 +33,7 @@ import java.util.concurrent.atomic.AtomicInteger; */ public class TestableMemoryMessageStore extends TestMemoryMessageStore { + public static final String TYPE = "TestableMemory"; private final Map<Long, AMQQueue> _messages = new HashMap<Long, AMQQueue>(); private final AtomicInteger _messageCount = new AtomicInteger(0); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/ExchangeConfiguration.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestableMemoryMessageStoreFactory.java index 6cbaf26480..ba9b7c155e 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/ExchangeConfiguration.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestableMemoryMessageStoreFactory.java @@ -7,9 +7,9 @@ * 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 @@ -18,41 +18,30 @@ * under the License. * */ -package org.apache.qpid.server.configuration; - -import org.apache.commons.configuration.Configuration; +package org.apache.qpid.server.store; -public class ExchangeConfiguration -{ +import java.util.Map; - private Configuration _config; - private String _name; - - public ExchangeConfiguration(String name, Configuration subset) - { - _name = name; - _config = subset; - } - - public String getName() - { - return _name; - } +import org.apache.qpid.server.plugin.MessageStoreFactory; +public class TestableMemoryMessageStoreFactory implements MessageStoreFactory +{ + @Override public String getType() { - return _config.getString("type","direct"); + return TestableMemoryMessageStore.TYPE; } - public boolean getDurable() + @Override + public MessageStore createMessageStore() { - return _config.getBoolean("durable", false); + return new TestableMemoryMessageStore(); } - public boolean getAutoDelete() + @Override + public void validateAttributes(Map<String, Object> attributes) { - return _config.getBoolean("autodelete",false); } } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java index 857cc60a7e..0dc25a2ad2 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java @@ -29,14 +29,11 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.protocol.AMQConnectionModel; import org.apache.qpid.server.protocol.AMQSessionModel; -import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.configuration.store.JsonConfigurationEntryStore; import org.apache.qpid.server.exchange.DefaultExchangeFactory; import org.apache.qpid.server.model.Broker; @@ -45,9 +42,11 @@ import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.security.SubjectCreator; import org.apache.qpid.server.stats.StatisticsGatherer; +import org.apache.qpid.server.store.TestMemoryMessageStore; import org.apache.qpid.server.store.TestableMemoryMessageStore; import org.apache.qpid.server.virtualhost.StandardVirtualHostFactory; import org.apache.qpid.server.virtualhost.VirtualHost; +import org.apache.qpid.server.plugin.PluggableFactoryLoader; import org.apache.qpid.server.plugin.VirtualHostFactory; import org.apache.qpid.server.virtualhost.VirtualHostRegistry; import org.apache.qpid.server.virtualhost.QueueExistsException; @@ -82,23 +81,14 @@ public class BrokerTestHelper { } - public static VirtualHost createVirtualHost(VirtualHostConfiguration virtualHostConfiguration, VirtualHostRegistry virtualHostRegistry) + public static VirtualHost createVirtualHost(VirtualHostRegistry virtualHostRegistry, org.apache.qpid.server.model.VirtualHost modelVHost) throws Exception { - return createVirtualHost(virtualHostConfiguration, virtualHostRegistry, mock(org.apache.qpid.server.model.VirtualHost.class)); - } - - public static VirtualHost createVirtualHost(VirtualHostConfiguration virtualHostConfiguration, VirtualHostRegistry virtualHostRegistry, org.apache.qpid.server.model.VirtualHost modelVHost) - throws Exception - { - StatisticsGatherer statisticsGatherer = mock(StatisticsGatherer.class); - final VirtualHostFactory factory = - virtualHostConfiguration == null ? new StandardVirtualHostFactory() - : VirtualHostFactory.FACTORIES.get(virtualHostConfiguration.getType()); + String hostType = modelVHost.getType(); + VirtualHostFactory factory = new PluggableFactoryLoader<VirtualHostFactory>(VirtualHostFactory.class).get(hostType); VirtualHost host = factory.createVirtualHost(virtualHostRegistry, - statisticsGatherer, + mock(StatisticsGatherer.class), new SecurityManager(mock(Broker.class), false), - virtualHostConfiguration, modelVHost); if(virtualHostRegistry != null) { @@ -107,29 +97,21 @@ public class BrokerTestHelper return host; } - public static VirtualHost createVirtualHost(VirtualHostConfiguration virtualHostConfiguration) throws Exception + public static VirtualHost createVirtualHost(String name) throws Exception { - - return createVirtualHost(virtualHostConfiguration, new VirtualHostRegistry(new EventLogger())); + return createVirtualHost(name, new VirtualHostRegistry(new EventLogger())); } public static VirtualHost createVirtualHost(String name, VirtualHostRegistry virtualHostRegistry) throws Exception { - VirtualHostConfiguration vhostConfig = createVirtualHostConfiguration(name); - return createVirtualHost(vhostConfig, virtualHostRegistry); - } + org.apache.qpid.server.model.VirtualHost virtualHost = mock(org.apache.qpid.server.model.VirtualHost.class); + when(virtualHost.getType()).thenReturn(StandardVirtualHostFactory.TYPE); + when(virtualHost.getAttribute(org.apache.qpid.server.model.VirtualHost.TYPE)).thenReturn(StandardVirtualHostFactory.TYPE); - public static VirtualHost createVirtualHost(String name) throws Exception - { - VirtualHostConfiguration configuration = createVirtualHostConfiguration(name); - return createVirtualHost(configuration); - } - - private static VirtualHostConfiguration createVirtualHostConfiguration(String name) throws ConfigurationException - { - VirtualHostConfiguration vhostConfig = new VirtualHostConfiguration(name, new PropertiesConfiguration(), createBrokerMock()); - vhostConfig.setMessageStoreClass(TestableMemoryMessageStore.class.getName()); - return vhostConfig; + when(virtualHost.getStoreType()).thenReturn(TestableMemoryMessageStore.TYPE); + when(virtualHost.getAttribute(org.apache.qpid.server.model.VirtualHost.STORE_TYPE)).thenReturn(TestableMemoryMessageStore.TYPE); + when(virtualHost.getName()).thenReturn(name); + return createVirtualHost(virtualHostRegistry, virtualHost); } public static AMQSessionModel createSession(int channelId, AMQConnectionModel connection) @@ -189,5 +171,4 @@ public class BrokerTestHelper return queue; } - } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java index f3f4b0d06e..04a218d024 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/MockVirtualHost.java @@ -23,7 +23,6 @@ package org.apache.qpid.server.virtualhost; import java.util.Collection; import java.util.Map; import java.util.concurrent.ScheduledFuture; -import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.configuration.updater.TaskExecutor; import org.apache.qpid.server.connection.IConnectionRegistry; import org.apache.qpid.server.exchange.ExchangeImpl; @@ -73,11 +72,6 @@ public class MockVirtualHost implements VirtualHost return null; } - public VirtualHostConfiguration getConfiguration() - { - return null; - } - public IConnectionRegistry getConnectionRegistry() { return null; @@ -370,4 +364,10 @@ public class MockVirtualHost implements VirtualHost { return null; } + + @Override + public boolean getDefaultDeadLetterQueueEnabled() + { + return false; + } } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java index f081268337..570e748d7a 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java @@ -20,45 +20,46 @@ */ package org.apache.qpid.server.virtualhost; -import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import org.apache.commons.configuration.Configuration; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.PropertiesConfiguration; +import java.io.File; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; import org.apache.qpid.server.binding.BindingImpl; -import org.apache.qpid.server.configuration.VirtualHostConfiguration; import org.apache.qpid.server.exchange.AbstractExchange; import org.apache.qpid.server.exchange.ExchangeImpl; +import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.model.Broker; +import org.apache.qpid.server.model.Model; +import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.stats.StatisticsGatherer; +import org.apache.qpid.server.store.ConfigurationRecoveryHandler; +import org.apache.qpid.server.store.JsonFileConfigStore; import org.apache.qpid.server.store.TestMemoryMessageStore; import org.apache.qpid.server.util.BrokerTestHelper; -import org.apache.qpid.server.util.ServerScopedRuntimeException; import org.apache.qpid.test.utils.QpidTestCase; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; +import org.apache.qpid.test.utils.TestFileUtils; +import org.apache.qpid.util.FileUtils; +import org.codehaus.jackson.map.ObjectMapper; public class StandardVirtualHostTest extends QpidTestCase { private VirtualHostRegistry _virtualHostRegistry; + private File _storeFolder; @Override public void setUp() throws Exception { super.setUp(); BrokerTestHelper.setUp(); + _storeFolder = TestFileUtils.createTestDirectory(".tmp.store", true); } @Override @@ -75,6 +76,7 @@ public class StandardVirtualHostTest extends QpidTestCase { BrokerTestHelper.tearDown(); super.tearDown(); + FileUtils.delete(_storeFolder, false); } } @@ -106,25 +108,23 @@ public class StandardVirtualHostTest extends QpidTestCase { final String queueName = getName(); final String customBinding = "custom-binding"; - File config = writeConfigFile(queueName, queueName, null, false, new String[]{customBinding}); + writeConfigFile(queueName, queueName, null, false, new String[]{customBinding}); try { - createVirtualHost(queueName, config); + createVirtualHost(queueName); fail("virtualhost creation should have failed due to illegal configuration"); } - catch (ServerScopedRuntimeException e) + catch (IllegalConfigurationException e) { - Throwable cause = e.getCause(); - assertNotNull(cause); - assertEquals("Attempt to bind queue '" + queueName + "' with binding key(s) [" + customBinding + "] without specifying an exchange", cause.getMessage()); + // pass } } public void testVirtualHostBecomesActive() throws Exception { - File config = writeConfigFile(getName(), getName(), getName() +".direct", false, new String[0]); - VirtualHost vhost = createVirtualHost(getName(), config); + writeConfigFile(getName(), getName(), getName() +".direct", false, new String[0]); + VirtualHost vhost = createVirtualHost(getName()); assertNotNull(vhost); assertEquals(State.ACTIVE, vhost.getState()); } @@ -132,15 +132,15 @@ public class StandardVirtualHostTest extends QpidTestCase public void testVirtualHostHavingStoreSetAsTypeBecomesActive() throws Exception { String virtualHostName = getName(); - VirtualHost host = createVirtualHostUsingStoreType(virtualHostName); + VirtualHost host = createVirtualHost(virtualHostName); assertNotNull(host); assertEquals(State.ACTIVE, host.getState()); } public void testVirtualHostBecomesStoppedOnClose() throws Exception { - File config = writeConfigFile(getName(), getName(), getName() +".direct", false, new String[0]); - VirtualHost vhost = createVirtualHost(getName(), config); + writeConfigFile(getName(), getName(), getName() +".direct", false, new String[0]); + VirtualHost vhost = createVirtualHost(getName()); assertNotNull(vhost); assertEquals(State.ACTIVE, vhost.getState()); vhost.close(); @@ -151,7 +151,7 @@ public class StandardVirtualHostTest extends QpidTestCase public void testVirtualHostHavingStoreSetAsTypeBecomesStoppedOnClose() throws Exception { String virtualHostName = getName(); - VirtualHost host = createVirtualHostUsingStoreType(virtualHostName); + VirtualHost host = createVirtualHost(virtualHostName); assertNotNull(host); assertEquals(State.ACTIVE, host.getState()); host.close(); @@ -166,33 +166,16 @@ public class StandardVirtualHostTest extends QpidTestCase { final String queueName = getName(); final String exchangeName = "made-up-exchange"; - File config = writeConfigFile(queueName, queueName, exchangeName, true, new String[0]); - - try - { - createVirtualHost(queueName, config); - fail("virtualhost creation should have failed due to illegal configuration"); - } - catch (ServerScopedRuntimeException e) - { - Throwable cause = e.getCause(); - assertNotNull(cause); - assertEquals("Attempt to bind queue '" + queueName + "' to unknown exchange:" + exchangeName, cause.getMessage()); - } - } + writeConfigFile(queueName, queueName, exchangeName, true, new String[0]); - public void testCreateVirtualHostWithoutConfigurationInConfigFile() throws Exception - { - File config = writeConfigFile(getName(), getName(), getName() +".direct", false, new String[0]); - String hostName = getName() + "-not-existing"; try { - createVirtualHost(hostName, config); + createVirtualHost(queueName); fail("virtualhost creation should have failed due to illegal configuration"); } - catch (RuntimeException e) + catch (IllegalConfigurationException e) { - assertEquals("No configuration found for virtual host '" + hostName + "' in " + config.getAbsolutePath(), e.getMessage()); + // pass } } @@ -205,8 +188,8 @@ public class StandardVirtualHostTest extends QpidTestCase Map<String, String[]> bindingArguments = new HashMap<String, String[]>(); bindingArguments.put("ping", new String[]{"x-filter-jms-selector=select=1", "x-qpid-no-local"}); bindingArguments.put("pong", new String[]{"x-filter-jms-selector=select='pong'"}); - File config = writeConfigFile(vhostName, queueName, exchangeName, false, new String[]{"ping","pong"}, bindingArguments); - VirtualHost vhost = createVirtualHost(vhostName, config); + writeConfigFile(vhostName, queueName, exchangeName, false, new String[]{"ping","pong"}, bindingArguments); + VirtualHost vhost = createVirtualHost(vhostName); ExchangeImpl exch = vhost.getExchange(getName() +".direct"); Collection<BindingImpl> bindings = ((AbstractExchange)exch).getBindings(); @@ -246,8 +229,8 @@ public class StandardVirtualHostTest extends QpidTestCase String vhostName = getName(); String queueName = getName(); - File config = writeConfigFile(vhostName, queueName, exchangeName, false, routingKeys); - VirtualHost vhost = createVirtualHost(vhostName, config); + writeConfigFile(vhostName, queueName, exchangeName, false, routingKeys); + VirtualHost vhost = createVirtualHost(vhostName); assertNotNull("virtualhost should exist", vhost); AMQQueue queue = vhost.getQueue(queueName); @@ -263,16 +246,19 @@ public class StandardVirtualHostTest extends QpidTestCase } - private VirtualHost createVirtualHost(String vhostName, File config) throws Exception + private VirtualHost createVirtualHost(String virtualHostName) throws Exception { - Broker broker = BrokerTestHelper.createBrokerMock(); + Broker<?> broker = BrokerTestHelper.createBrokerMock(); _virtualHostRegistry = broker.getVirtualHostRegistry(); - VirtualHostConfiguration configuration = new VirtualHostConfiguration(vhostName, config, broker); - VirtualHost host = new StandardVirtualHostFactory().createVirtualHost(_virtualHostRegistry, mock(StatisticsGatherer.class), new SecurityManager(mock(Broker.class), false), configuration, - mock(org.apache.qpid.server.model.VirtualHost.class)); + org.apache.qpid.server.model.VirtualHost<?> model = mock(org.apache.qpid.server.model.VirtualHost.class); + when(model.getAttribute(org.apache.qpid.server.model.VirtualHost.CONFIG_STORE_TYPE)).thenReturn(JsonFileConfigStore.TYPE); + when(model.getAttribute(org.apache.qpid.server.model.VirtualHost.CONFIG_STORE_PATH)).thenReturn(_storeFolder.getAbsolutePath()); + when(model.getAttribute(org.apache.qpid.server.model.VirtualHost.STORE_TYPE)).thenReturn(TestMemoryMessageStore.TYPE); + when(model.getName()).thenReturn(virtualHostName); + VirtualHost host = new StandardVirtualHostFactory().createVirtualHost(_virtualHostRegistry, mock(StatisticsGatherer.class), + new SecurityManager(broker, false), model); _virtualHostRegistry.registerVirtualHost(host); - return host; } @@ -285,95 +271,79 @@ public class StandardVirtualHostTest extends QpidTestCase * @param dontDeclare if true then don't declare the exchange, even if its name is non-null * @param routingKeys routingKeys to bind the queue with (empty array = none) * @return + * @throws Exception */ - private File writeConfigFile(String vhostName, String queueName, String exchangeName, boolean dontDeclare, String[] routingKeys) + private void writeConfigFile(String vhostName, String queueName, String exchangeName, boolean dontDeclare, String[] routingKeys) throws Exception { - return writeConfigFile(vhostName, queueName, exchangeName, dontDeclare, routingKeys, null); + writeConfigFile(vhostName, queueName, exchangeName, dontDeclare, routingKeys, null); } - private File writeConfigFile(String vhostName, String queueName, String exchangeName, boolean dontDeclare, String[] routingKeys, Map<String, String[]> bindingArguments) + private void writeConfigFile(String vhostName, String queueName, String exchangeName, boolean dontDeclare, + String[] routingKeys, Map<String, String[]> bindingArguments) throws Exception { - File tmpFile = null; - try + Map<String, Object> data = new HashMap<String, Object>(); + data.put("modelVersion", Model.MODEL_VERSION); + data.put("configVersion", org.apache.qpid.server.model.VirtualHost.CURRENT_CONFIG_VERSION); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.writeValue(new File(_storeFolder, vhostName + ".json"), data); + + JsonFileConfigStore store = new JsonFileConfigStore(); + org.apache.qpid.server.model.VirtualHost<?> virtualHost = mock(org.apache.qpid.server.model.VirtualHost.class); + when(virtualHost.getName()).thenReturn(vhostName); + when(virtualHost.getAttribute(org.apache.qpid.server.model.VirtualHost.CONFIG_STORE_PATH)).thenReturn(_storeFolder.getAbsolutePath()); + ConfigurationRecoveryHandler recoveryHandler = mock(ConfigurationRecoveryHandler.class); + when(recoveryHandler.completeConfigurationRecovery()).thenReturn(org.apache.qpid.server.model.VirtualHost.CURRENT_CONFIG_VERSION); + store.configureConfigStore(virtualHost , recoveryHandler ); + + UUID exchangeId = UUIDGenerator.generateExchangeUUID(exchangeName == null? "amq.direct" : exchangeName, vhostName); + if(exchangeName != null && !dontDeclare) { - tmpFile = File.createTempFile(getName(), ".tmp"); - tmpFile.deleteOnExit(); - - FileWriter fstream = new FileWriter(tmpFile); - BufferedWriter writer = new BufferedWriter(fstream); - - //extra outer tag to please Commons Configuration - - writer.write("<virtualhosts>"); - writer.write(" <default>" + vhostName + "</default>"); - writer.write(" <virtualhost>"); - writer.write(" <name>" + vhostName + "</name>"); - writer.write(" <" + vhostName + ">"); - writer.write(" <type>" + StandardVirtualHostFactory.TYPE + "</type>"); - writer.write(" <store>"); - writer.write(" <class>" + TestMemoryMessageStore.class.getName() + "</class>"); - writer.write(" </store>"); - if(exchangeName != null && !dontDeclare) - { - writer.write(" <exchanges>"); - writer.write(" <exchange>"); - writer.write(" <type>direct</type>"); - writer.write(" <name>" + exchangeName + "</name>"); - writer.write(" </exchange>"); - writer.write(" </exchanges>"); - } - writer.write(" <queues>"); - writer.write(" <queue>"); - writer.write(" <name>" + queueName + "</name>"); - writer.write(" <" + queueName + ">"); - if(exchangeName != null) - { - writer.write(" <exchange>" + exchangeName + "</exchange>"); - } - for(String routingKey: routingKeys) + Map<String, Object> exchangeAttributes = new HashMap<String, Object>(); + exchangeAttributes.put(org.apache.qpid.server.model.Exchange.NAME, exchangeName); + exchangeAttributes.put(org.apache.qpid.server.model.Exchange.TYPE, "direct"); + exchangeAttributes.put(org.apache.qpid.server.model.Exchange.DURABLE, true); + store.create(exchangeId, org.apache.qpid.server.model.Exchange.class.getSimpleName(), exchangeAttributes); + } + + UUID queueId = UUID.randomUUID(); + Map<String, Object> queueAttributes = new HashMap<String, Object>(); + queueAttributes.put(org.apache.qpid.server.model.Queue.NAME, queueName); + queueAttributes.put(org.apache.qpid.server.model.Queue.DURABLE, true); + store.create(queueId, org.apache.qpid.server.model.Queue.class.getSimpleName(), queueAttributes); + + Map<String, Object> bindingAttributes = new HashMap<String, Object>(); + bindingAttributes.put(org.apache.qpid.server.model.Binding.NAME, queueName); + bindingAttributes.put(org.apache.qpid.server.model.Binding.QUEUE, queueId); + bindingAttributes.put(org.apache.qpid.server.model.Binding.EXCHANGE, exchangeId ); + store.create(UUID.randomUUID(), org.apache.qpid.server.model.Binding.class.getSimpleName(), bindingAttributes); + + for (int i = 0; i < routingKeys.length; i++) + { + Map<String, Object> attributes = new HashMap<String, Object>(); + attributes.put(org.apache.qpid.server.model.Binding.NAME, routingKeys[i]); + attributes.put(org.apache.qpid.server.model.Binding.QUEUE, queueId); + attributes.put(org.apache.qpid.server.model.Binding.EXCHANGE, exchangeId ); + if (bindingArguments != null && bindingArguments.containsKey(routingKeys[i])) { - writer.write(" <routingKey>" + routingKey + "</routingKey>\n"); - if (bindingArguments!= null && bindingArguments.containsKey(routingKey)) + String[] args = (String[])bindingArguments.get(routingKeys[i]); + Map<String, Object> arguments = new HashMap<String, Object>(); + for (int j = 0; j < args.length; j++) { - writer.write(" <" + routingKey + ">\n"); - String[] arguments = (String[])bindingArguments.get(routingKey); - for (String argument : arguments) + int pos = args[j].indexOf('='); + if (pos == -1) + { + arguments.put(args[j], null); + } + else { - writer.write(" <bindingArgument>" + argument + "</bindingArgument>\n"); + arguments.put(args[j].substring(0, pos), args[j].substring(pos + 1)); } - writer.write(" </" + routingKey + ">\n"); } + attributes.put(org.apache.qpid.server.model.Binding.ARGUMENTS, arguments ); } - writer.write(" </" + queueName + ">"); - writer.write(" </queue>"); - writer.write(" </queues>"); - writer.write(" </" + vhostName + ">"); - writer.write(" </virtualhost>"); - writer.write("</virtualhosts>"); - - writer.flush(); - writer.close(); - } - catch (IOException e) - { - fail("Unable to create virtualhost configuration"); + store.create(UUID.randomUUID(), org.apache.qpid.server.model.Binding.class.getSimpleName(), attributes); } - - return tmpFile; + store.close(); } - private VirtualHost createVirtualHostUsingStoreType(String virtualHostName) throws ConfigurationException, Exception - { - Broker broker = BrokerTestHelper.createBrokerMock(); - _virtualHostRegistry = broker.getVirtualHostRegistry(); - - Configuration config = new PropertiesConfiguration(); - VirtualHostConfiguration configuration = new VirtualHostConfiguration(virtualHostName, config, broker); - final org.apache.qpid.server.model.VirtualHost virtualHost = mock(org.apache.qpid.server.model.VirtualHost.class); - when(virtualHost.getAttribute(eq(org.apache.qpid.server.model.VirtualHost.STORE_TYPE))).thenReturn(TestMemoryMessageStore.TYPE); - VirtualHost host = new StandardVirtualHostFactory().createVirtualHost(_virtualHostRegistry, mock(StatisticsGatherer.class), new SecurityManager(mock(Broker.class), false), configuration, - virtualHost); - _virtualHostRegistry.registerVirtualHost(host); - return host; - } } diff --git a/qpid/java/broker-core/src/test/resources/META-INF/services/org.apache.qpid.server.plugin.MessageStoreFactory b/qpid/java/broker-core/src/test/resources/META-INF/services/org.apache.qpid.server.plugin.MessageStoreFactory index 9512fb8117..48241614d8 100644 --- a/qpid/java/broker-core/src/test/resources/META-INF/services/org.apache.qpid.server.plugin.MessageStoreFactory +++ b/qpid/java/broker-core/src/test/resources/META-INF/services/org.apache.qpid.server.plugin.MessageStoreFactory @@ -17,3 +17,4 @@ # under the License. # org.apache.qpid.server.store.TestMemoryMessageStoreFactory +org.apache.qpid.server.store.TestableMemoryMessageStoreFactory
\ No newline at end of file |
