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 2016/05/22 21:03:47 UTC

svn commit: r1745091 [1/3] - in /qpid/java/trunk: bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/ broker-codegen/src/main/java/org/apache/qpid/server/model/validation/ broker-core/src/main/java/org/apache/qpid/server/configuration...

Author: rgodfrey
Date: Sun May 22 21:03:46 2016
New Revision: 1745091

URL: http://svn.apache.org/viewvc?rev=1745091&view=rev
Log:
QPID-7000 : Allow for the creation of synthetic address spaces which do not have all the other attributes/behaviours of a full "VirtualHost"

Added:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContextProvider.java   (with props)
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Named.java   (with props)
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/NamedAddressSpace.java   (with props)
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/TaskExecutorProvider.java   (with props)
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8.java   (with props)
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Impl.java
      - copied, changed from r1744872, qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8.java
Modified:
    qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java
    qpid/java/trunk/broker-codegen/src/main/java/org/apache/qpid/server/model/validation/AttributeAnnotationValidator.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/connection/ConnectionPrincipal.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttributeOrStatistic.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedAttributeOrStatistic.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodAttribute.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodAttributeOrStatistic.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableAttribute.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableInjectedAttribute.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAlias.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/PortFactory.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/MessageConverter.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AbstractAMQPConnection.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DistributedTransaction.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxBranch.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxRegistry.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AsynchronousMessageStoreRecoverer.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/SynchronousMessageStoreRecoverer.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/AbstractFixedVirtualHostNodeAlias.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/DefaultVirtualHostAliasImpl.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/VirtualHostNameAliasImpl.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhost/SynchronousMessageStoreRecovererTest.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhostalias/VirtualHostAliasTest.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/AMQPConnection_0_10.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageConverter_Internal_to_v0_10.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageConverter_v0_10.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageConverter_v0_10_to_Internal.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/test/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegateTest.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/test/java/org/apache/qpid/server/protocol/v0_10/ServerSessionTest.java
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/BrokerDecoder.java
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ConsumerTarget_0_8.java
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/MessageConverter_Internal_to_v0_8.java
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/MessageConverter_v0_8_to_Internal.java
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_8.java
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_9.java
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_9_1.java
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolOutputConverterImpl.java
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQChannelTest.java
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Test.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_to_1_0.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_v1_0_to_Internal.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ReceivingLink_1_0.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/TxnCoordinatorLink_1_0.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0Test.java
    qpid/java/trunk/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_1_0_to_v0_10.java
    qpid/java/trunk/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java
    qpid/java/trunk/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_8_to_0_10.java
    qpid/java/trunk/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java
    qpid/java/trunk/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreQuotaEventsTest.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java

Modified: qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java (original)
+++ qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java Sun May 22 21:03:46 2016
@@ -119,6 +119,12 @@ public class BDBHAReplicaVirtualHostImpl
     }
 
     @Override
+    public boolean isActive()
+    {
+        return false;
+    }
+
+    @Override
     protected void validateChange(final ConfiguredObject<?> proxyForValidation, final Set<String> changedAttributes)
     {
         super.validateChange(proxyForValidation, changedAttributes);
@@ -323,6 +329,27 @@ public class BDBHAReplicaVirtualHostImpl
     }
 
     @Override
+    public <T extends MessageSource> T createMessageSource(final Class<T> clazz, final Map<String, Object> attributes)
+    {
+        throwUnsupportedForReplica();
+        return null;
+    }
+
+    @Override
+    public <T extends MessageDestination> T createMessageDestination(final Class<T> clazz,
+                                                                     final Map<String, Object> attributes)
+    {
+        throwUnsupportedForReplica();
+        return null;
+    }
+
+    @Override
+    public boolean hasMessageSources()
+    {
+        return false;
+    }
+
+    @Override
     public void setTargetSize(final long targetSize)
     {
 

Modified: qpid/java/trunk/broker-codegen/src/main/java/org/apache/qpid/server/model/validation/AttributeAnnotationValidator.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-codegen/src/main/java/org/apache/qpid/server/model/validation/AttributeAnnotationValidator.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-codegen/src/main/java/org/apache/qpid/server/model/validation/AttributeAnnotationValidator.java (original)
+++ qpid/java/trunk/broker-codegen/src/main/java/org/apache/qpid/server/model/validation/AttributeAnnotationValidator.java Sun May 22 21:03:46 2016
@@ -86,8 +86,8 @@ public class AttributeAnnotationValidato
         typeUtils = processingEnv.getTypeUtils();
         messager = processingEnv.getMessager();
 
-        processAttributes(roundEnv, MANAGED_ATTRIBUTE_CLASS_NAME);
-        processAttributes(roundEnv, DERIVED_ATTRIBUTE_CLASS_NAME);
+        processAttributes(roundEnv, MANAGED_ATTRIBUTE_CLASS_NAME, false);
+        processAttributes(roundEnv, DERIVED_ATTRIBUTE_CLASS_NAME, true);
 
         processStatistics(roundEnv, MANAGED_STATISTIC_CLASS_NAME);
 
@@ -95,7 +95,7 @@ public class AttributeAnnotationValidato
     }
 
     public void processAttributes(final RoundEnvironment roundEnv,
-                                  String elementName)
+                                  String elementName, final boolean allowedNamed)
     {
 
         TypeElement annotationElement = elementUtils.getTypeElement(elementName);
@@ -109,7 +109,7 @@ public class AttributeAnnotationValidato
             checkInterfaceExtendsConfiguredObject(annotationElement, methodElement);
             checkMethodTakesNoArgs(annotationElement, methodElement);
             checkMethodName(annotationElement, methodElement);
-            checkMethodReturnType(annotationElement, methodElement);
+            checkMethodReturnType(annotationElement, methodElement, allowedNamed);
 
             checkTypeAgreesWithName(annotationElement, methodElement);
 
@@ -243,9 +243,11 @@ public class AttributeAnnotationValidato
         }
     }
 
