You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2013/06/17 10:11:07 UTC
svn commit: r1493675 [2/3] - in /qpid/branches/java-broker-vhost-refactor:
doc/book/src/java-broker/
java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/
java/bdbstore/src/main/java/resources/
java/bdbstore/src/main/java/resources/js/ j...
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java Mon Jun 17 08:11:06 2013
@@ -79,7 +79,7 @@ import org.apache.qpid.server.store.Mess
import org.apache.qpid.server.txn.LocalTransaction;
import org.apache.qpid.server.txn.ServerTransaction;
import org.apache.qpid.server.util.MapValueConverter;
-import org.apache.qpid.server.virtualhost.VirtualHostImpl;
+import org.apache.qpid.server.plugin.VirtualHostFactory;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
public final class VirtualHostAdapter extends AbstractAdapter implements VirtualHost, ExchangeRegistry.RegistryChangeListener,
@@ -91,6 +91,7 @@ public final class VirtualHostAdapter ex
@SuppressWarnings("serial")
public static final Map<String, Type> ATTRIBUTE_TYPES = Collections.unmodifiableMap(new HashMap<String, Type>(){{
put(NAME, String.class);
+ put(TYPE, String.class);
put(STORE_PATH, String.class);
put(STORE_TYPE, String.class);
put(CONFIG_PATH, String.class);
@@ -114,7 +115,7 @@ public final class VirtualHostAdapter ex
public VirtualHostAdapter(UUID id, Map<String, Object> attributes, Broker broker, StatisticsGatherer brokerStatisticsGatherer, TaskExecutor taskExecutor)
{
- super(id, null, MapValueConverter.convert(attributes, ATTRIBUTE_TYPES), taskExecutor);
+ super(id, null, MapValueConverter.convert(attributes, ATTRIBUTE_TYPES, false), taskExecutor, false);
_broker = broker;
_brokerStatisticsGatherer = brokerStatisticsGatherer;
validateAttributes();
@@ -130,18 +131,23 @@ public final class VirtualHostAdapter ex
}
String configurationFile = (String) getAttribute(CONFIG_PATH);
- String storeType = (String) getAttribute(STORE_TYPE);
+ String type = (String) getAttribute(TYPE);
+
boolean invalidAttributes = false;
if (configurationFile == null)
{
- if (storeType == null)
+ if (type == null)
{
invalidAttributes = true;
}
+ else
+ {
+ validateAttributes(type);
+ }
}
else
{
- if (storeType != null)
+ if (type != null)
{
invalidAttributes = true;
}
@@ -149,7 +155,7 @@ public final class VirtualHostAdapter ex
}
if (invalidAttributes)
{
- throw new IllegalConfigurationException("Please specify either the 'configPath' attribute or 'storeType' and 'storePath' attributes");
+ throw new IllegalConfigurationException("Please specify either the 'configPath' attribute or 'type' attributes");
}
// pre-load the configuration in order to validate
@@ -163,6 +169,17 @@ public final class VirtualHostAdapter ex
}
}
+ private void validateAttributes(String type)
+ {
+ final VirtualHostFactory factory = VirtualHostFactory.FACTORIES.get(type);
+ if(factory == null)
+ {
+ throw new IllegalArgumentException("Unknown virtual host type '"+ type +"'. Valid types are: " + VirtualHostFactory.TYPES.get());
+ }
+ factory.validateAttributes(getActualAttributes());
+
+ }
+
private void populateExchanges()
{
Collection<org.apache.qpid.server.exchange.Exchange> actualExchanges =
@@ -295,7 +312,7 @@ public final class VirtualHostAdapter ex
_virtualHost.getExchangeRegistry().registerExchange(exchange);
if(durable)
{
- _virtualHost.getMessageStore().createExchange(exchange);
+ _virtualHost.getDurableConfigurationStore().createExchange(exchange);
}
synchronized (_exchangeAdapters)
{
@@ -417,7 +434,7 @@ public final class VirtualHostAdapter ex
if(durable)
{
- _virtualHost.getMessageStore().createQueue(queue, FieldTable.convertToFieldTable(attributes));
+ _virtualHost.getDurableConfigurationStore().createQueue(queue, FieldTable.convertToFieldTable(attributes));
}
synchronized (_queueAdapters)
{
@@ -444,6 +461,19 @@ public final class VirtualHostAdapter ex
throw new IllegalStateException();
}
+
+ public String getType()
+ {
+ return (String)getAttribute(TYPE);
+ }
+
+ public String setType(final String currentType, final String desiredType)
+ throws IllegalStateException, AccessControlException
+ {
+ throw new IllegalStateException();
+ }
+
+
@Override
public State getActualState()
{
@@ -1070,7 +1100,19 @@ public final class VirtualHostAdapter ex
try
{
VirtualHostConfiguration configuration = createVirtualHostConfiguration(virtualHostName);
- _virtualHost = new VirtualHostImpl(_broker.getVirtualHostRegistry(), _brokerStatisticsGatherer, _broker.getSecurityManager(), configuration);
+ String type = configuration.getType();
+ final VirtualHostFactory factory = VirtualHostFactory.FACTORIES.get(type);
+ if(factory == null)
+ {
+ throw new IllegalArgumentException("Unknown virtual host type: " + type);
+ }
+ else
+ {
+ _virtualHost = factory.createVirtualHost(_broker.getVirtualHostRegistry(),
+ _brokerStatisticsGatherer,
+ _broker.getSecurityManager(),
+ configuration);
+ }
}
catch (Exception e)
{
@@ -1106,8 +1148,16 @@ public final class VirtualHostAdapter ex
{
final MyConfiguration basicConfiguration = new MyConfiguration();
PropertiesConfiguration config = new PropertiesConfiguration();
- config.addProperty("store.type", (String)getAttribute(STORE_TYPE));
- config.addProperty("store.environment-path", (String)getAttribute(STORE_PATH));
+ 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();
Added: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/plugin/VirtualHostFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/plugin/VirtualHostFactory.java?rev=1493675&view=auto
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/plugin/VirtualHostFactory.java (added)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/plugin/VirtualHostFactory.java Mon Jun 17 08:11:06 2013
@@ -0,0 +1,88 @@
+/*
+ *
+ * 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.plugin;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+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;
+import org.apache.qpid.server.virtualhost.VirtualHost;
+import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
+
+public interface VirtualHostFactory
+{
+ String getType();
+
+ VirtualHost createVirtualHost(VirtualHostRegistry virtualHostRegistry,
+ StatisticsGatherer brokerStatisticsGatherer,
+ SecurityManager parentSecurityManager,
+ VirtualHostConfiguration hostConfig) throws Exception;
+
+ void validateAttributes(Map<String, Object> attributes);
+
+ Map<String, Object> createVirtualHostConfiguration(VirtualHostAdapter virtualHostAdapter);
+
+ static final class TYPES
+ {
+ private TYPES()
+ {
+ }
+
+ public static Collection<String> get()
+ {
+ QpidServiceLoader<VirtualHostFactory> qpidServiceLoader = new QpidServiceLoader<VirtualHostFactory>();
+ Iterable<VirtualHostFactory> factories = qpidServiceLoader.atLeastOneInstanceOf(VirtualHostFactory.class);
+ List<String> names = new ArrayList<String>();
+ for(VirtualHostFactory factory : factories)
+ {
+ names.add(factory.getType());
+ }
+ return Collections.unmodifiableCollection(names);
+ }
+ }
+
+
+ static final class FACTORIES
+ {
+ private FACTORIES()
+ {
+ }
+
+ public static VirtualHostFactory get(String type)
+ {
+ QpidServiceLoader<VirtualHostFactory> qpidServiceLoader = new QpidServiceLoader<VirtualHostFactory>();
+ Iterable<VirtualHostFactory> factories = qpidServiceLoader.atLeastOneInstanceOf(VirtualHostFactory.class);
+ for(VirtualHostFactory factory : factories)
+ {
+ if(factory.getType().equals(type))
+ {
+ return factory;
+ }
+ }
+ return null;
+ }
+ }
+}
Propchange: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/plugin/VirtualHostFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java Mon Jun 17 08:11:06 2013
@@ -315,7 +315,7 @@ public class AMQQueueFactory
exchangeRegistry.registerExchange(dlExchange);
//enter the dle in the persistent store
- virtualHost.getMessageStore().createExchange(dlExchange);
+ virtualHost.getDurableConfigurationStore().createExchange(dlExchange);
}
}
@@ -335,7 +335,7 @@ public class AMQQueueFactory
dlQueue = createAMQQueueImpl(UUIDGenerator.generateQueueUUID(dlQueueName, virtualHost.getName()), dlQueueName, true, owner, false, exclusive, virtualHost, args);
//enter the dlq in the persistent store
- virtualHost.getMessageStore().createQueue(dlQueue, FieldTable.convertToFieldTable(args));
+ virtualHost.getDurableConfigurationStore().createQueue(dlQueue, FieldTable.convertToFieldTable(args));
}
}
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java Mon Jun 17 08:11:06 2013
@@ -55,7 +55,7 @@ import org.apache.qpid.server.store.Conf
import org.apache.qpid.server.store.ConfigurationRecoveryHandler.ExchangeRecoveryHandler;
import org.apache.qpid.server.store.ConfigurationRecoveryHandler.QueueRecoveryHandler;
-abstract public class AbstractJDBCMessageStore implements MessageStore
+abstract public class AbstractJDBCMessageStore implements MessageStore, DurableConfigurationStore
{
private static final String DB_VERSION_TABLE_NAME = "QPID_DB_VERSION";
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java Mon Jun 17 08:11:06 2013
@@ -33,7 +33,7 @@ public interface DurableConfigurationSto
public static interface Source
{
- DurableConfigurationStore getMessageStore();
+ DurableConfigurationStore getDurableConfigurationStore();
}
/**
@@ -107,11 +107,11 @@ public interface DurableConfigurationSto
* Removes the specified queue from the persistent store.
*
* @param queue The queue to remove.
- *
+ *
* @throws AMQStoreException If the operation fails for any reason.
*/
void removeQueue(AMQQueue queue) throws AMQStoreException;
-
+
/**
* Updates the specified queue in the persistent store, IF it is already present. If the queue
* is not present in the store, it will not be added.
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/MessageStore.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/MessageStore.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/MessageStore.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/MessageStore.java Mon Jun 17 08:11:06 2013
@@ -26,7 +26,7 @@ import org.apache.commons.configuration.
* MessageStore defines the interface to a storage area, which can be used to preserve the state of messages.
*
*/
-public interface MessageStore extends DurableConfigurationStore
+public interface MessageStore
{
/**
* Called after instantiation in order to configure the message store. A particular implementation can define
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/MessageStoreCreator.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/MessageStoreCreator.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/MessageStoreCreator.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/MessageStoreCreator.java Mon Jun 17 08:11:06 2013
@@ -50,6 +50,12 @@ public class MessageStoreCreator
}
}
+ public boolean isValidType(String storeType)
+ {
+ return _factories.containsKey(storeType.toLowerCase());
+ }
+
+
public MessageStore createMessageStore(String storeType)
{
MessageStoreFactory factory = _factories.get(storeType.toLowerCase());
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/NullMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/NullMessageStore.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/NullMessageStore.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/NullMessageStore.java Mon Jun 17 08:11:06 2013
@@ -26,7 +26,7 @@ import org.apache.qpid.server.binding.Bi
import org.apache.qpid.server.exchange.Exchange;
import org.apache.qpid.server.queue.AMQQueue;
-public abstract class NullMessageStore implements MessageStore
+public abstract class NullMessageStore implements MessageStore, DurableConfigurationStore
{
@Override
public void configureConfigStore(String name,
@@ -125,4 +125,4 @@ public abstract class NullMessageStore i
public void onDelete()
{
}
-}
\ No newline at end of file
+}
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java Mon Jun 17 08:11:06 2013
@@ -35,6 +35,7 @@ import java.util.List;
import org.apache.commons.configuration.Configuration;
import org.apache.log4j.Logger;
import org.apache.qpid.server.store.AbstractJDBCMessageStore;
+import org.apache.qpid.server.store.DurableConfigurationStore;
import org.apache.qpid.server.store.Event;
import org.apache.qpid.server.store.EventListener;
import org.apache.qpid.server.store.MessageStore;
@@ -46,7 +47,7 @@ import org.apache.qpid.util.FileUtils;
* mechanism.
*
*/
-public class DerbyMessageStore extends AbstractJDBCMessageStore implements MessageStore
+public class DerbyMessageStore extends AbstractJDBCMessageStore implements MessageStore, DurableConfigurationStore
{
private static final Logger _logger = Logger.getLogger(DerbyMessageStore.class);
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java Mon Jun 17 08:11:06 2013
@@ -762,7 +762,7 @@ public class ServerSessionDelegate exten
{
if (exchange.isDurable())
{
- DurableConfigurationStore store = virtualHost.getMessageStore();
+ DurableConfigurationStore store = virtualHost.getDurableConfigurationStore();
store.createExchange(exchange);
}
exchangeRegistry.registerExchange(exchange);
@@ -917,7 +917,7 @@ public class ServerSessionDelegate exten
if (exchange.isDurable() && !exchange.isAutoDelete())
{
- DurableConfigurationStore store = virtualHost.getMessageStore();
+ DurableConfigurationStore store = virtualHost.getDurableConfigurationStore();
store.removeExchange(exchange);
}
}
@@ -1241,7 +1241,7 @@ public class ServerSessionDelegate exten
{
VirtualHost virtualHost = getVirtualHost(session);
- DurableConfigurationStore store = virtualHost.getMessageStore();
+ DurableConfigurationStore store = virtualHost.getDurableConfigurationStore();
String queueName = method.getQueue();
AMQQueue queue;
@@ -1468,7 +1468,7 @@ public class ServerSessionDelegate exten
queue.delete();
if (queue.isDurable() && !queue.isAutoDelete())
{
- DurableConfigurationStore store = virtualHost.getMessageStore();
+ DurableConfigurationStore store = virtualHost.getDurableConfigurationStore();
store.removeQueue(queue);
}
}
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/util/MapValueConverter.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/util/MapValueConverter.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/util/MapValueConverter.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/util/MapValueConverter.java Mon Jun 17 08:11:06 2013
@@ -127,7 +127,13 @@ public class MapValueConverter
}
else if (rawValue instanceof String)
{
- return (T) Enum.valueOf(enumType, (String) rawValue);
+ final String stringValue = (String) rawValue;
+
+ return "null".equals(stringValue) ? null : (T) Enum.valueOf(enumType, stringValue);
+ }
+ else if(rawValue == null)
+ {
+ return null;
}
else
{
@@ -281,14 +287,23 @@ public class MapValueConverter
public static Map<String, Object> convert(Map<String, Object> configurationAttributes, Map<String, Type> attributeTypes)
{
+ return convert(configurationAttributes, attributeTypes, true);
+ }
+
+ public static Map<String, Object> convert(Map<String, Object> configurationAttributes,
+ Map<String, Type> attributeTypes,
+ boolean exclusive)
+ {
Map<String, Object> attributes = new HashMap<String, Object>();
- for (Map.Entry<String, Type> attributeEntry : attributeTypes.entrySet())
+ for (Map.Entry<String, Object> attribute : configurationAttributes.entrySet())
{
- String attributeName = attributeEntry.getKey();
- if (configurationAttributes.containsKey(attributeName))
+ String attributeName = attribute.getKey();
+ Object rawValue = attribute.getValue();
+
+ if (attributeTypes.containsKey(attributeName))
{
- Type typeObject = attributeEntry.getValue();
- Object rawValue = configurationAttributes.get(attributeName);
+ Type typeObject = attributeTypes.get(attributeName);
+
Object value = null;
if (typeObject instanceof Class)
{
@@ -311,16 +326,21 @@ public class MapValueConverter
}
else
{
- throw new IllegalArgumentException("Convertion into " + parameterizedType + " is not yet supported");
+ throw new IllegalArgumentException("Conversion into " + parameterizedType + " is not yet supported");
}
}
else
{
- throw new IllegalArgumentException("Convertion into " + typeObject + " is not yet supported");
+ throw new IllegalArgumentException("Conversion into " + typeObject + " is not yet supported");
}
attributes.put(attributeName, value);
}
+ else if(!exclusive)
+ {
+ attributes.put(attributeName, rawValue);
+ }
}
+
return attributes;
}
Copied: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java (from r1481480, qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java)
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?p2=qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java&p1=qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java&r1=1481480&r2=1493675&rev=1493675&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java Mon Jun 17 08:11:06 2013
@@ -57,17 +57,17 @@ import org.apache.qpid.server.queue.Queu
import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.stats.StatisticsCounter;
import org.apache.qpid.server.stats.StatisticsGatherer;
+import org.apache.qpid.server.store.DurableConfigurationStore;
import org.apache.qpid.server.store.Event;
import org.apache.qpid.server.store.EventListener;
-import org.apache.qpid.server.store.HAMessageStore;
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.txn.DtxRegistry;
-public class VirtualHostImpl implements VirtualHost, IConnectionRegistry.RegistryChangeListener, EventListener
+public abstract class AbstractVirtualHost implements VirtualHost, IConnectionRegistry.RegistryChangeListener, EventListener
{
- private static final Logger _logger = Logger.getLogger(VirtualHostImpl.class);
+ private static final Logger _logger = Logger.getLogger(AbstractVirtualHost.class);
private static final int HOUSEKEEPING_SHUTDOWN_TIMEOUT = 5;
@@ -97,8 +97,6 @@ public class VirtualHostImpl implements
private final DtxRegistry _dtxRegistry;
- private final MessageStore _messageStore;
-
private volatile State _state = State.INITIALISING;
private StatisticsCounter _messagesDelivered, _dataDelivered, _messagesReceived, _dataReceived;
@@ -106,7 +104,10 @@ public class VirtualHostImpl implements
private final Map<String, LinkRegistry> _linkRegistry = new HashMap<String, LinkRegistry>();
private boolean _blocked;
- public VirtualHostImpl(VirtualHostRegistry virtualHostRegistry, StatisticsGatherer brokerStatisticsGatherer, SecurityManager parentSecurityManager, VirtualHostConfiguration hostConfig) throws Exception
+ public AbstractVirtualHost(VirtualHostRegistry virtualHostRegistry,
+ StatisticsGatherer brokerStatisticsGatherer,
+ SecurityManager parentSecurityManager,
+ VirtualHostConfiguration hostConfig) throws Exception
{
if (hostConfig == null)
{
@@ -141,18 +142,16 @@ public class VirtualHostImpl implements
_exchangeRegistry = new DefaultExchangeRegistry(this);
- _messageStore = initialiseMessageStore(hostConfig);
-
- configureMessageStore(hostConfig);
-
- activateNonHAMessageStore();
-
initialiseStatistics();
- _messageStore.addEventListener(this, Event.PERSISTENT_MESSAGE_SIZE_OVERFULL);
- _messageStore.addEventListener(this, Event.PERSISTENT_MESSAGE_SIZE_UNDERFULL);
+ initialiseStorage(hostConfig);
+
+ getMessageStore().addEventListener(this, Event.PERSISTENT_MESSAGE_SIZE_OVERFULL);
+ getMessageStore().addEventListener(this, Event.PERSISTENT_MESSAGE_SIZE_UNDERFULL);
}
+ abstract protected void initialiseStorage(VirtualHostConfiguration hostConfig) throws Exception;
+
public IConnectionRegistry getConnectionRegistry()
{
return _connectionRegistry;
@@ -187,25 +186,25 @@ public class VirtualHostImpl implements
}
}
- private void shutdownHouseKeeping()
+ protected void shutdownHouseKeeping()
{
_houseKeepingTasks.shutdown();
- try
- {
- if (!_houseKeepingTasks.awaitTermination(HOUSEKEEPING_SHUTDOWN_TIMEOUT, TimeUnit.SECONDS))
- {
- _houseKeepingTasks.shutdownNow();
- }
- }
- catch (InterruptedException e)
- {
- _logger.warn("Interrupted during Housekeeping shutdown:", e);
- Thread.currentThread().interrupt();
- }
+ try
+ {
+ if (!_houseKeepingTasks.awaitTermination(HOUSEKEEPING_SHUTDOWN_TIMEOUT, TimeUnit.SECONDS))
+ {
+ _houseKeepingTasks.shutdownNow();
+ }
+ }
+ catch (InterruptedException e)
+ {
+ _logger.warn("Interrupted during Housekeeping shutdown:", e);
+ Thread.currentThread().interrupt();
+ }
}
- private void removeHouseKeepingTasks()
+ protected void removeHouseKeepingTasks()
{
BlockingQueue<Runnable> taskQueue = _houseKeepingTasks.getQueue();
for (final Runnable runnable : taskQueue)
@@ -257,62 +256,13 @@ public class VirtualHostImpl implements
return _houseKeepingTasks.getActiveCount();
}
- private MessageStore initialiseMessageStore(VirtualHostConfiguration hostConfig) throws Exception
- {
- String storeType = hostConfig.getConfig().getString("store.type");
- MessageStore messageStore = null;
- if (storeType == null)
- {
- 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;
- }
- else
- {
- messageStore = new MessageStoreCreator().createMessageStore(storeType);
- }
-
- final MessageStoreLogSubject storeLogSubject = new MessageStoreLogSubject(this, messageStore.getClass().getSimpleName());
- OperationalLoggingListener.listen(messageStore, storeLogSubject);
-
- messageStore.addEventListener(new BeforeActivationListener(), Event.BEFORE_ACTIVATE);
- messageStore.addEventListener(new AfterActivationListener(), Event.AFTER_ACTIVATE);
- messageStore.addEventListener(new BeforeCloseListener(), Event.BEFORE_CLOSE);
- messageStore.addEventListener(new BeforePassivationListener(), Event.BEFORE_PASSIVATE);
- if (messageStore instanceof HAMessageStore)
- {
- messageStore.addEventListener(new AfterInitialisationListener(), Event.AFTER_INIT);
- }
-
- return messageStore;
- }
-
- private void activateNonHAMessageStore() throws Exception
- {
- if (!(_messageStore instanceof HAMessageStore))
- {
- _messageStore.activate();
- }
- }
-
- private void configureMessageStore(VirtualHostConfiguration hostConfig) throws Exception
- {
- VirtualHostConfigRecoveryHandler recoveryHandler = new VirtualHostConfigRecoveryHandler(this);
-
- _messageStore.configureConfigStore(getName(), recoveryHandler, hostConfig.getStoreConfiguration());
- _messageStore.configureMessageStore(getName(), recoveryHandler, recoveryHandler, hostConfig.getStoreConfiguration());
- }
-
- private void initialiseModel(VirtualHostConfiguration config) throws ConfigurationException, AMQException
+ protected void initialiseModel(VirtualHostConfiguration config) throws ConfigurationException, AMQException
{
_logger.debug("Loading configuration for virtualhost: " + config.getName());
+ _exchangeRegistry.initialise();
+
List<String> exchangeNames = config.getExchanges();
for (String exchangeName : exchangeNames)
@@ -347,7 +297,7 @@ public class VirtualHostImpl implements
if (newExchange.isDurable())
{
- _messageStore.createExchange(newExchange);
+ getDurableConfigurationStore().createExchange(newExchange);
}
}
}
@@ -359,7 +309,7 @@ public class VirtualHostImpl implements
if (queue.isDurable())
{
- getMessageStore().createQueue(queue);
+ getDurableConfigurationStore().createQueue(queue);
}
//get the exchange name (returns default exchange name if none was specified)
@@ -390,25 +340,25 @@ public class VirtualHostImpl implements
}
else
{
- configureBinding(queue, exchange, routingKey);
+ configureBinding(queue, exchange, routingKey, (Map) queueConfiguration.getBindingArguments(routingKey));
}
}
- if (!exchange.equals(defaultExchange))
+ if (!exchange.equals(defaultExchange) && !routingKeys.contains(queueName))
{
//bind the queue to the named exchange using its name
- configureBinding(queue, exchange, queueName);
+ configureBinding(queue, exchange, queueName, null);
}
}
- private void configureBinding(AMQQueue queue, Exchange exchange, String routingKey) throws AMQException
+ private void configureBinding(AMQQueue queue, Exchange exchange, String routingKey, Map<String,Object> arguments) throws AMQException
{
if (_logger.isInfoEnabled())
{
_logger.info("Binding queue:" + queue + " with routing key '" + routingKey + "' to exchange:" + exchange.getName());
}
- exchange.addBinding(routingKey, queue, null);
+ exchange.addBinding(routingKey, queue, arguments);
}
public String getName()
@@ -436,11 +386,6 @@ public class VirtualHostImpl implements
return _exchangeFactory;
}
- public MessageStore getMessageStore()
- {
- return _messageStore;
- }
-
public SecurityManager getSecurityManager()
{
return _securityManager;
@@ -452,26 +397,42 @@ public class VirtualHostImpl implements
_connectionRegistry.close();
_queueRegistry.stopAllAndUnregisterMBeans();
_dtxRegistry.close();
+ closeStorage();
+ shutdownHouseKeeping();
+ // clear exchange objects
+ _exchangeRegistry.clearAndUnregisterMbeans();
+
+ _state = State.STOPPED;
+
+ CurrentActor.get().message(VirtualHostMessages.CLOSED());
+ }
+
+ protected void closeStorage()
+ {
//Close MessageStore
- if (_messageStore != null)
+ if (getMessageStore() != null)
{
//Remove MessageStore Interface should not throw Exception
try
{
- _messageStore.close();
+ getMessageStore().close();
}
catch (Exception e)
{
_logger.error("Failed to close message store", e);
}
}
+ }
- _state = State.STOPPED;
- CurrentActor.get().message(VirtualHostMessages.CLOSED());
+ protected Logger getLogger()
+ {
+ return _logger;
}
+
+
public VirtualHostRegistry getVirtualHostRegistry()
{
return _virtualHostRegistry;
@@ -614,94 +575,28 @@ public class VirtualHostImpl implements
}
}
- private final class BeforeActivationListener implements EventListener
- {
- @Override
- public void event(Event event)
- {
- try
- {
- _exchangeRegistry.initialise();
- initialiseModel(_vhostConfig);
- }
- catch (Exception e)
- {
- throw new RuntimeException("Failed to initialise virtual host after state change", e);
- }
- }
- }
-
- private final class AfterActivationListener implements EventListener
- {
- @Override
- public void event(Event event)
- {
- State finalState = State.ERRORED;
-
- try
- {
- initialiseHouseKeeping(_vhostConfig.getHousekeepingCheckPeriod());
- finalState = State.ACTIVE;
- }
- finally
- {
- _state = finalState;
- reportIfError(_state);
- }
- }
- }
-
- private final class BeforePassivationListener implements EventListener
+ protected void setState(State state)
{
- public void event(Event event)
- {
- State finalState = State.ERRORED;
-
- try
- {
- /* the approach here is not ideal as there is a race condition where a
- * queue etc could be created while the virtual host is on the way to
- * the passivated state. However the store state change from MASTER to UNKNOWN
- * is documented as exceptionally rare..
- */
-
- _connectionRegistry.close(IConnectionRegistry.VHOST_PASSIVATE_REPLY_TEXT);
- removeHouseKeepingTasks();
-
- _queueRegistry.stopAllAndUnregisterMBeans();
- _exchangeRegistry.clearAndUnregisterMbeans();
- _dtxRegistry.close();
-
- finalState = State.PASSIVE;
- }
- finally
- {
- _state = finalState;
- reportIfError(_state);
- }
- }
-
+ _state = state;
}
- private final class AfterInitialisationListener implements EventListener
+ protected void attainActivation()
{
- public void event(Event event)
+ State finalState = State.ERRORED;
+
+ try
{
- _state = State.PASSIVE;
+ initialiseHouseKeeping(_vhostConfig.getHousekeepingCheckPeriod());
+ finalState = State.ACTIVE;
}
-
- }
-
- private final class BeforeCloseListener implements EventListener
- {
- @Override
- public void event(Event event)
+ finally
{
- shutdownHouseKeeping();
+ _state = finalState;
+ reportIfError(_state);
}
}
- private void reportIfError(State state)
+ protected void reportIfError(State state)
{
if (state == State.ERRORED)
{
@@ -713,7 +608,7 @@ public class VirtualHostImpl implements
{
public VirtualHostHouseKeepingTask()
{
- super(VirtualHostImpl.this);
+ super(AbstractVirtualHost.this);
}
public void execute()
Added: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java?rev=1493675&view=auto
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java (added)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java Mon Jun 17 08:11:06 2013
@@ -0,0 +1,145 @@
+package org.apache.qpid.server.virtualhost;/*
+ *
+ * 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.
+ *
+ */
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.qpid.server.configuration.VirtualHostConfiguration;
+import org.apache.qpid.server.logging.subjects.MessageStoreLogSubject;
+import org.apache.qpid.server.stats.StatisticsGatherer;
+import org.apache.qpid.server.store.DurableConfigurationStore;
+import org.apache.qpid.server.store.Event;
+import org.apache.qpid.server.store.MessageStore;
+import org.apache.qpid.server.store.MessageStoreCreator;
+import org.apache.qpid.server.store.OperationalLoggingListener;
+
+public class StandardVirtualHost extends AbstractVirtualHost
+{
+ private MessageStore _messageStore;
+
+ private DurableConfigurationStore _durableConfigurationStore;
+
+ StandardVirtualHost(VirtualHostRegistry virtualHostRegistry,
+ StatisticsGatherer brokerStatisticsGatherer,
+ org.apache.qpid.server.security.SecurityManager parentSecurityManager,
+ VirtualHostConfiguration hostConfig) throws Exception
+ {
+ super(virtualHostRegistry, brokerStatisticsGatherer, parentSecurityManager, hostConfig);
+ }
+
+
+
+ private MessageStore initialiseMessageStore(VirtualHostConfiguration hostConfig) throws Exception
+ {
+ String storeType = hostConfig.getConfig().getString("store.type");
+ MessageStore messageStore = null;
+ if (storeType == null)
+ {
+ 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;
+ }
+ else
+ {
+ messageStore = new MessageStoreCreator().createMessageStore(storeType);
+ }
+
+ final
+ MessageStoreLogSubject
+ storeLogSubject = new MessageStoreLogSubject(this, messageStore.getClass().getSimpleName());
+ OperationalLoggingListener.listen(messageStore, storeLogSubject);
+
+ return messageStore;
+ }
+
+ private DurableConfigurationStore initialiseConfigurationStore(VirtualHostConfiguration hostConfig) throws Exception
+ {
+ DurableConfigurationStore configurationStore;
+ if(getMessageStore() instanceof DurableConfigurationStore)
+ {
+ configurationStore = (DurableConfigurationStore) getMessageStore();
+ }
+ else
+ {
+ throw new ClassCastException(getMessageStore().getClass().getSimpleName() +
+ " is not an instance of DurableConfigurationStore");
+ }
+ return configurationStore;
+ }
+
+
+ protected void initialiseStorage(VirtualHostConfiguration hostConfig) throws Exception
+ {
+ _messageStore = initialiseMessageStore(hostConfig);
+
+ _durableConfigurationStore = initialiseConfigurationStore(hostConfig);
+
+ VirtualHostConfigRecoveryHandler recoveryHandler = new VirtualHostConfigRecoveryHandler(this);
+
+ final Configuration storeConfiguration = hostConfig.getStoreConfiguration();
+
+ _durableConfigurationStore.configureConfigStore(getName(), recoveryHandler, storeConfiguration);
+
+ _messageStore.configureMessageStore(getName(), recoveryHandler, recoveryHandler, storeConfiguration);
+
+ initialiseModel(hostConfig);
+
+ _messageStore.activate();
+
+ attainActivation();
+ }
+
+
+ protected void closeStorage()
+ {
+ //Close MessageStore
+ if (_messageStore != null)
+ {
+ //Remove MessageStore Interface should not throw Exception
+ try
+ {
+ getMessageStore().close();
+ }
+ catch (Exception e)
+ {
+ getLogger().error("Failed to close message store", e);
+ }
+ }
+ }
+
+
+ @Override
+ public MessageStore getMessageStore()
+ {
+ return _messageStore;
+ }
+
+ @Override
+ public DurableConfigurationStore getDurableConfigurationStore()
+ {
+ return _durableConfigurationStore;
+ }
+
+}
Propchange: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java?rev=1493675&view=auto
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java (added)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java Mon Jun 17 08:11:06 2013
@@ -0,0 +1,98 @@
+package org.apache.qpid.server.virtualhost;/*
+ *
+ * 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.
+ *
+ */
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import org.apache.qpid.server.configuration.VirtualHostConfiguration;
+import org.apache.qpid.server.model.adapter.VirtualHostAdapter;
+import org.apache.qpid.server.plugin.VirtualHostFactory;
+import org.apache.qpid.server.stats.StatisticsGatherer;
+import org.apache.qpid.server.store.MemoryMessageStore;
+import org.apache.qpid.server.store.MessageStoreCreator;
+
+public class StandardVirtualHostFactory implements VirtualHostFactory
+{
+
+ public static final String TYPE = "STANDARD";
+
+ @Override
+ public String getType()
+ {
+ return TYPE;
+ }
+
+ @Override
+ public VirtualHost createVirtualHost(VirtualHostRegistry virtualHostRegistry,
+ StatisticsGatherer brokerStatisticsGatherer,
+ org.apache.qpid.server.security.SecurityManager parentSecurityManager,
+ VirtualHostConfiguration hostConfig) throws Exception
+ {
+ return new StandardVirtualHost(virtualHostRegistry, brokerStatisticsGatherer, parentSecurityManager, hostConfig);
+ }
+
+
+ private static final String STORE_TYPE_ATTRIBUTE = org.apache.qpid.server.model.VirtualHost.STORE_TYPE;
+ private static final String STORE_PATH_ATTRIBUTE = org.apache.qpid.server.model.VirtualHost.STORE_PATH;
+
+ @Override
+ public void validateAttributes(Map<String, Object> attributes)
+ {
+
+ // need store type and path
+ Object storeType = attributes.get(STORE_TYPE_ATTRIBUTE);
+ if(!(storeType instanceof String))
+ {
+
+ throw new IllegalArgumentException("Attribute '"+ STORE_TYPE_ATTRIBUTE
+ +"' is required and must be of type String.");
+ }
+ final MessageStoreCreator storeCreator = new MessageStoreCreator();
+ if(!storeCreator.isValidType((String)storeType))
+ {
+ throw new IllegalArgumentException("Attribute '"+ STORE_TYPE_ATTRIBUTE
+ +"' has value '"+storeType+"' which is not one of the valid values: "
+ + storeCreator.getStoreTypes() + ".");
+
+ }
+
+ // TODO - each store type should validate its own attributes
+ if(!((String) storeType).equalsIgnoreCase(MemoryMessageStore.TYPE))
+ {
+ Object storePath = attributes.get(STORE_PATH_ATTRIBUTE);
+ if(!(storePath instanceof String))
+ {
+ throw new IllegalArgumentException("Attribute '"+ STORE_PATH_ATTRIBUTE
+ +"' is required and must be of type String.");
+
+ }
+ }
+
+ }
+
+ @Override
+ public Map<String,Object> createVirtualHostConfiguration(VirtualHostAdapter virtualHostAdapter)
+ {
+ Map<String,Object> convertedMap = new LinkedHashMap<String, Object>();
+ convertedMap.put("store.type", virtualHostAdapter.getAttribute(org.apache.qpid.server.model.VirtualHost.STORE_TYPE));
+ convertedMap.put("store.environment-path", virtualHostAdapter.getAttribute(org.apache.qpid.server.model.VirtualHost.STORE_PATH));
+ return convertedMap;
+ }
+}
Propchange: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHostFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java Mon Jun 17 08:11:06 2013
@@ -49,6 +49,8 @@ public interface VirtualHost extends Dur
ExchangeFactory getExchangeFactory();
+ DurableConfigurationStore getDurableConfigurationStore();
+
MessageStore getMessageStore();
SecurityManager getSecurityManager();
Added: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostFactoryRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostFactoryRegistry.java?rev=1493675&view=auto
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostFactoryRegistry.java (added)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostFactoryRegistry.java Mon Jun 17 08:11:06 2013
@@ -0,0 +1,65 @@
+package org.apache.qpid.server.virtualhost;/*
+ *
+ * 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.
+ *
+ */
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.qpid.server.plugin.QpidServiceLoader;
+import org.apache.qpid.server.plugin.VirtualHostFactory;
+
+public class VirtualHostFactoryRegistry
+{
+ private static Map<String, VirtualHostFactory> getFactoryMap()
+ {
+ Map<String, VirtualHostFactory> virtualHostFactories = new HashMap<String, VirtualHostFactory>();
+ QpidServiceLoader<VirtualHostFactory> qpidServiceLoader = new QpidServiceLoader<VirtualHostFactory>();
+ Iterable<VirtualHostFactory> factories = qpidServiceLoader.atLeastOneInstanceOf(VirtualHostFactory.class);
+ for (VirtualHostFactory virtualHostFactory : factories)
+ {
+ String type = virtualHostFactory.getType();
+ VirtualHostFactory factory = virtualHostFactories.put(type, virtualHostFactory);
+ if (factory != null)
+ {
+ throw new IllegalStateException("VirtualHostFactory with type name '" + type
+ + "' is already registered using class '" + factory.getClass().getName() + "', can not register class '"
+ + virtualHostFactory.getClass().getName() + "'");
+ }
+ }
+ return virtualHostFactories;
+ }
+
+
+ public static Collection<VirtualHostFactory> getFactories()
+ {
+ return Collections.unmodifiableCollection(getFactoryMap().values());
+ }
+
+ public static Collection<String> getVirtualHostTypes()
+ {
+ return Collections.unmodifiableCollection(getFactoryMap().keySet());
+ }
+
+ public static VirtualHostFactory getFactory(String type)
+ {
+ return getFactoryMap().get(type);
+ }
+}
Propchange: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostFactoryRegistry.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.VirtualHostFactory (from r1481480, qpid/trunk/qpid/java/broker/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.MessageStoreFactory)
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.VirtualHostFactory?p2=qpid/branches/java-broker-vhost-refactor/java/broker/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.VirtualHostFactory&p1=qpid/trunk/qpid/java/broker/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.MessageStoreFactory&r1=1481480&r2=1493675&rev=1493675&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.MessageStoreFactory (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.VirtualHostFactory Mon Jun 17 08:11:06 2013
@@ -16,6 +16,4 @@
# specific language governing permissions and limitations
# under the License.
#
-org.apache.qpid.server.store.derby.DerbyMessageStoreFactory
-org.apache.qpid.server.store.MemoryMessageStoreFactory
-org.apache.qpid.server.store.jdbc.JDBCMessageStoreFactory
+org.apache.qpid.server.virtualhost.StandardVirtualHostFactory
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/main/resources/initial-config.json
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/main/resources/initial-config.json?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/main/resources/initial-config.json (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/main/resources/initial-config.json Mon Jun 17 08:11:06 2013
@@ -21,7 +21,7 @@
{
"name": "Broker",
"storeVersion": 1,
- "modelVersion": "1.0",
+ "modelVersion": "1.1",
"defaultVirtualHost" : "default",
"authenticationproviders" : [ {
"name" : "passwordFile",
@@ -49,6 +49,7 @@
}],
"virtualhosts" : [ {
"name" : "default",
+ "type" : "STANDARD",
"storeType" : "DERBY",
"storePath" : "${qpid.work_dir}/derbystore/default"
} ],
@@ -59,4 +60,4 @@
"pluginType" : "MANAGEMENT-JMX",
"name" : "jmxManagement"
} ]
-}
\ No newline at end of file
+}
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostRecovererTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostRecovererTest.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostRecovererTest.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/VirtualHostRecovererTest.java Mon Jun 17 08:11:06 2013
@@ -35,6 +35,7 @@ import org.apache.qpid.server.model.Brok
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
@@ -75,6 +76,8 @@ public class VirtualHostRecovererTest ex
VirtualHostRecoverer recoverer = new VirtualHostRecoverer(statisticsGatherer);
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put(VirtualHost.NAME, getName());
+ attributes.put(VirtualHost.TYPE, StandardVirtualHostFactory.TYPE);
+
attributes.put(VirtualHost.STORE_PATH, "/path/to/virtualhost/store");
attributes.put(VirtualHost.STORE_TYPE, "DERBY");
when(entry.getAttributes()).thenReturn(attributes);
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java Mon Jun 17 08:11:06 2013
@@ -23,7 +23,6 @@ package org.apache.qpid.server.model;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import java.io.File;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -39,14 +38,10 @@ import org.apache.qpid.server.logging.Sy
import org.apache.qpid.server.logging.actors.CurrentActor;
import org.apache.qpid.server.logging.actors.TestLogActor;
import org.apache.qpid.server.stats.StatisticsGatherer;
-import org.apache.qpid.server.store.Event;
-import org.apache.qpid.server.store.EventListener;
-import org.apache.qpid.server.store.EventManager;
import org.apache.qpid.server.store.MemoryMessageStore;
-import org.apache.qpid.server.store.NullMessageStore;
-import org.apache.qpid.server.store.StateManager;
import org.apache.qpid.server.util.BrokerTestHelper;
-import org.apache.qpid.test.utils.TestFileUtils;
+import org.apache.qpid.server.virtualhost.StandardVirtualHost;
+import org.apache.qpid.server.virtualhost.StandardVirtualHostFactory;
public class VirtualHostTest extends TestCase
{
@@ -96,6 +91,7 @@ public class VirtualHostTest extends Tes
{
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put(VirtualHost.NAME, getName());
+ attributes.put(VirtualHost.TYPE, StandardVirtualHostFactory.TYPE);
attributes.put(VirtualHost.STORE_TYPE, MemoryMessageStore.TYPE);
attributes.put(VirtualHost.STATE, State.QUIESCED);
@@ -130,36 +126,11 @@ public class VirtualHostTest extends Tes
assertEquals("Unexpected state", State.DELETED, host.getAttribute(VirtualHost.STATE));
}
- public void testReplicaState()
- {
- String hostName = getName();
- File configPath = TestFileUtils.createTempFile(this, ".xml", "<virtualhosts><virtualhost><" + hostName
- + "><store><class>" + ReplicaMessageStore.class.getName() + "</class></store></" + hostName
- + "></virtualhost></virtualhosts>");
- try
- {
- Map<String, Object> attributes = new HashMap<String, Object>();
- attributes.put(VirtualHost.NAME, hostName);
- attributes.put(VirtualHost.CONFIG_PATH, configPath.getAbsolutePath());
-
- VirtualHost host = createHost(attributes);
-
- assertEquals("Unexpected state", State.INITIALISING, host.getAttribute(VirtualHost.STATE));
-
- host.setDesiredState(State.INITIALISING, State.ACTIVE);
-
- assertEquals("Unexpected state", State.REPLICA, host.getAttribute(VirtualHost.STATE));
- }
- finally
- {
- configPath.delete();
- }
- }
-
private VirtualHost createHost()
{
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put(VirtualHost.NAME, getName());
+ attributes.put(VirtualHost.TYPE, StandardVirtualHostFactory.TYPE);
attributes.put(VirtualHost.STORE_TYPE, MemoryMessageStore.TYPE);
VirtualHost host = createHost(attributes);
@@ -174,34 +145,4 @@ public class VirtualHostTest extends Tes
return new VirtualHostRecoverer(_statisticsGatherer).create(_recovererProvider, entry, _broker);
}
- public static final class ReplicaMessageStore extends NullMessageStore
- {
- private final EventManager _eventManager = new EventManager();
- private final StateManager _stateManager = new StateManager(_eventManager);
-
- @Override
- public void activate() throws Exception
- {
- _stateManager.attainState(org.apache.qpid.server.store.State.INITIALISING);
- _stateManager.attainState(org.apache.qpid.server.store.State.INITIALISED);
- _stateManager.attainState(org.apache.qpid.server.store.State.ACTIVATING);
- _stateManager.attainState(org.apache.qpid.server.store.State.ACTIVE);
-
- // this should change the virtual host state to PASSIVE
- _stateManager.attainState(org.apache.qpid.server.store.State.INITIALISED);
- }
-
- @Override
- public void addEventListener(EventListener eventListener, Event... events)
- {
- _eventManager.addEventListener(eventListener, events);
- }
-
- @Override
- public String getStoreType()
- {
- return ReplicaMessageStore.class.getSimpleName();
- }
- }
-
}
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/store/DurableConfigurationStoreTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/store/DurableConfigurationStoreTest.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/store/DurableConfigurationStoreTest.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/store/DurableConfigurationStoreTest.java Mon Jun 17 08:11:06 2013
@@ -65,7 +65,7 @@ public class DurableConfigurationStoreTe
private static final String EXCHANGE_NAME = "exchangeName";
private String _storePath;
private String _storeName;
- private MessageStore _store;
+ private MessageStore _messageStore;
private Configuration _configuration;
private ConfigurationRecoveryHandler _recoveryHandler;
@@ -84,6 +84,7 @@ public class DurableConfigurationStoreTe
private FieldTable _bindingArgs;
private UUID _queueId;
private UUID _exchangeId;
+ private DurableConfigurationStore _configStore;
public void setUp() throws Exception
{
@@ -135,7 +136,7 @@ public class DurableConfigurationStoreTe
public void testCreateExchange() throws Exception
{
Exchange exchange = createTestExchange();
- _store.createExchange(exchange);
+ _configStore.createExchange(exchange);
reopenStore();
verify(_exchangeRecoveryHandler).exchange(_exchangeId, getName(), getName() + "Type", true);
@@ -144,9 +145,9 @@ public class DurableConfigurationStoreTe
public void testRemoveExchange() throws Exception
{
Exchange exchange = createTestExchange();
- _store.createExchange(exchange);
+ _configStore.createExchange(exchange);
- _store.removeExchange(exchange);
+ _configStore.removeExchange(exchange);
reopenStore();
verify(_exchangeRecoveryHandler, never()).exchange(any(UUID.class), anyString(), anyString(), anyBoolean());
@@ -157,7 +158,7 @@ public class DurableConfigurationStoreTe
AMQQueue queue = createTestQueue(QUEUE_NAME, "queueOwner", false);
Binding binding = new Binding(UUIDGenerator.generateRandomUUID(), ROUTING_KEY, queue,
_exchange, FieldTable.convertToMap(_bindingArgs));
- _store.bindQueue(binding);
+ _configStore.bindQueue(binding);
reopenStore();
@@ -171,9 +172,9 @@ public class DurableConfigurationStoreTe
AMQQueue queue = createTestQueue(QUEUE_NAME, "queueOwner", false);
Binding binding = new Binding(UUIDGenerator.generateRandomUUID(), ROUTING_KEY, queue,
_exchange, FieldTable.convertToMap(_bindingArgs));
- _store.bindQueue(binding);
+ _configStore.bindQueue(binding);
- _store.unbindQueue(binding);
+ _configStore.unbindQueue(binding);
reopenStore();
verify(_bindingRecoveryHandler, never()).binding(any(UUID.class), any(UUID.class), any(UUID.class), anyString(),
@@ -183,7 +184,7 @@ public class DurableConfigurationStoreTe
public void testCreateQueueAMQQueue() throws Exception
{
AMQQueue queue = createTestQueue(getName(), getName() + "Owner", true);
- _store.createQueue(queue);
+ _configStore.createQueue(queue);
reopenStore();
verify(_queueRecoveryHandler).queue(_queueId, getName(), getName() + "Owner", true, null, null);
@@ -197,7 +198,7 @@ public class DurableConfigurationStoreTe
attributes.put("x-qpid-maximum-delivery-count", new Integer(10));
FieldTable arguments = FieldTable.convertToFieldTable(attributes);
- _store.createQueue(queue, arguments);
+ _configStore.createQueue(queue, arguments);
reopenStore();
verify(_queueRecoveryHandler).queue(_queueId, getName(), getName() + "Owner", true, arguments, null);
@@ -208,7 +209,7 @@ public class DurableConfigurationStoreTe
Exchange alternateExchange = createTestAlternateExchange();
AMQQueue queue = createTestQueue(getName(), getName() + "Owner", true, alternateExchange);
- _store.createQueue(queue);
+ _configStore.createQueue(queue);
reopenStore();
verify(_queueRecoveryHandler).queue(_queueId, getName(), getName() + "Owner", true, null, alternateExchange.getId());
@@ -230,11 +231,11 @@ public class DurableConfigurationStoreTe
attributes.put("x-qpid-dlq-enabled", Boolean.TRUE);
attributes.put("x-qpid-maximum-delivery-count", new Integer(10));
FieldTable arguments = FieldTable.convertToFieldTable(attributes);
- _store.createQueue(queue, arguments);
+ _configStore.createQueue(queue, arguments);
// update the queue to have exclusive=false
queue = createTestQueue(getName(), getName() + "Owner", false);
- _store.updateQueue(queue);
+ _configStore.updateQueue(queue);
reopenStore();
verify(_queueRecoveryHandler).queue(_queueId, getName(), getName() + "Owner", false, arguments, null);
@@ -248,12 +249,12 @@ public class DurableConfigurationStoreTe
attributes.put("x-qpid-dlq-enabled", Boolean.TRUE);
attributes.put("x-qpid-maximum-delivery-count", new Integer(10));
FieldTable arguments = FieldTable.convertToFieldTable(attributes);
- _store.createQueue(queue, arguments);
+ _configStore.createQueue(queue, arguments);
// update the queue to have exclusive=false
Exchange alternateExchange = createTestAlternateExchange();
queue = createTestQueue(getName(), getName() + "Owner", false, alternateExchange);
- _store.updateQueue(queue);
+ _configStore.updateQueue(queue);
reopenStore();
verify(_queueRecoveryHandler).queue(_queueId, getName(), getName() + "Owner", false, arguments, alternateExchange.getId());
@@ -267,10 +268,10 @@ public class DurableConfigurationStoreTe
attributes.put("x-qpid-dlq-enabled", Boolean.TRUE);
attributes.put("x-qpid-maximum-delivery-count", new Integer(10));
FieldTable arguments = FieldTable.convertToFieldTable(attributes);
- _store.createQueue(queue, arguments);
+ _configStore.createQueue(queue, arguments);
// remove queue
- _store.removeQueue(queue);
+ _configStore.removeQueue(queue);
reopenStore();
verify(_queueRecoveryHandler, never()).queue(any(UUID.class), anyString(), anyString(), anyBoolean(),
any(FieldTable.class), any(UUID.class));
@@ -306,18 +307,19 @@ public class DurableConfigurationStoreTe
private void reopenStore() throws Exception
{
- if (_store != null)
+ if (_messageStore != null)
{
- _store.close();
+ _messageStore.close();
}
- _store = createStore();
+ _messageStore = createMessageStore();
+ _configStore = createConfigStore();
- _store.configureConfigStore(_storeName, _recoveryHandler, _configuration);
- _store.configureMessageStore(_storeName, _messageStoreRecoveryHandler, _logRecoveryHandler, _configuration);
- _store.activate();
+ _configStore.configureConfigStore(_storeName, _recoveryHandler, _configuration);
+ _messageStore.configureMessageStore(_storeName, _messageStoreRecoveryHandler, _logRecoveryHandler, _configuration);
+ _messageStore.activate();
}
- protected MessageStore createStore() throws Exception
+ protected MessageStore createMessageStore() throws Exception
{
String storeClass = System.getProperty(MESSAGE_STORE_CLASS_NAME_KEY);
if (storeClass == null)
@@ -329,6 +331,26 @@ public class DurableConfigurationStoreTe
return messageStore;
}
+ protected DurableConfigurationStore createConfigStore() throws Exception
+ {
+ String storeClass = System.getProperty(CONFIGURATION_STORE_CLASS_NAME_KEY);
+ if (storeClass == null)
+ {
+ storeClass = DerbyMessageStore.class.getName();
+ }
+ Class<DurableConfigurationStore> clazz = (Class<DurableConfigurationStore>) Class.forName(storeClass);
+ DurableConfigurationStore configurationStore ;
+ if(clazz.isInstance(_messageStore))
+ {
+ configurationStore = (DurableConfigurationStore) _messageStore;
+ }
+ else
+ {
+ configurationStore = (DurableConfigurationStore) Class.forName(storeClass).newInstance();
+ }
+ return configurationStore;
+ }
+
public void testRecordXid() throws Exception
{
Record enqueueRecord = getTestRecord(1);
@@ -338,13 +360,13 @@ public class DurableConfigurationStoreTe
byte[] globalId = new byte[] { 1 };
byte[] branchId = new byte[] { 2 };
- Transaction transaction = _store.newTransaction();
+ Transaction transaction = _messageStore.newTransaction();
transaction.recordXid(1l, globalId, branchId, enqueues, dequeues);
transaction.commitTran();
reopenStore();
verify(_dtxRecordRecoveryHandler).dtxRecord(1l, globalId, branchId, enqueues, dequeues);
- transaction = _store.newTransaction();
+ transaction = _messageStore.newTransaction();
transaction.removeXid(1l, globalId, branchId);
transaction.commitTran();
Modified: qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/store/MessageStoreQuotaEventsTestBase.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/store/MessageStoreQuotaEventsTestBase.java?rev=1493675&r1=1493674&r2=1493675&view=diff
==============================================================================
--- qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/store/MessageStoreQuotaEventsTestBase.java (original)
+++ qpid/branches/java-broker-vhost-refactor/java/broker/src/test/java/org/apache/qpid/server/store/MessageStoreQuotaEventsTestBase.java Mon Jun 17 08:11:06 2013
@@ -71,7 +71,7 @@ public abstract class MessageStoreQuotaE
applyStoreSpecificConfiguration(config);
_store = createStore();
- _store.configureConfigStore("test", null, config);
+ ((DurableConfigurationStore)_store).configureConfigStore("test", null, config);
_transactionResource = UUID.randomUUID();
_events = new ArrayList<Event>();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org