-    public void checkMethodReturnType(final TypeElement annotationElement, final ExecutableElement methodElement)
+    public void checkMethodReturnType(final TypeElement annotationElement,
+                                      final ExecutableElement methodElement,
+                                      final boolean allowNamed)
     {
-        if (!isValidType(methodElement.getReturnType()))
+        if (!(isValidType(methodElement.getReturnType()) || (allowNamed && isNamed(methodElement.getReturnType()))))
         {
             messager.printMessage(Diagnostic.Kind.ERROR,
                                   "@"
@@ -429,6 +431,24 @@ public class AttributeAnnotationValidato
         return false;
     }
 
+    private boolean isNamed(final TypeMirror type)
+    {
+        return isNamed(processingEnv, type);
+    }
+
+    static boolean isNamed(ProcessingEnvironment processingEnv,
+                               final TypeMirror type)
+    {
+        Types typeUtils = processingEnv.getTypeUtils();
+
+        String className = "org.apache.qpid.server.model.Named";
+        TypeMirror namedType = getErasure(processingEnv, className);
+
+        return typeUtils.isAssignable(typeUtils.erasure(type), namedType);
+
+    }
+
+
     private TypeMirror getErasure(final String className)
     {
         return getErasure(processingEnv, className);

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java Sun May 22 21:03:46 2016
@@ -36,6 +36,7 @@ import org.apache.qpid.server.model.Brok
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.ConfiguredObjectAttribute;
 import org.apache.qpid.server.model.ConfiguredObjectTypeRegistry;
+import org.apache.qpid.server.model.ConfiguredSettableAttribute;
 import org.apache.qpid.server.model.Model;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.Protocol;
@@ -412,7 +413,8 @@ public class ManagementModeStoreHandler
         ConfiguredObjectTypeRegistry typeRegistry = model.getTypeRegistry();
         Map<String, ConfiguredObjectAttribute<?, ?>> attributeTypes =
                 typeRegistry.getAttributeTypes(Port.class);
-        ConfiguredObjectAttribute protocolsAttribute = attributeTypes.get(Port.PROTOCOLS);
+        ConfiguredSettableAttribute protocolsAttribute =
+                (ConfiguredSettableAttribute) attributeTypes.get(Port.PROTOCOLS);
         return (Set<Protocol>) protocolsAttribute.convert(object,_parent);
 
     }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/connection/ConnectionPrincipal.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/connection/ConnectionPrincipal.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/connection/ConnectionPrincipal.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/connection/ConnectionPrincipal.java Sun May 22 21:03:46 2016
@@ -52,11 +52,6 @@ public class ConnectionPrincipal impleme
         return _connection;
     }
 
-    public VirtualHost<?> getVirtualHost()
-    {
-        return _connection.getVirtualHost();
-    }
-
     @Override
     public boolean equals(final Object o)
     {

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java Sun May 22 21:03:46 2016
@@ -2929,21 +2929,32 @@ public abstract class AbstractConfigured
             Object value;
             if(!attribute.isDerived())
             {
-                ConfiguredSettableAttribute autoAttr = (ConfiguredSettableAttribute) attribute;
+                ConfiguredSettableAttribute settableAttr = (ConfiguredSettableAttribute) attribute;
                 value = _attributes.get(attribute.getName());
-                if (value == null && !"".equals(autoAttr.defaultValue()))
+                if (value == null && !"".equals(settableAttr.defaultValue()))
                 {
-                    value = autoAttr.defaultValue();
+                    value = settableAttr.defaultValue();
                 }
+                return convert(settableAttr, value);
             }
             else
             {
-                value = _attributes.get(attribute.getName());
+                if(_attributes.containsKey(attribute.getName()))
+                {
+                    return _attributes.get(attribute.getName());
+                }
+                else if(_configuredObject != null)
+                {
+                    return _configuredObject.getAttribute(attribute.getName());
+                }
+                else
+                {
+                    return null;
+                }
             }
-            return convert(attribute, value);
         }
 
-        protected Object convert(ConfiguredObjectAttribute attribute, Object value)
+        protected Object convert(ConfiguredSettableAttribute attribute, Object value)
         {
             return attribute.convert(value, _configuredObject);
         }
@@ -3018,7 +3029,7 @@ public abstract class AbstractConfigured
         }
 
         @Override
-        protected Object convert(ConfiguredObjectAttribute attribute, Object value)
+        protected Object convert(ConfiguredSettableAttribute attribute, Object value)
         {
             return attribute.convert(value, _parent);
         }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java Sun May 22 21:03:46 2016
@@ -43,12 +43,15 @@ public class ConfiguredAutomatedAttribut
     private final ManagedAttribute _annotation;
     private final Method _validValuesMethod;
     private final Pattern _secureValuePattern;
+    private final AttributeValueConverter<T> _converter;
 
     ConfiguredAutomatedAttribute(final Class<C> clazz,
                                  final Method getter,
                                  final ManagedAttribute annotation)
     {
         super(clazz, getter);
+        _converter = AttributeValueConverter.getConverter(getType(), getter.getGenericReturnType());
+
         _annotation = annotation;
         Method validValuesMethod = null;
 
@@ -71,6 +74,13 @@ public class ConfiguredAutomatedAttribut
         }
     }
 
+    @Override
+    public final AttributeValueConverter<T> getConverter()
+    {
+        return _converter;
+    }
+
+
     private Method getValidValuesMethod(final String validValue, final Class<C> clazz)
     {
         if(validValue.matches("([\\w][\\w\\d_]+\\.)+[\\w][\\w\\d_\\$]*#[\\w\\d_]+\\s*\\(\\s*\\)"))
@@ -218,4 +228,25 @@ public class ConfiguredAutomatedAttribut
     {
         return _annotation.validValuePattern();
     }
+
+
+    @Override
+    public T convert(final Object value, C object)
+    {
+        final AttributeValueConverter<T> converter = getConverter();
+        try
+        {
+            return converter.convert(value, object);
+        }
+        catch (IllegalArgumentException iae)
+        {
+            Type returnType = getGetter().getGenericReturnType();
+            String simpleName = returnType instanceof Class ? ((Class) returnType).getSimpleName() : returnType.toString();
+
+            throw new IllegalArgumentException("Cannot convert '" + value
+                                               + "' into a " + simpleName
+                                               + " for attribute " + getName()
+                                               + " (" + iae.getMessage() + ")", iae);
+        }
+    }
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java Sun May 22 21:03:46 2016
@@ -37,7 +37,7 @@ import org.apache.qpid.server.store.Conf
 /**
  * An object that can be "managed" (eg via the web interface) and usually read from configuration.
  */
-public interface ConfiguredObject<X extends ConfiguredObject<X>>
+public interface ConfiguredObject<X extends ConfiguredObject<X>> extends ContextProvider, TaskExecutorProvider
 {
     String OVER_SIZED_ATTRIBUTE_ALTERNATIVE_TEXT = "Value is too long to display";
 
@@ -83,12 +83,6 @@ public interface ConfiguredObject<X exte
     @ManagedAttribute
     Map<String, String> getContext();
 
-    <T> T getContextValue(Class<T> clazz, String propertyName);
-
-    <T> T getContextValue(Class<T> clazz, Type t, String propertyName);
-
-    Set<String> getContextKeys(final boolean excludeSystem);
-
     @DerivedAttribute( persist = true )
     String getLastUpdatedBy();
 
@@ -259,8 +253,6 @@ public interface ConfiguredObject<X exte
 
     ListenableFuture<Void> deleteAsync();
 
-    TaskExecutor getTaskExecutor();
-
     TaskExecutor getChildExecutor();
 
     ConfiguredObjectFactory getObjectFactory();

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java Sun May 22 21:03:46 2016
@@ -45,6 +45,5 @@ public interface ConfiguredObjectAttribu
 
     boolean isSecureValue(Object value);
 
-    T convert(Object value, C object);
 
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttributeOrStatistic.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttributeOrStatistic.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttributeOrStatistic.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttributeOrStatistic.java Sun May 22 21:03:46 2016
@@ -32,5 +32,5 @@ public interface ConfiguredObjectAttribu
 
     T getValue(C configuredObject);
 
-    AttributeValueConverter<T> getConverter();
+    //AttributeValueConverter<T> getConverter();
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedAttributeOrStatistic.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedAttributeOrStatistic.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedAttributeOrStatistic.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedAttributeOrStatistic.java Sun May 22 21:03:46 2016
@@ -29,7 +29,6 @@ abstract class ConfiguredObjectInjectedA
     private final String _name;
     private final Class<T> _type;
     private final Type _genericType;
-    private final AttributeValueConverter<T> _converter;
     private final TypeValidator _typeValidator;
 
     ConfiguredObjectInjectedAttributeOrStatistic(String name,
@@ -42,7 +41,6 @@ abstract class ConfiguredObjectInjectedA
         _type = type;
         _genericType = genericType;
         _typeValidator = typeValidator;
-        _converter = AttributeValueConverter.getConverter(type, genericType);
 
 
     }
@@ -66,35 +64,9 @@ abstract class ConfiguredObjectInjectedA
     }
 
     @Override
-    public final AttributeValueConverter<T> getConverter()
-    {
-        return _converter;
-    }
-
-    @Override
     public final boolean appliesToConfiguredObjectType(final Class<? extends ConfiguredObject<?>> type)
     {
         return _typeValidator.appliesToType(type);
     }
 
-    public final T convert(final Object value, final C object)
-    {
-        final AttributeValueConverter<T> converter = getConverter();
-        try
-        {
-            return converter.convert(value, object);
-        }
-        catch (IllegalArgumentException iae)
-        {
-            Type returnType = getGenericType();
-            String simpleName = returnType instanceof Class ? ((Class) returnType).getSimpleName() : returnType.toString();
-
-            throw new IllegalArgumentException("Cannot convert '" + value
-                                               + "' into a " + simpleName
-                                               + " for attribute " + getName()
-                                               + " (" + iae.getMessage() + ")", iae);
-        }
-    }
-
-
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodAttribute.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodAttribute.java Sun May 22 21:03:46 2016
@@ -56,23 +56,4 @@ public abstract class ConfiguredObjectMe
         return false;
     }
 
-    @Override
-    public T convert(final Object value, C object)
-    {
-        final AttributeValueConverter<T> converter = getConverter();
-        try
-        {
-            return converter.convert(value, object);
-        }
-        catch (IllegalArgumentException iae)
-        {
-            Type returnType = getGetter().getGenericReturnType();
-            String simpleName = returnType instanceof Class ? ((Class) returnType).getSimpleName() : returnType.toString();
-
-            throw new IllegalArgumentException("Cannot convert '" + value
-                                               + "' into a " + simpleName
-                                               + " for attribute " + getName()
-                                               + " (" + iae.getMessage() + ")", iae);
-        }
-    }
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodAttributeOrStatistic.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodAttributeOrStatistic.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodAttributeOrStatistic.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodAttributeOrStatistic.java Sun May 22 21:03:46 2016
@@ -32,7 +32,6 @@ abstract class ConfiguredObjectMethodAtt
 
     private final String _name;
     private final Class<T> _type;
-    private final AttributeValueConverter<T> _converter;
     private final Method _getter;
 
     ConfiguredObjectMethodAttributeOrStatistic(final Method getter)
@@ -41,8 +40,6 @@ abstract class ConfiguredObjectMethodAtt
         _getter = getter;
         _type = (Class<T>) AttributeValueConverter.getTypeFromMethod(getter);
         _name = AttributeValueConverter.getNameFromMethod(getter, getType());
-        _converter = AttributeValueConverter.getConverter(getType(), getter.getGenericReturnType());
-
     }
 
     @Override
@@ -104,11 +101,4 @@ abstract class ConfiguredObjectMethodAtt
         return _getter;
     }
 
-    @Override
-    public AttributeValueConverter<T> getConverter()
-    {
-        return _converter;
-    }
-
-
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableAttribute.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableAttribute.java Sun May 22 21:03:46 2016
@@ -35,4 +35,9 @@ public interface ConfiguredSettableAttri
     String validValuePattern();
 
     boolean hasValidValues();
+
+    AttributeValueConverter<T> getConverter();
+
+    T convert(Object value, C object);
+
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableInjectedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableInjectedAttribute.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableInjectedAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableInjectedAttribute.java Sun May 22 21:03:46 2016
@@ -41,6 +41,7 @@ public class ConfiguredSettableInjectedA
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ConfiguredSettableInjectedAttribute.class);
 
+    private final AttributeValueConverter<T> _converter;
     private final Method _validValuesMethod;
     private final Pattern _secureValuePattern;
     private final String _defaultValue;
@@ -68,6 +69,7 @@ public class ConfiguredSettableInjectedA
                                                final String validValuePattern, final TypeValidator typeValidator)
     {
         super(name, type, genericType, typeValidator);
+        _converter = AttributeValueConverter.getConverter(type, genericType);
 
         _defaultValue = defaultValue;
         _secure = secure;
@@ -99,6 +101,12 @@ public class ConfiguredSettableInjectedA
         }
     }
 
+    @Override
+    public final AttributeValueConverter<T> getConverter()
+    {
+        return _converter;
+    }
+
     private Method getValidValuesMethod(final String validValue)
     {
         if(validValue.matches("([\\w][\\w\\d_]+\\.)+[\\w][\\w\\d_\\$]*#[\\w\\d_]+\\s*\\(\\s*\\)"))
@@ -254,6 +262,26 @@ public class ConfiguredSettableInjectedA
         return convert(value, configuredObject);
     }
 
+    public final T convert(final Object value, final C object)
+    {
+        final AttributeValueConverter<T> converter = getConverter();
+        try
+        {
+            return converter.convert(value, object);
+        }
+        catch (IllegalArgumentException iae)
+        {
+            Type returnType = getGenericType();
+            String simpleName = returnType instanceof Class ? ((Class) returnType).getSimpleName() : returnType.toString();
+
+            throw new IllegalArgumentException("Cannot convert '" + value
+                                               + "' into a " + simpleName
+                                               + " for attribute " + getName()
+                                               + " (" + iae.getMessage() + ")", iae);
+        }
+    }
+
+
     @Override
     public String validValuePattern()
     {

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java Sun May 22 21:03:46 2016
@@ -96,7 +96,7 @@ public interface Connection<X extends Co
     Protocol getProtocol();
 
     @DerivedAttribute
-    VirtualHost<?> getVirtualHost();
+    NamedAddressSpace getAddressSpace();
 
     @DerivedAttribute
     Port<?> getPort();

Added: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContextProvider.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContextProvider.java?rev=1745091&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContextProvider.java (added)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContextProvider.java Sun May 22 21:03:46 2016
@@ -0,0 +1,33 @@
+/*
+ *
+ * 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.model;
+
+import java.lang.reflect.Type;
+import java.util.Set;
+
+public interface ContextProvider
+{
+    <T> T getContextValue(Class<T> clazz, String propertyName);
+
+    <T> T getContextValue(Class<T> clazz, Type t, String propertyName);
+
+    Set<String> getContextKeys(boolean excludeSystem);
+}

Propchange: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContextProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Named.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Named.java?rev=1745091&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Named.java (added)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Named.java Sun May 22 21:03:46 2016
@@ -0,0 +1,26 @@
+/*
+ *
+ * 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.model;
+
+public interface Named
+{
+    String getName();
+}

Propchange: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Named.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/NamedAddressSpace.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/NamedAddressSpace.java?rev=1745091&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/NamedAddressSpace.java (added)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/NamedAddressSpace.java Sun May 22 21:03:46 2016
@@ -0,0 +1,69 @@
+/*
+ *
+ * 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.model;
+
+import java.security.Principal;
+import java.util.Collection;
+import java.util.Map;
+
+import org.apache.qpid.server.message.MessageDestination;
+import org.apache.qpid.server.message.MessageSource;
+import org.apache.qpid.server.model.port.AmqpPort;
+import org.apache.qpid.server.protocol.LinkRegistry;
+import org.apache.qpid.server.store.MessageStore;
+import org.apache.qpid.server.transport.AMQPConnection;
+import org.apache.qpid.server.txn.DtxRegistry;
+
+public interface NamedAddressSpace extends Named
+{
+
+    MessageSource getAttainedMessageSource(String name);
+
+    MessageDestination getAttainedMessageDestination(String name);
+
+    void registerConnection(AMQPConnection<?> connection);
+    void deregisterConnection(AMQPConnection<?> connection);
+
+
+    String getRedirectHost(AmqpPort<?> port);
+
+    Principal getPrincipal();
+
+    boolean isActive();
+
+    MessageDestination getDefaultDestination();
+
+    LinkRegistry getLinkRegistry(String remoteContainerId);
+
+    boolean authoriseCreateConnection(AMQPConnection<?> connection);
+
+    DtxRegistry getDtxRegistry();
+
+    MessageStore getMessageStore();
+
+    <T extends MessageSource> T createMessageSource(Class<T> clazz, Map<String,Object> attributes);
+    <T extends MessageDestination> T createMessageDestination(Class<T> clazz, Map<String,Object> attributes);
+
+    boolean hasMessageSources();
+
+    Collection<? extends Connection<?>> getConnections();
+
+}

Propchange: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/NamedAddressSpace.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/TaskExecutorProvider.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/TaskExecutorProvider.java?rev=1745091&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/TaskExecutorProvider.java (added)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/TaskExecutorProvider.java Sun May 22 21:03:46 2016
@@ -0,0 +1,28 @@
+/*
+ *
+ * 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.model;
+
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
+
+public interface TaskExecutorProvider
+{
+    TaskExecutor getTaskExecutor();
+}

Propchange: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/TaskExecutorProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java Sun May 22 21:03:46 2016
@@ -46,7 +46,7 @@ import org.apache.qpid.server.virtualhos
 
 @ManagedObject( defaultType = "ProvidedStore", description = VirtualHost.CLASS_DESCRIPTION)
 public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject<X>, StatisticsGatherer,
-                                                               EventLoggerProvider
+                                                               EventLoggerProvider, NamedAddressSpace
 {
     String CLASS_DESCRIPTION = "<p>A virtualhost is a namespace in which messaging is performed. Virtualhosts are "
                                + "independent; the messaging goes on a within a virtualhost is independent of any "
@@ -189,6 +189,7 @@ public interface VirtualHost<X extends V
 
     Broker<?> getBroker();
 
+    @Override
     @ManagedOperation(nonModifying = true)
     Collection<? extends Connection<?>> getConnections();
 
@@ -199,8 +200,6 @@ public interface VirtualHost<X extends V
 
     void stop();
 
-    String getRedirectHost(AmqpPort<?> port);
-
     Principal getPrincipal();
 
     void registerConnection(AMQPConnection<?> connection);
@@ -208,10 +207,6 @@ public interface VirtualHost<X extends V
 
     Queue<?> getAttainedQueue(UUID id);
 
-    MessageSource getAttainedMessageSource(String name);
-
-    MessageDestination getAttainedMessageDestination(String name);
-
     <T extends ConfiguredObject<?>> T getAttainedChildFromAddress(Class<T> childClass,
                                                                   String address);
 
@@ -223,14 +218,8 @@ public interface VirtualHost<X extends V
 
     void scheduleHouseKeepingTask(long period, HouseKeepingTask task);
 
-    DtxRegistry getDtxRegistry();
-
-    LinkRegistry getLinkRegistry(String remoteContainerId);
-
     ScheduledFuture<?> scheduleTask(long delay, Runnable timeoutTask);
 
-    boolean authoriseCreateConnection(AMQPConnection<?> connection);
-
     String getLocalAddress(String routingAddress);
 
     interface Transaction

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAlias.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAlias.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAlias.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAlias.java Sun May 22 21:03:46 2016
@@ -32,5 +32,6 @@ public interface VirtualHostAlias<X exte
     int getPriority();
 
 
-    VirtualHostNode getVirtualHostNode(String name);
+    NamedAddressSpace getAddressSpace(String name);
+
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java Sun May 22 21:03:46 2016
@@ -29,6 +29,7 @@ import org.apache.qpid.server.model.Mana
 import org.apache.qpid.server.model.ManagedContextDefault;
 import org.apache.qpid.server.model.ManagedObject;
 import org.apache.qpid.server.model.ManagedStatistic;
+import org.apache.qpid.server.model.NamedAddressSpace;
 import org.apache.qpid.server.model.Protocol;
 import org.apache.qpid.server.model.StatisticType;
 import org.apache.qpid.server.model.StatisticUnit;
@@ -147,7 +148,7 @@ public interface AmqpPort<X extends Amqp
                                     + " the connection will be aborted.")
     long getProtocolHandshakeTimeout();
 
-    VirtualHost<?> getVirtualHost(String name);
+    NamedAddressSpace getAddressSpace(String name);
 
     boolean canAcceptNewConnection(final SocketAddress remoteSocketAddress);
 

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java Sun May 22 21:03:46 2016
@@ -53,21 +53,7 @@ import org.apache.qpid.server.configurat
 import org.apache.qpid.server.logging.messages.BrokerMessages;
 import org.apache.qpid.server.logging.messages.PortMessages;
 import org.apache.qpid.server.logging.subjects.PortLogSubject;
-import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.ConfiguredObject;
-import org.apache.qpid.server.model.DefaultVirtualHostAlias;
-import org.apache.qpid.server.model.HostNameAlias;
-import org.apache.qpid.server.model.KeyStore;
-import org.apache.qpid.server.model.ManagedAttributeField;
-import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
-import org.apache.qpid.server.model.Protocol;
-import org.apache.qpid.server.model.State;
-import org.apache.qpid.server.model.Transport;
-import org.apache.qpid.server.model.TrustStore;
-import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.model.VirtualHostAlias;
-import org.apache.qpid.server.model.VirtualHostNameAlias;
-import org.apache.qpid.server.model.VirtualHostNode;
+import org.apache.qpid.server.model.*;
 import org.apache.qpid.server.plugin.ProtocolEngineCreator;
 import org.apache.qpid.server.plugin.QpidServiceLoader;
 import org.apache.qpid.server.plugin.TransportProviderFactory;
@@ -236,7 +222,7 @@ public class AmqpPortImpl extends Abstra
     }
 
     @Override
-    public VirtualHost<?> getVirtualHost(String name)
+    public NamedAddressSpace getAddressSpace(String name)
     {
         Collection<VirtualHostAlias> aliases = new TreeSet<>(VIRTUAL_HOST_ALIAS_COMPARATOR);
 
@@ -244,10 +230,10 @@ public class AmqpPortImpl extends Abstra
 
         for(VirtualHostAlias alias : aliases)
         {
-            VirtualHostNode vhn = alias.getVirtualHostNode(name);
-            if (vhn != null)
+            NamedAddressSpace addressSpace = alias.getAddressSpace(name);
+            if (addressSpace != null)
             {
-                return vhn.getVirtualHost();
+                return addressSpace;
             }
         }
         return null;

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/PortFactory.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/PortFactory.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/PortFactory.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/PortFactory.java Sun May 22 21:03:46 2016
@@ -31,6 +31,7 @@ import org.apache.qpid.server.model.Conf
 import org.apache.qpid.server.model.ConfiguredObjectAttribute;
 import org.apache.qpid.server.model.ConfiguredObjectFactory;
 import org.apache.qpid.server.model.ConfiguredObjectTypeRegistry;
+import org.apache.qpid.server.model.ConfiguredSettableAttribute;
 import org.apache.qpid.server.model.Model;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.Protocol;
@@ -63,7 +64,8 @@ public class PortFactory<X extends Port<
         ConfiguredObjectTypeRegistry typeRegistry = model.getTypeRegistry();
         Map<String, ConfiguredObjectAttribute<?, ?>> attributeTypes =
                 typeRegistry.getAttributeTypes(Port.class);
-        ConfiguredObjectAttribute protocolsAttribute = attributeTypes.get(Port.PROTOCOLS);
+        ConfiguredSettableAttribute protocolsAttribute =
+                (ConfiguredSettableAttribute) attributeTypes.get(Port.PROTOCOLS);
         Set<Protocol> protocols = (Set<Protocol>) protocolsAttribute.convert(portAttributes.get(Port.PROTOCOLS),broker);
         ProtocolType protocolType = null;
 

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/MessageConverter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/MessageConverter.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/MessageConverter.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/MessageConverter.java Sun May 22 21:03:46 2016
@@ -21,12 +21,12 @@
 package org.apache.qpid.server.plugin;
 
 import org.apache.qpid.server.message.ServerMessage;
-import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.NamedAddressSpace;
 
 public interface MessageConverter<M extends ServerMessage, N extends ServerMessage> extends Pluggable
 {
     Class<M> getInputClass();
     Class<N> getOutputClass();
 
-    N convert(M message, VirtualHost<?> vhost);
+    N convert(M message, NamedAddressSpace addressSpace);
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AbstractAMQPConnection.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AbstractAMQPConnection.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AbstractAMQPConnection.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AbstractAMQPConnection.java Sun May 22 21:03:46 2016
@@ -20,17 +20,20 @@
  */
 package org.apache.qpid.server.transport;
 
+import java.lang.reflect.Type;
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
 import java.security.AccessControlContext;
 import java.security.AccessController;
 import java.security.Principal;
 import java.security.PrivilegedAction;
+import java.security.Security;
 import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
@@ -47,24 +50,28 @@ import org.apache.qpid.protocol.AMQConst
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
 import org.apache.qpid.server.connection.ConnectionPrincipal;
 import org.apache.qpid.server.logging.EventLogger;
+import org.apache.qpid.server.logging.EventLoggerProvider;
 import org.apache.qpid.server.logging.LogSubject;
 import org.apache.qpid.server.logging.messages.ConnectionMessages;
 import org.apache.qpid.server.logging.subjects.ConnectionLogSubject;
 import org.apache.qpid.server.model.AbstractConfiguredObject;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.ContextProvider;
+import org.apache.qpid.server.model.NamedAddressSpace;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.Protocol;
 import org.apache.qpid.server.model.Session;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.model.StateTransition;
+import org.apache.qpid.server.model.TaskExecutorProvider;
 import org.apache.qpid.server.model.Transport;
-import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.model.adapter.SessionAdapter;
 import org.apache.qpid.server.model.port.AmqpPort;
 import org.apache.qpid.server.protocol.AMQSessionModel;
 import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
 import org.apache.qpid.server.stats.StatisticsCounter;
+import org.apache.qpid.server.stats.StatisticsGatherer;
 import org.apache.qpid.server.util.Action;
 import org.apache.qpid.transport.network.AggregateTicker;
 import org.apache.qpid.transport.network.NetworkConnection;
@@ -72,7 +79,7 @@ import org.apache.qpid.transport.network
 
 public abstract class AbstractAMQPConnection<C extends AbstractAMQPConnection<C>>
         extends AbstractConfiguredObject<C>
-        implements ProtocolEngine, AMQPConnection<C>
+        implements ProtocolEngine, AMQPConnection<C>, EventLoggerProvider
 
 {
     private static final Logger _logger = LoggerFactory.getLogger(AbstractAMQPConnection.class);
@@ -91,6 +98,8 @@ public abstract class AbstractAMQPConnec
     private final LogSubject _logSubject;
     private final AtomicReference<Thread> _messageAssignmentAllowedThread = new AtomicReference<>();
     private final AtomicBoolean _messageAssignmentSuspended = new AtomicBoolean();
+    private volatile ContextProvider _contextProvider;
+    private volatile EventLoggerProvider _eventLoggerProvider;
     private String _clientProduct;
     private String _clientVersion;
     private String _remoteProcessPid;
@@ -101,11 +110,12 @@ public abstract class AbstractAMQPConnec
     private final SettableFuture<Void> _transportClosedFuture = SettableFuture.create();
     private final SettableFuture<Void> _modelClosedFuture = SettableFuture.create();
     private final AtomicBoolean _modelClosing = new AtomicBoolean();
-    private volatile VirtualHost<?> _virtualHost;
+    private volatile NamedAddressSpace _addressSpace;
     private volatile long _lastReadTime;
     private volatile long _lastWriteTime;
     private volatile AccessControlContext _accessControllerContext;
     private volatile Thread _ioThread;
+    private volatile StatisticsGatherer _statisticsGatherer;
 
     private volatile boolean _messageAuthorizationRequired;
 
@@ -123,6 +133,9 @@ public abstract class AbstractAMQPConnec
         super(parentsMap(port),createAttributes(connectionId, network));
 
         _broker = broker;
+        _eventLoggerProvider = broker;
+        _contextProvider = broker;
+        _statisticsGatherer = broker;
         _network = network;
         _port = port;
         _transport = transport;
@@ -282,7 +295,7 @@ public abstract class AbstractAMQPConnec
     @Override
     public final String getVirtualHostName()
     {
-        return getVirtualHost() == null ? null : getVirtualHost().getName();
+        return getAddressSpace() == null ? null : getAddressSpace().getName();
     }
 
     @Override
@@ -324,10 +337,10 @@ public abstract class AbstractAMQPConnec
 
     protected void updateMaxMessageSize()
     {
-        _maxMessageSize.set(Math.min(getMaxMessageSize(getPort()), getMaxMessageSize(getVirtualHost())));
+        _maxMessageSize.set(Math.min(getMaxMessageSize(getPort()), getMaxMessageSize(_contextProvider)));
     }
 
-    private long getMaxMessageSize(final ConfiguredObject<?> object)
+    private long getMaxMessageSize(final ContextProvider object)
     {
         long maxMessageSize;
         try
@@ -412,7 +425,7 @@ public abstract class AbstractAMQPConnec
     {
         _messagesDelivered.registerEvent(1L);
         _dataDelivered.registerEvent(messageSize);
-        getVirtualHost().registerMessageDelivered(messageSize);
+        _statisticsGatherer.registerMessageDelivered(messageSize);
     }
 
     @Override
@@ -420,7 +433,7 @@ public abstract class AbstractAMQPConnec
     {
         _messagesReceived.registerEvent(1L, timestamp);
         _dataReceived.registerEvent(messageSize, timestamp);
-        getVirtualHost().registerMessageReceived(messageSize, timestamp);
+        _statisticsGatherer.registerMessageReceived(messageSize, timestamp);
     }
 
     @Override
@@ -541,25 +554,17 @@ public abstract class AbstractAMQPConnec
     {
     }
 
-    public final void associateVirtualHost(final VirtualHost<?> virtualHost)
-    {
-        virtualHost.registerConnection(this);
-        _virtualHost = virtualHost;
-        updateMaxMessageSize();
-        _messageAuthorizationRequired = getVirtualHost().getContextValue(Boolean.class, Broker.BROKER_MSG_AUTH);
-    }
-
     @Override
     public TaskExecutor getChildExecutor()
     {
-        VirtualHost virtualHost = getVirtualHost();
-        if (virtualHost == null)
+        NamedAddressSpace addressSpace = getAddressSpace();
+        if (addressSpace instanceof TaskExecutorProvider)
         {
-            return super.getChildExecutor();
+            return ((TaskExecutorProvider)addressSpace).getTaskExecutor();
         }
         else
         {
-            return virtualHost.getTaskExecutor();
+            return super.getChildExecutor();
         }
     }
 
@@ -758,17 +763,10 @@ public abstract class AbstractAMQPConnec
         return _logSubject;
     }
 
+    @Override
     public EventLogger getEventLogger()
     {
-        final VirtualHost<?> virtualHost = getVirtualHost();
-        if (virtualHost != null)
-        {
-            return virtualHost.getEventLogger();
-        }
-        else
-        {
-            return getBroker().getEventLogger();
-        }
+        return _eventLoggerProvider.getEventLogger();
     }
 
     @Override
@@ -778,23 +776,44 @@ public abstract class AbstractAMQPConnec
     }
 
     @Override
-    public VirtualHost<?> getVirtualHost()
+    public NamedAddressSpace getAddressSpace()
     {
-        return _virtualHost;
+        return _addressSpace;
     }
 
-    public void setVirtualHost(VirtualHost<?> virtualHost)
+    public ContextProvider getContextProvider()
     {
-        associateVirtualHost(virtualHost);
+        return _contextProvider;
+    }
+
+    public void setAddressSpace(NamedAddressSpace addressSpace)
+    {
+        addressSpace.registerConnection(this);
+        _addressSpace = addressSpace;
 
-        _messageCompressionThreshold = virtualHost.getContextValue(Integer.class,
-                                                                   Broker.MESSAGE_COMPRESSION_THRESHOLD_SIZE);
+        if(addressSpace instanceof EventLoggerProvider)
+        {
+            _eventLoggerProvider = (EventLoggerProvider)addressSpace;
+        }
+        if(addressSpace instanceof ContextProvider)
+        {
+            _contextProvider = (ContextProvider) addressSpace;
+        }
+        if(addressSpace instanceof StatisticsGatherer)
+        {
+            _statisticsGatherer = (StatisticsGatherer) addressSpace;
+        }
+
+        updateMaxMessageSize();
+        _messageAuthorizationRequired = _contextProvider.getContextValue(Boolean.class, Broker.BROKER_MSG_AUTH);
+        _messageCompressionThreshold = _contextProvider.getContextValue(Integer.class,
+                                                                        Broker.MESSAGE_COMPRESSION_THRESHOLD_SIZE);
         if(_messageCompressionThreshold <= 0)
         {
             _messageCompressionThreshold = Integer.MAX_VALUE;
         }
 
-        getSubject().getPrincipals().add(virtualHost.getPrincipal());
+        getSubject().getPrincipals().add(addressSpace.getPrincipal());
 
         updateAccessControllerContext();
         logConnectionOpen();

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DistributedTransaction.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DistributedTransaction.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DistributedTransaction.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DistributedTransaction.java Sun May 22 21:03:46 2016
@@ -23,11 +23,10 @@ package org.apache.qpid.server.txn;
 
 import org.apache.qpid.server.message.EnqueueableMessage;
 import org.apache.qpid.server.message.MessageInstance;
-import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.NamedAddressSpace;
 import org.apache.qpid.server.protocol.AMQSessionModel;
 import org.apache.qpid.server.queue.BaseQueue;
 import org.apache.qpid.server.store.MessageEnqueueRecord;
-import org.apache.qpid.server.store.MessageStore;
 import org.apache.qpid.server.store.TransactionLogResource;
 import org.apache.qpid.transport.Xid;
 
@@ -41,14 +40,14 @@ public class DistributedTransaction impl
 
     private DtxBranch _branch;
     private AMQSessionModel _session;
-    private VirtualHost<?> _vhost;
+    private DtxRegistry _dtxRegistry;
 
 
-    public DistributedTransaction(AMQSessionModel session, MessageStore store, VirtualHost<?> vhost)
+    public DistributedTransaction(AMQSessionModel session, DtxRegistry dtxRegistry)
     {
         _session = session;
-        _vhost = vhost;
-        _autoCommitTransaction = new AutoCommitTransaction(vhost.getMessageStore());
+        _dtxRegistry = dtxRegistry;
+        _autoCommitTransaction = new AutoCommitTransaction(dtxRegistry.getMessageStore());
     }
 
     @Override
@@ -208,7 +207,7 @@ public class DistributedTransaction impl
             throw new JoinAndResumeDtxException(id);
         }
 
-        DtxBranch branch = _vhost.getDtxRegistry().getBranch(id);
+        DtxBranch branch = _dtxRegistry.getBranch(id);
 
         if(branch == null)
         {
@@ -216,8 +215,8 @@ public class DistributedTransaction impl
             {
                 throw new UnknownDtxBranchException(id);
             }
-            branch = new DtxBranch(id,_vhost.getMessageStore(), _vhost);
-            if(_vhost.getDtxRegistry().registerBranch(branch))
+            branch = new DtxBranch(id, _dtxRegistry);
+            if(_dtxRegistry.registerBranch(branch))
             {
                 _branch = branch;
                 branch.associateSession(_session);
@@ -248,7 +247,7 @@ public class DistributedTransaction impl
     public void end(Xid id, boolean fail, boolean suspend)
             throws UnknownDtxBranchException, NotAssociatedDtxException, SuspendAndFailDtxException, TimeoutDtxException
     {
-        DtxBranch branch = _vhost.getDtxRegistry().getBranch(id);
+        DtxBranch branch = _dtxRegistry.getBranch(id);
 
         if(suspend && fail)
         {

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxBranch.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxBranch.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxBranch.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxBranch.java Sun May 22 21:03:46 2016
@@ -31,6 +31,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.qpid.server.message.EnqueueableMessage;
+import org.apache.qpid.server.model.NamedAddressSpace;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.protocol.AMQSessionModel;
 import org.apache.qpid.server.store.MessageEnqueueRecord;
@@ -55,9 +56,8 @@ public class DtxBranch
 
     private Transaction _transaction;
     private long _expiration;
-    private VirtualHost<?> _vhost;
     private ScheduledFuture<?> _timeoutFuture;
-    private MessageStore _store;
+    private final DtxRegistry _dtxRegistry;
     private Transaction.StoredXidRecord _storedXidRecord;
 
 
@@ -73,16 +73,15 @@ public class DtxBranch
         ROLLBACK_ONLY
     }
 
-    public DtxBranch(Xid xid, MessageStore store, VirtualHost<?> vhost)
+    public DtxBranch(Xid xid, DtxRegistry dtxRegistry)
     {
         _xid = xid;
-        _store = store;
-        _vhost = vhost;
+        _dtxRegistry = dtxRegistry;
     }
 
-    public DtxBranch(Transaction.StoredXidRecord storedXidRecord, MessageStore store, VirtualHost<?> vhost)
+    public DtxBranch(Transaction.StoredXidRecord storedXidRecord, DtxRegistry dtxRegistry)
     {
-        this(new Xid(storedXidRecord.getFormat(), storedXidRecord.getGlobalId(), storedXidRecord.getBranchId()), store, vhost);
+        this(new Xid(storedXidRecord.getFormat(), storedXidRecord.getGlobalId(), storedXidRecord.getBranchId()), dtxRegistry);
         _storedXidRecord = storedXidRecord;
     }
 
@@ -132,7 +131,7 @@ public class DtxBranch
 
             _logger.debug("Scheduling timeout and rollback after {}s for DtxBranch {}", delay/1000, _xid);
 
-            _timeoutFuture = _vhost.scheduleTask(delay, new Runnable()
+            _timeoutFuture = _dtxRegistry.scheduleTask(delay, new Runnable()
             {
                 public void run()
                 {
@@ -215,7 +214,7 @@ public class DtxBranch
     {
         _logger.debug("Performing prepare for DtxBranch {}", _xid);
 
-        Transaction txn = _store.newTransaction();
+        Transaction txn = _dtxRegistry.getMessageStore().newTransaction();
         _storedXidRecord = txn.recordXid(_xid.getFormat(),
                       _xid.getGlobalId(),
                       _xid.getBranchId(),
@@ -244,7 +243,7 @@ public class DtxBranch
         {
             // prepare has previously been called
 
-            Transaction txn = _store.newTransaction();
+            Transaction txn = _dtxRegistry.getMessageStore().newTransaction();
             txn.removeXid(_storedXidRecord);
             txn.commitTran();
 
@@ -291,7 +290,7 @@ public class DtxBranch
 
     public void prePrepareTransaction() throws StoreException
     {
-        _transaction = _store.newTransaction();
+        _transaction = _dtxRegistry.getMessageStore().newTransaction();
 
         for(final EnqueueRecord enqueue : _enqueueRecords)
         {

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxRegistry.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxRegistry.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxRegistry.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxRegistry.java Sun May 22 21:03:46 2016
@@ -25,13 +25,34 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ScheduledFuture;
+
+import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.store.MessageStore;
 import org.apache.qpid.server.store.StoreException;
 import org.apache.qpid.server.protocol.AMQSessionModel;
+import org.apache.qpid.server.virtualhost.AbstractVirtualHost;
 import org.apache.qpid.transport.Xid;
 
 public class DtxRegistry
 {
     private final Map<ComparableXid, DtxBranch> _branches = new HashMap<ComparableXid, DtxBranch>();
+    private final VirtualHost<?> _virtualHost;
+
+    public DtxRegistry(final VirtualHost<?> virtualHost)
+    {
+        _virtualHost = virtualHost;
+    }
+
+    public MessageStore getMessageStore()
+    {
+        return _virtualHost.getMessageStore();
+    }
+
+    public ScheduledFuture<?> scheduleTask(final long delay, final Runnable task)
+    {
+        return _virtualHost.scheduleTask(delay, task);
+    }
 
 
     private static final class ComparableXid

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java Sun May 22 21:03:46 2016
@@ -212,7 +212,7 @@ public abstract class AbstractVirtualHos
         _broker = virtualHostNode.getParent(Broker.class);
         _virtualHostNode = virtualHostNode;
 
-        _dtxRegistry = new DtxRegistry();
+        _dtxRegistry = new DtxRegistry(this);
 
         _eventLogger = _broker.getParent(SystemConfig.class).getEventLogger();
 
@@ -470,6 +470,12 @@ public abstract class AbstractVirtualHos
         }
     }
 
+    @Override
+    public boolean isActive()
+    {
+        return getState() == State.ACTIVE;
+    }
+
     private void registerSystemNodes()
     {
         QpidServiceLoader qpidServiceLoader = new QpidServiceLoader();
@@ -2074,4 +2080,40 @@ public abstract class AbstractVirtualHos
         }
     }
 
+    @Override
+    public <T extends MessageSource> T createMessageSource(final Class<T> clazz, final Map<String, Object> attributes)
+    {
+        if(Queue.class.isAssignableFrom(clazz))
+        {
+            return (T) createChild((Class<? extends Queue>)clazz, attributes);
+        }
+        else
+        {
+            throw new IllegalArgumentException("Cannot create message source children of class " + clazz.getSimpleName());
+        }
+    }
+
+    @Override
+    public <T extends MessageDestination> T createMessageDestination(final Class<T> clazz,
+                                                                     final Map<String, Object> attributes)
+    {
+        if(Exchange.class.isAssignableFrom(clazz))
+        {
+            return (T) createChild((Class<? extends Exchange>)clazz, attributes);
+        }
+        else if(Queue.class.isAssignableFrom(clazz))
+        {
+            return (T) createChild((Class<? extends Queue>)clazz, attributes);
+        }
+        else
+        {
+            throw new IllegalArgumentException("Cannot create message destination children of class " + clazz.getSimpleName());
+        }
+    }
+
+    @Override
+    public boolean hasMessageSources()
+    {
+        return !(_systemNodeSources.isEmpty() && getChildren(Queue.class).isEmpty());
+    }
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AsynchronousMessageStoreRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AsynchronousMessageStoreRecoverer.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AsynchronousMessageStoreRecoverer.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AsynchronousMessageStoreRecoverer.java Sun May 22 21:03:46 2016
@@ -276,7 +276,7 @@ public class AsynchronousMessageStoreRec
                 DtxBranch branch = dtxRegistry.getBranch(id);
                 if (branch == null)
                 {
-                    branch = new DtxBranch(storedXid, _store, getVirtualHost());
+                    branch = new DtxBranch(storedXid, dtxRegistry);
                     dtxRegistry.registerBranch(branch);
                 }
                 for (Transaction.EnqueueRecord record : enqueues)

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/SynchronousMessageStoreRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/SynchronousMessageStoreRecoverer.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/SynchronousMessageStoreRecoverer.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/SynchronousMessageStoreRecoverer.java Sun May 22 21:03:46 2016
@@ -258,7 +258,7 @@ public class SynchronousMessageStoreReco
             DtxBranch branch = dtxRegistry.getBranch(id);
             if(branch == null)
             {
-                branch = new DtxBranch(storedXid, _store, _virtualHost);
+                branch = new DtxBranch(storedXid, dtxRegistry);
                 dtxRegistry.registerBranch(branch);
             }
             for(EnqueueRecord record : enqueues)

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/AbstractFixedVirtualHostNodeAlias.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/AbstractFixedVirtualHostNodeAlias.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/AbstractFixedVirtualHostNodeAlias.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/AbstractFixedVirtualHostNodeAlias.java Sun May 22 21:03:46 2016
@@ -24,6 +24,7 @@ import java.util.Map;
 
 import org.apache.qpid.server.model.FixedVirtualHostNodeAlias;
 import org.apache.qpid.server.model.ManagedAttributeField;
+import org.apache.qpid.server.model.NamedAddressSpace;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.VirtualHostNode;
 
@@ -47,9 +48,10 @@ abstract class AbstractFixedVirtualHostN
     }
 
     @Override
-    public VirtualHostNode<?> getVirtualHostNode(final String name)
+    public NamedAddressSpace getAddressSpace(final String name)
     {
-        return matches(name) ? getVirtualHostNode() : null;
+        VirtualHostNode<?> node = matches(name) ? getVirtualHostNode() : null;
+        return node == null ? null : node.getVirtualHost();
     }
 
     protected abstract boolean matches(final String name);

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/DefaultVirtualHostAliasImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/DefaultVirtualHostAliasImpl.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/DefaultVirtualHostAliasImpl.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/DefaultVirtualHostAliasImpl.java Sun May 22 21:03:46 2016
@@ -25,6 +25,7 @@ import java.util.Map;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.DefaultVirtualHostAlias;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
+import org.apache.qpid.server.model.NamedAddressSpace;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.VirtualHostNode;
 
@@ -40,15 +41,14 @@ public final class DefaultVirtualHostAli
     }
 
     @Override
-    public VirtualHostNode getVirtualHostNode(final String name)
+    public NamedAddressSpace getAddressSpace(final String name)
     {
         if(name == null || name.trim().equals(""))
         {
             Broker<?> broker = getPort().getParent(Broker.class);
             VirtualHostNode defaultVirtualHostNode = broker.findDefautVirtualHostNode();
-            return defaultVirtualHostNode;
+            return defaultVirtualHostNode == null ? null : defaultVirtualHostNode.getVirtualHost();
         }
         return null;
     }
-
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java Sun May 22 21:03:46 2016
@@ -41,6 +41,7 @@ import org.slf4j.LoggerFactory;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.HostNameAlias;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
+import org.apache.qpid.server.model.NamedAddressSpace;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.model.port.AmqpPort;
@@ -78,21 +79,21 @@ public class HostNameAliasImpl
 
 
     @Override
-    public VirtualHostNode<?> getVirtualHostNode(final String name)
+    public NamedAddressSpace getAddressSpace(final String name)
     {
         VirtualHostNode<?> node = null;
-        if(matches(name))
+        if (matches(name))
         {
             node = getVirtualHostNode();
-            if(node == null)
+            if (node == null)
             {
                 Broker<?> broker = getPort().getParent(Broker.class);
-                VirtualHostNode defaultVirtualHostNode = broker.findDefautVirtualHostNode();
-                return defaultVirtualHostNode;
+                node = broker.findDefautVirtualHostNode();
             }
 
         }
-        return node;
+        return node == null ? null : node.getVirtualHost();
+
     }
 
     @Override

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/VirtualHostNameAliasImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/VirtualHostNameAliasImpl.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/VirtualHostNameAliasImpl.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/VirtualHostNameAliasImpl.java Sun May 22 21:03:46 2016
@@ -24,6 +24,7 @@ import java.util.Map;
 
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
+import org.apache.qpid.server.model.NamedAddressSpace;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.model.VirtualHostNameAlias;
@@ -40,7 +41,7 @@ public final class VirtualHostNameAliasI
     }
 
     @Override
-    public VirtualHostNode getVirtualHostNode(final String name)
+    public NamedAddressSpace getAddressSpace(final String name)
     {
         Broker<?> broker = getPort().getParent(Broker.class);
         for(VirtualHostNode<?> vhn : broker.getVirtualHostNodes())
@@ -48,7 +49,7 @@ public final class VirtualHostNameAliasI
             VirtualHost<?> vh = vhn.getVirtualHost();
             if(vh != null && vh.getName().equals(name))
             {
-                return vhn;
+                return vh;
             }
         }
         return null;

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java Sun May 22 21:03:46 2016
@@ -119,6 +119,12 @@ class RedirectingVirtualHostImpl
     }
 
     @Override
+    public boolean isActive()
+    {
+        return false;
+    }
+
+    @Override
     protected void validateChange(final ConfiguredObject<?> proxyForValidation, final Set<String> changedAttributes)
     {
         super.validateChange(proxyForValidation, changedAttributes);
@@ -324,6 +330,27 @@ class RedirectingVirtualHostImpl
     }
 
     @Override
+    public <T extends MessageSource> T createMessageSource(final Class<T> clazz, final Map<String, Object> attributes)
+    {
+        throwUnsupportedForRedirector();
+        return null;
+    }
+
+    @Override
+    public <T extends MessageDestination> T createMessageDestination(final Class<T> clazz,
+                                                                     final Map<String, Object> attributes)
+    {
+        throwUnsupportedForRedirector();
+        return null;
+    }
+
+    @Override
+    public boolean hasMessageSources()
+    {
+        return false;
+    }
+
+    @Override
     public void setTargetSize(final long targetSize)
     {
 

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java Sun May 22 21:03:46 2016
@@ -552,7 +552,7 @@ public class VirtualHostTest extends Qpi
             }
         };
         doAnswer(answer).when(connection).addDeleteTask(deleteTaskCaptor.capture());
-        when(connection.getVirtualHost()).thenReturn(virtualHost);
+        when(connection.getAddressSpace()).thenReturn(virtualHost);
         doAnswer(new Answer()
         {
             @Override

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhost/SynchronousMessageStoreRecovererTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhost/SynchronousMessageStoreRecovererTest.java?rev=1745091&r1=1745090&r2=1745091&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhost/SynchronousMessageStoreRecovererTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhost/SynchronousMessageStoreRecovererTest.java Sun May 22 21:03:46 2016
@@ -281,7 +281,7 @@ public class SynchronousMessageStoreReco
             }
         };
 
-        DtxRegistry dtxRegistry = new DtxRegistry();
+        DtxRegistry dtxRegistry = new DtxRegistry(_virtualHost);
 
         when(_virtualHost.getMessageStore()).thenReturn(store);
         when(_virtualHost.getDtxRegistry()).thenReturn(dtxRegistry);
@@ -370,7 +370,7 @@ public class SynchronousMessageStoreReco
             }
         };
 
-        DtxRegistry dtxRegistry = new DtxRegistry();
+        DtxRegistry dtxRegistry = new DtxRegistry(_virtualHost);
 
         when(_virtualHost.getMessageStore()).thenReturn(store);
         when(_virtualHost.getDtxRegistry()).thenReturn(dtxRegistry);




---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org