Author: rgodfrey
Date: Mon May 23 15:25:45 2016
New Revision: 1745217

URL: http://svn.apache.org/viewvc?rev=1745217&view=rev
Log:
QPID-7000 : Add a $management address space containing a management node for 
the broker

Added:
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemAddressSpaceAlias.java
      - copied, changed from r1745130, 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/PatternMatchingAlias.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemAddressSpaceCreator.java
      - copied, changed from r1745130, 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemNodeCreator.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/LinkRegistry.java
   (with props)
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/LinkRegistryImpl.java
      - copied, changed from r1745216, 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/LinkRegistry.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxNotSupportedException.java
   (with props)
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/SystemAddressSpaceAliasImpl.java
      - copied, changed from r1745130, 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/PatternMatchingAliasImpl.java
    
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpace.java
   (with props)
    
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpaceCreator.java
      - copied, changed from r1745130, 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeCreator.java
    
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpacePrincipal.java
      - copied, changed from r1745130, 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostPrincipal.java
Modified:
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/AbstractMessageLogger.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/ChannelLogSubject.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/ConnectionLogSubject.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/NamedAddressSpace.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.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/transport/NonBlockingConnection.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractSystemMessageSource.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/VirtualHostPropertiesNode.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/VirtualHostNameAliasImpl.java
    
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/ConnectionLogSubjectTest.java
    
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java
    
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java
    
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeCreator.java

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/AbstractMessageLogger.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/AbstractMessageLogger.java?rev=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/AbstractMessageLogger.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/AbstractMessageLogger.java
 Mon May 23 15:25:45 2016
@@ -149,7 +149,7 @@ public abstract class AbstractMessageLog
     {
         if (connection.getAuthorizedPrincipal() != null)
         {
-            if (connection.getVirtualHostName() != null)
+            if (connection.getAddressSpaceName() != null)
             {
                 /**
                  * LOG FORMAT used by the AMQPConnectorActor follows
@@ -165,7 +165,7 @@ public abstract class AbstractMessageLog
                                                   connection.getConnectionId(),
                                                   
connection.getAuthorizedPrincipal().getName(),
                                                   
connection.getRemoteAddressString(),
-                                                  
connection.getVirtualHostName())
+                                                  
connection.getAddressSpaceName())
                        + "] ";
 
             }
@@ -198,9 +198,9 @@ public abstract class AbstractMessageLog
                                           (connection == null || 
connection.getRemoteAddressString() == null)
                                                   ? "?"
                                                   : 
connection.getRemoteAddressString(),
-                                          (connection == null || 
connection.getVirtualHostName() == null)
+                                          (connection == null || 
connection.getAddressSpaceName() == null)
                                                   ? "?"
-                                                  : 
connection.getVirtualHostName(),
+                                                  : 
connection.getAddressSpaceName(),
                                           session.getChannelId())
                + "] ";
     }

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/ChannelLogSubject.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/ChannelLogSubject.java?rev=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/ChannelLogSubject.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/ChannelLogSubject.java
 Mon May 23 15:25:45 2016
@@ -48,7 +48,7 @@ public class ChannelLogSubject extends A
                                connection == null ? -1L : 
connection.getConnectionId(),
                                (connection == null || 
connection.getAuthorizedPrincipal() == null) ? "?" : 
connection.getAuthorizedPrincipal().getName(),
                                (connection == null || 
connection.getRemoteAddressString() == null) ? "?" : 
connection.getRemoteAddressString(),
-                               (connection == null || 
connection.getVirtualHostName() == null) ? "?" : 
connection.getVirtualHostName(),
+                               (connection == null || 
connection.getAddressSpaceName() == null) ? "?" : 
connection.getAddressSpaceName(),
                                session.getChannelId());
 
     }

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/ConnectionLogSubject.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/ConnectionLogSubject.java?rev=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/ConnectionLogSubject.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/logging/subjects/ConnectionLogSubject.java
 Mon May 23 15:25:45 2016
@@ -58,7 +58,7 @@ public class ConnectionLogSubject extend
         {
             if (_connection.getAuthorizedPrincipal() != null)
             {
-                if (_connection.getVirtualHostName() != null)
+                if (_connection.getAddressSpaceName() != null)
                 {
                     /**
                      * LOG FORMAT used by the AMQPConnectorActor follows
@@ -74,7 +74,7 @@ public class ConnectionLogSubject extend
                                                             
_connection.getConnectionId(),
                                                             
_connection.getAuthorizedPrincipal().getName(),
                                                             
_connection.getRemoteAddressString(),
-                                                            
_connection.getVirtualHostName())
+                                                            
_connection.getAddressSpaceName())
                                  + "] ");
 
                     _upToDate = true;

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
 Mon May 23 15:25:45 2016
@@ -249,6 +249,8 @@ public interface Broker<X extends Broker
 
     Collection<AccessControlProvider<?>> getAccessControlProviders();
 
+    NamedAddressSpace getSystemAddressSpace(String name);
+
     Collection<GroupProvider<?>> getGroupProviders();
 
     /**

Modified: 
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=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/NamedAddressSpace.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/NamedAddressSpace.java
 Mon May 23 15:25:45 2016
@@ -22,6 +22,7 @@ package org.apache.qpid.server.model;
 
 import java.security.Principal;
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.qpid.server.message.MessageDestination;
@@ -66,4 +67,5 @@ public interface NamedAddressSpace exten
 
     Collection<? extends Connection<?>> getConnections();
 
+    List<String> getGlobalAddressDomains();
 }

Copied: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemAddressSpaceAlias.java
 (from r1745130, 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/PatternMatchingAlias.java)
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemAddressSpaceAlias.java?p2=qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemAddressSpaceAlias.java&p1=qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/PatternMatchingAlias.java&r1=1745130&r2=1745217&rev=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/PatternMatchingAlias.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemAddressSpaceAlias.java
 Mon May 23 15:25:45 2016
@@ -20,11 +20,11 @@
  */
 package org.apache.qpid.server.model;
 
-@ManagedObject( category = false, type = PatternMatchingAlias.TYPE_NAME)
-public interface PatternMatchingAlias<X extends PatternMatchingAlias<X>> 
extends FixedVirtualHostNodeAlias<X>
+@ManagedObject( category = false, type = SystemAddressSpaceAlias.TYPE_NAME)
+public interface SystemAddressSpaceAlias<X extends SystemAddressSpaceAlias<X>> 
extends VirtualHostAlias<X>
 {
 
-    String TYPE_NAME = "patternMatchingAlias";
+    String TYPE_NAME = "systemAddressAlias";
 
     String PATTERN = "pattern";
 
@@ -32,5 +32,8 @@ public interface PatternMatchingAlias<X
     int getPriority();
 
     @ManagedAttribute( mandatory = true)
-    public String getPattern();
+    String getPattern();
+
+    @ManagedAttribute( mandatory = true)
+    String getSystemAddressSpace();
 }

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
 Mon May 23 15:25:45 2016
@@ -38,6 +38,7 @@ import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.IdentityHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -45,6 +46,8 @@ import java.util.Set;
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
@@ -58,6 +61,7 @@ import org.apache.qpid.bytebuffer.QpidBy
 import org.apache.qpid.server.BrokerPrincipal;
 import org.apache.qpid.server.logging.QpidLoggerTurboFilter;
 import org.apache.qpid.server.logging.StartupAppender;
+import org.apache.qpid.server.plugin.SystemAddressSpaceCreator;
 import org.apache.qpid.server.security.access.Operation;
 import org.apache.qpid.server.util.HousekeepingExecutor;
 import org.apache.qpid.server.util.ServerScopedRuntimeException;
@@ -141,6 +145,8 @@ public class BrokerAdapter extends Abstr
     private final BufferPoolMXBean _bufferPoolMXBean;
     private final List<String> _jvmArguments;
     private HousekeepingExecutor _houseKeepingTaskExecutor;
+    private final AddressSpaceRegistry _addressSpaceRegistry = new 
AddressSpaceRegistry();
+
 
     @ManagedObjectFactoryConstructor
     public BrokerAdapter(Map<String, Object> attributes,
@@ -211,6 +217,17 @@ public class BrokerAdapter extends Abstr
         }
     }
 
+    private void registerSystemAddressSpaces()
+    {
+        QpidServiceLoader qpidServiceLoader = new QpidServiceLoader();
+        Iterable<SystemAddressSpaceCreator> factories = 
qpidServiceLoader.instancesOf(SystemAddressSpaceCreator.class);
+        for(SystemAddressSpaceCreator creator : factories)
+        {
+            creator.register(_addressSpaceRegistry);
+        }
+    }
+
+
     @Override
     protected void postResolve()
     {
@@ -606,10 +623,18 @@ public class BrokerAdapter extends Abstr
             
getEventLogger().message(BrokerMessages.PROCESS(SystemUtils.getProcessPid()));
         }
 
+        registerSystemAddressSpaces();
+
         assignTargetSizes();
     }
 
     @Override
+    public NamedAddressSpace getSystemAddressSpace(String name)
+    {
+        return _addressSpaceRegistry.getAddressSpace(name);
+    }
+
+    @Override
     public Collection<GroupProvider<?>> getGroupProviders()
     {
         Collection children = getChildren(GroupProvider.class);
@@ -1304,4 +1329,39 @@ public class BrokerAdapter extends Abstr
             return "text/plain;charset=utf-8";
         }
     }
+
+    private class AddressSpaceRegistry implements 
SystemAddressSpaceCreator.AddressSpaceRegistry
+    {
+        private final ConcurrentMap<String, NamedAddressSpace> 
_systemAddressSpaces = new ConcurrentHashMap<>();
+
+        @Override
+        public void registerAddressSpace(final NamedAddressSpace addressSpace)
+        {
+            _systemAddressSpaces.put(addressSpace.getName(), addressSpace);
+        }
+
+        @Override
+        public void removeAddressSpace(final NamedAddressSpace addressSpace)
+        {
+            _systemAddressSpaces.remove(addressSpace.getName(), addressSpace);
+        }
+
+        @Override
+        public void removeAddressSpace(final String name)
+        {
+            _systemAddressSpaces.remove(name);
+        }
+
+        @Override
+        public NamedAddressSpace getAddressSpace(final String name)
+        {
+            return _systemAddressSpaces.get(name);
+        }
+
+        @Override
+        public Broker<?> getBroker()
+        {
+            return BrokerAdapter.this;
+        }
+    }
 }

Copied: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemAddressSpaceCreator.java
 (from r1745130, 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemNodeCreator.java)
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemAddressSpaceCreator.java?p2=qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemAddressSpaceCreator.java&p1=qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemNodeCreator.java&r1=1745130&r2=1745217&rev=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemNodeCreator.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemAddressSpaceCreator.java
 Mon May 23 15:25:45 2016
@@ -20,22 +20,22 @@
  */
 package org.apache.qpid.server.plugin;
 
-import org.apache.qpid.server.message.MessageNode;
-import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.NamedAddressSpace;
 
-public interface SystemNodeCreator extends Pluggable
+public interface SystemAddressSpaceCreator extends Pluggable
 {
-    interface SystemNodeRegistry
+    interface AddressSpaceRegistry
     {
-        void registerSystemNode(MessageNode node);
-        void removeSystemNode(MessageNode node);
-        void removeSystemNode(String name);
+        void registerAddressSpace(NamedAddressSpace addressSpace);
+        void removeAddressSpace(NamedAddressSpace addressSpace);
+        void removeAddressSpace(String name);
 
+        NamedAddressSpace getAddressSpace(String name);
 
-        VirtualHost<?> getVirtualHost();
+        Broker<?> getBroker();
 
-        boolean hasSystemNode(String name);
     }
 
-    void register(SystemNodeRegistry registry);
+    void register(AddressSpaceRegistry registry);
 }

Added: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/LinkRegistry.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/LinkRegistry.java?rev=1745217&view=auto
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/LinkRegistry.java
 (added)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/LinkRegistry.java
 Mon May 23 15:25:45 2016
@@ -0,0 +1,34 @@
+/*
+ *
+ * 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.protocol;
+
+public interface LinkRegistry
+{
+    LinkModel getDurableSendingLink(String name);
+
+    boolean registerSendingLink(String name, LinkModel link);
+
+    boolean unregisterSendingLink(String name);
+
+    LinkModel getDurableReceivingLink(String name);
+
+    boolean registerReceivingLink(String name, LinkModel link);
+}

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

Copied: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/LinkRegistryImpl.java
 (from r1745216, 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/LinkRegistry.java)
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/LinkRegistryImpl.java?p2=qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/LinkRegistryImpl.java&p1=qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/LinkRegistry.java&r1=1745216&r2=1745217&rev=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/LinkRegistry.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/LinkRegistryImpl.java
 Mon May 23 15:25:45 2016
@@ -23,16 +23,18 @@ package org.apache.qpid.server.protocol;
 import java.util.HashMap;
 import java.util.Map;
 
-public class LinkRegistry
+public class LinkRegistryImpl implements LinkRegistry
 {
     private final Map<String, LinkModel> _sendingLinks = new HashMap<String, 
LinkModel>();
     private final Map<String, LinkModel> _receivingLinks = new HashMap<String, 
LinkModel>();
 
+    @Override
     public synchronized LinkModel getDurableSendingLink(String name)
     {
         return _sendingLinks.get(name);
     }
 
+    @Override
     public synchronized boolean registerSendingLink(String name, LinkModel 
link)
     {
         if(_sendingLinks.containsKey(name))
@@ -46,6 +48,7 @@ public class LinkRegistry
         }
     }
 
+    @Override
     public synchronized boolean unregisterSendingLink(String name)
     {
         if(!_sendingLinks.containsKey(name))
@@ -59,11 +62,13 @@ public class LinkRegistry
         }
     }
 
+    @Override
     public synchronized LinkModel getDurableReceivingLink(String name)
     {
         return _receivingLinks.get(name);
     }
 
+    @Override
     public synchronized  boolean registerReceivingLink(String name, LinkModel 
link)
     {
         if(_receivingLinks.containsKey(name))

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java?rev=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java
 Mon May 23 15:25:45 2016
@@ -310,7 +310,7 @@ public class SecurityManager
 
     public void authoriseCreateConnection(final AMQPConnection<?> connection)
     {
-        String virtualHostName = connection.getVirtualHostName();
+        String virtualHostName = connection.getAddressSpaceName();
         ObjectProperties properties = new ObjectProperties(virtualHostName);
         properties.put(Property.VIRTUALHOST_NAME, virtualHostName);
         if (!checkAllPlugins(ObjectType.VIRTUALHOST,  properties, 
Operation.ACCESS))

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.java?rev=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.java
 Mon May 23 15:25:45 2016
@@ -41,7 +41,7 @@ public interface AMQPConnection<C extend
 
     String getRemoteAddressString();
 
-    String getVirtualHostName();
+    String getAddressSpaceName();
 
     void notifyWork();
 

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=1745217&r1=1745216&r2=1745217&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
 Mon May 23 15:25:45 2016
@@ -293,7 +293,7 @@ public abstract class AbstractAMQPConnec
     }
 
     @Override
-    public final String getVirtualHostName()
+    public final String getAddressSpaceName()
     {
         return getAddressSpace() == null ? null : getAddressSpace().getName();
     }

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NonBlockingConnection.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NonBlockingConnection.java?rev=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NonBlockingConnection.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NonBlockingConnection.java
 Mon May 23 15:25:45 2016
@@ -298,7 +298,8 @@ public class NonBlockingConnection imple
                 }
 
             }
-            catch (IOException | ConnectionScopedRuntimeException e)
+            catch (IOException |
+                    ConnectionScopedRuntimeException e)
             {
                 if (LOGGER.isDebugEnabled())
                 {

Added: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxNotSupportedException.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxNotSupportedException.java?rev=1745217&view=auto
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxNotSupportedException.java
 (added)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/txn/DtxNotSupportedException.java
 Mon May 23 15:25:45 2016
@@ -0,0 +1,41 @@
+/*
+ *
+ * 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.txn;
+
+import org.apache.qpid.server.util.ConnectionScopedRuntimeException;
+
+public class DtxNotSupportedException extends ConnectionScopedRuntimeException
+{
+    public DtxNotSupportedException(final String message)
+    {
+        super(message);
+    }
+
+    public DtxNotSupportedException(final String message, final Throwable 
cause)
+    {
+        super(message, cause);
+    }
+
+    public DtxNotSupportedException(final Throwable cause)
+    {
+        super(cause);
+    }
+}

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

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractSystemMessageSource.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractSystemMessageSource.java?rev=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractSystemMessageSource.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractSystemMessageSource.java
 Mon May 23 15:25:45 2016
@@ -38,6 +38,7 @@ import org.apache.qpid.server.message.Me
 import org.apache.qpid.server.message.MessageSource;
 import org.apache.qpid.server.message.ServerMessage;
 import org.apache.qpid.server.message.internal.InternalMessage;
+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.MessageDurability;
@@ -52,16 +53,15 @@ public abstract class AbstractSystemMess
 {
     protected final UUID _id;
     protected final String _name;
-    protected final VirtualHost<?> _virtualHost;
+    protected final NamedAddressSpace _addressSpace;
     private List<Consumer> _consumers = new CopyOnWriteArrayList<>();
 
-    public AbstractSystemMessageSource(
-            String name, final VirtualHost<?> virtualHost)
+    public AbstractSystemMessageSource(String name, final NamedAddressSpace 
addressSpace)
     {
         _name = name;
-        _id = UUID.nameUUIDFromBytes((getClass().getSimpleName() + "/" + 
virtualHost.getName() + "/" + name).getBytes(
+        _id = UUID.nameUUIDFromBytes((getClass().getSimpleName() + "/" + 
addressSpace.getName() + "/" + name).getBytes(
                 StandardCharsets.UTF_8));
-        _virtualHost = virtualHost;
+        _addressSpace = addressSpace;
     }
 
     @Override

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=1745217&r1=1745216&r2=1745217&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
 Mon May 23 15:25:45 2016
@@ -76,6 +76,7 @@ import org.apache.qpid.server.plugin.Qpi
 import org.apache.qpid.server.plugin.SystemNodeCreator;
 import org.apache.qpid.server.protocol.AMQSessionModel;
 import org.apache.qpid.server.protocol.LinkRegistry;
+import org.apache.qpid.server.protocol.LinkRegistryImpl;
 import org.apache.qpid.server.queue.QueueEntry;
 import org.apache.qpid.server.security.SecurityManager;
 import org.apache.qpid.server.stats.StatisticsCounter;
@@ -1079,7 +1080,7 @@ public abstract class AbstractVirtualHos
         LinkRegistry linkRegistry = _linkRegistry.get(remoteContainerId);
         if(linkRegistry == null)
         {
-            linkRegistry = new LinkRegistry();
+            linkRegistry = new LinkRegistryImpl();
             _linkRegistry.put(remoteContainerId, linkRegistry);
         }
         return linkRegistry;

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostPropertiesNode.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostPropertiesNode.java?rev=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostPropertiesNode.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostPropertiesNode.java
 Mon May 23 15:25:45 2016
@@ -32,16 +32,17 @@ import org.apache.qpid.server.filter.Fil
 import org.apache.qpid.server.message.ServerMessage;
 import org.apache.qpid.server.message.internal.InternalMessage;
 import org.apache.qpid.server.message.internal.InternalMessageHeader;
+import org.apache.qpid.server.model.NamedAddressSpace;
 import org.apache.qpid.server.model.VirtualHost;
 
 public class VirtualHostPropertiesNode extends AbstractSystemMessageSource
 {
 
-    public VirtualHostPropertiesNode(final VirtualHost<?> virtualHost)
+    public VirtualHostPropertiesNode(final NamedAddressSpace virtualHost)
     {
         this(virtualHost, "$virtualhostProperties");
     }
-    public VirtualHostPropertiesNode(final VirtualHost<?> virtualHost, String 
name)
+    public VirtualHostPropertiesNode(final NamedAddressSpace virtualHost, 
String name)
     {
         super(name, virtualHost);
     }
@@ -66,7 +67,7 @@ public class VirtualHostPropertiesNode e
 
         Map<String, Object> headers = new HashMap<>();
 
-        final List<String> globalAddresseDomains = 
_virtualHost.getGlobalAddressDomains();
+        final List<String> globalAddresseDomains = 
_addressSpace.getGlobalAddressDomains();
         if (globalAddresseDomains != null && !globalAddresseDomains.isEmpty())
         {
             String primaryDomain = globalAddresseDomains.get(0);
@@ -86,7 +87,7 @@ public class VirtualHostPropertiesNode e
                                                                  null, null, 
(byte) 4, System.currentTimeMillis(),
                                                                  0L, null, 
null);
         final InternalMessage message =
-                
InternalMessage.createBytesMessage(_virtualHost.getMessageStore(), header, new 
byte[0]);
+                
InternalMessage.createBytesMessage(_addressSpace.getMessageStore(), header, new 
byte[0]);
         message.setInitialRoutingAddress(getName());
         return message;
     }

Copied: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/SystemAddressSpaceAliasImpl.java
 (from r1745130, 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/PatternMatchingAliasImpl.java)
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/SystemAddressSpaceAliasImpl.java?p2=qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/SystemAddressSpaceAliasImpl.java&p1=qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/PatternMatchingAliasImpl.java&r1=1745130&r2=1745217&rev=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/PatternMatchingAliasImpl.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/SystemAddressSpaceAliasImpl.java
 Mon May 23 15:25:45 2016
@@ -26,26 +26,30 @@ import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
+import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.ManagedAttributeField;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
+import org.apache.qpid.server.model.NamedAddressSpace;
 import org.apache.qpid.server.model.PatternMatchingAlias;
 import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.SystemAddressSpaceAlias;
 
-public final class PatternMatchingAliasImpl
-        extends AbstractFixedVirtualHostNodeAlias<PatternMatchingAliasImpl>
-        implements PatternMatchingAlias<PatternMatchingAliasImpl>
+public final class SystemAddressSpaceAliasImpl
+        extends AbstractVirtualHostAlias<SystemAddressSpaceAliasImpl>
+        implements SystemAddressSpaceAlias<SystemAddressSpaceAliasImpl>
 {
     @ManagedAttributeField
     private String _pattern;
+    @ManagedAttributeField
+    private String _systemAddressSpace;
 
     @ManagedObjectFactoryConstructor
-    protected PatternMatchingAliasImpl(final Map<String, Object> attributes, 
final Port port)
+    protected SystemAddressSpaceAliasImpl(final Map<String, Object> 
attributes, final Port port)
     {
         super(attributes, port);
     }
 
-    @Override
     protected boolean matches(final String name)
     {
         return name == null ? "".matches(_pattern) : name.matches(_pattern);
@@ -84,4 +88,16 @@ public final class PatternMatchingAliasI
     {
         return _pattern;
     }
+
+    @Override
+    public String getSystemAddressSpace()
+    {
+        return _systemAddressSpace;
+    }
+
+    @Override
+    public NamedAddressSpace getAddressSpace(final String name)
+    {
+        return matches(name) ? 
getParent(Broker.class).getSystemAddressSpace(getSystemAddressSpace()) : null;
+    }
 }

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=1745217&r1=1745216&r2=1745217&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
 Mon May 23 15:25:45 2016
@@ -44,14 +44,19 @@ public final class VirtualHostNameAliasI
     public NamedAddressSpace getAddressSpace(final String name)
     {
         Broker<?> broker = getPort().getParent(Broker.class);
-        for(VirtualHostNode<?> vhn : broker.getVirtualHostNodes())
+        NamedAddressSpace addressSpace = broker.getSystemAddressSpace(name);
+        if(addressSpace == null)
         {
-            VirtualHost<?> vh = vhn.getVirtualHost();
-            if(vh != null && vh.getName().equals(name))
+            for (VirtualHostNode<?> vhn : broker.getVirtualHostNodes())
             {
-                return vh;
+                VirtualHost<?> vh = vhn.getVirtualHost();
+                if (vh != null && vh.getName().equals(name))
+                {
+                    addressSpace = vh;
+                    break;
+                }
             }
         }
-        return null;
+        return addressSpace;
     }
 }

Modified: 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/ConnectionLogSubjectTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/ConnectionLogSubjectTest.java?rev=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/ConnectionLogSubjectTest.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/subjects/ConnectionLogSubjectTest.java
 Mon May 23 15:25:45 2016
@@ -52,7 +52,7 @@ public class ConnectionLogSubjectTest ex
         when(_connection.getConnectionId()).thenReturn(CONNECTION_ID);
         when(_connection.getAuthorizedPrincipal()).thenReturn(principal);
         when(_connection.getRemoteAddressString()).thenReturn("/"+IP_STRING);
-        when(_connection.getVirtualHostName()).thenReturn(VHOST);
+        when(_connection.getAddressSpaceName()).thenReturn(VHOST);
         _subject = new ConnectionLogSubject(_connection);
     }
 

Modified: 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java?rev=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java
 Mon May 23 15:25:45 2016
@@ -192,7 +192,7 @@ public class SecurityManagerTest extends
     public void testAuthoriseCreateConnection()
     {
         AMQPConnection<?> connection = mock(AMQPConnection.class);
-        when(connection.getVirtualHostName()).thenReturn(TEST_VIRTUAL_HOST);
+        when(connection.getAddressSpaceName()).thenReturn(TEST_VIRTUAL_HOST);
 
         ObjectProperties properties = new ObjectProperties();
         properties.put(Property.NAME, TEST_VIRTUAL_HOST);

Added: 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpace.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpace.java?rev=1745217&view=auto
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpace.java
 (added)
+++ 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpace.java
 Mon May 23 15:25:45 2016
@@ -0,0 +1,273 @@
+/*
+ *
+ * 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.management.amqp;
+
+import java.security.Principal;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.apache.qpid.exchange.ExchangeDefaults;
+import org.apache.qpid.server.message.InstanceProperties;
+import org.apache.qpid.server.message.MessageDestination;
+import org.apache.qpid.server.message.MessageInstance;
+import org.apache.qpid.server.message.MessageSource;
+import org.apache.qpid.server.message.ServerMessage;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.Connection;
+import org.apache.qpid.server.model.NamedAddressSpace;
+import org.apache.qpid.server.model.port.AmqpPort;
+import org.apache.qpid.server.plugin.SystemAddressSpaceCreator;
+import org.apache.qpid.server.protocol.LinkModel;
+import org.apache.qpid.server.protocol.LinkRegistry;
+import org.apache.qpid.server.security.SecurityManager;
+import org.apache.qpid.server.store.MemoryMessageStore;
+import org.apache.qpid.server.store.MessageStore;
+import org.apache.qpid.server.store.StorableMessageMetaData;
+import org.apache.qpid.server.transport.AMQPConnection;
+import org.apache.qpid.server.txn.DtxNotSupportedException;
+import org.apache.qpid.server.txn.DtxRegistry;
+import org.apache.qpid.server.txn.ServerTransaction;
+import org.apache.qpid.server.util.Action;
+import org.apache.qpid.server.util.ConnectionScopedRuntimeException;
+import org.apache.qpid.server.virtualhost.VirtualHostPropertiesNode;
+
+public class ManagementAddressSpace implements NamedAddressSpace
+{
+
+    public static final String MANAGEMENT_ADDRESS_SPACE_NAME = "$management";
+    private static final String MANAGEMENT_NODE_NAME = "$management";
+
+    private final String _name;
+    private final SystemAddressSpaceCreator.AddressSpaceRegistry 
_addressSpaceRegistry;
+    private final ManagementNode _managementNode;
+    private final VirtualHostPropertiesNode _propertiesNode;
+    private final MessageStore _messageStore;
+    private final MessageDestination _defaultDestination = new 
DefaultDestination();
+    private final List<AMQPConnection<?>> _connections = new 
CopyOnWriteArrayList<>();
+    private final LinkRegistry _linkRegistry = new NonDurableLinkRegistry();
+    private final Broker<?> _broker;
+    private final Principal _principal;
+
+    public ManagementAddressSpace(final 
SystemAddressSpaceCreator.AddressSpaceRegistry addressSpaceRegistry)
+    {
+        this(MANAGEMENT_ADDRESS_SPACE_NAME, addressSpaceRegistry);
+    }
+
+    public ManagementAddressSpace(String name, final 
SystemAddressSpaceCreator.AddressSpaceRegistry addressSpaceRegistry)
+    {
+        _name = name;
+        _addressSpaceRegistry = addressSpaceRegistry;
+        _broker = addressSpaceRegistry.getBroker();
+
+        _managementNode = new ManagementNode(this, 
addressSpaceRegistry.getBroker(), null);
+        _propertiesNode = new VirtualHostPropertiesNode(this);
+        _messageStore = new MemoryMessageStore();
+        _principal = new ManagementAddressSpacePrincipal(this);
+    }
+
+
+    @Override
+    public MessageSource getAttainedMessageSource(final String name)
+    {
+        if(_managementNode.getName().equals(name))
+        {
+            return _managementNode;
+        }
+        else if(_propertiesNode.getName().equals(name))
+        {
+            return _propertiesNode;
+        }
+        return null;
+    }
+
+    @Override
+    public MessageDestination getAttainedMessageDestination(final String name)
+    {
+        if(_managementNode.getName().equals(name))
+        {
+            return _managementNode;
+        }
+        return null;
+    }
+
+    @Override
+    public void registerConnection(final AMQPConnection<?> connection)
+    {
+        _connections.add(connection);
+    }
+
+    @Override
+    public void deregisterConnection(final AMQPConnection<?> connection)
+    {
+        _connections.remove(connection);
+    }
+
+    @Override
+    public String getRedirectHost(final AmqpPort<?> port)
+    {
+        return null;
+    }
+
+    @Override
+    public Principal getPrincipal()
+    {
+        return _principal;
+    }
+
+    @Override
+    public boolean isActive()
+    {
+        return true;
+    }
+
+    @Override
+    public MessageDestination getDefaultDestination()
+    {
+        return _defaultDestination;
+    }
+
+    @Override
+    public LinkRegistry getLinkRegistry(final String remoteContainerId)
+    {
+        return _linkRegistry;
+    }
+
+    @Override
+    public boolean authoriseCreateConnection(final AMQPConnection<?> 
connection)
+    {
+        SecurityManager securityManager = _broker.getSecurityManager();
+        securityManager.authoriseCreateConnection(connection);
+        securityManager.accessManagement();
+        return true;
+    }
+
+    @Override
+    public DtxRegistry getDtxRegistry()
+    {
+        throw new DtxNotSupportedException("Distributed Transactions are not 
supported within this address space");
+    }
+
+    @Override
+    public MessageStore getMessageStore()
+    {
+        return _messageStore;
+    }
+
+    @Override
+    public <T extends MessageSource> T createMessageSource(final Class<T> 
clazz, final Map<String, Object> attributes)
+    {
+        return null;
+    }
+
+    @Override
+    public <T extends MessageDestination> T createMessageDestination(final 
Class<T> clazz,
+                                                                     final 
Map<String, Object> attributes)
+    {
+        return null;
+    }
+
+    @Override
+    public boolean hasMessageSources()
+    {
+        return true;
+    }
+
+    @Override
+    public Collection<? extends Connection<?>> getConnections()
+    {
+        return Collections.unmodifiableList(_connections);
+    }
+
+    @Override
+    public String getName()
+    {
+        return _name;
+    }
+
+    @Override
+    public List<String> getGlobalAddressDomains()
+    {
+        return Collections.emptyList();
+    }
+
+    private class DefaultDestination implements MessageDestination
+    {
+        @Override
+        public String getName()
+        {
+            return ExchangeDefaults.DEFAULT_EXCHANGE_NAME;
+        }
+
+        @Override
+        public <M extends ServerMessage<? extends StorableMessageMetaData>> 
int send(final M message,
+                                                                               
      final String routingAddress,
+                                                                               
      final InstanceProperties instanceProperties,
+                                                                               
      final ServerTransaction txn,
+                                                                               
      final Action<? super MessageInstance> postEnqueueAction)
+        {
+            MessageDestination destination = 
getAttainedMessageDestination(routingAddress);
+            if(destination == null || destination == this)
+            {
+                return 0;
+            }
+            else
+            {
+                return destination.send(message, routingAddress, 
instanceProperties, txn, postEnqueueAction);
+            }
+        }
+    }
+
+    private class NonDurableLinkRegistry implements LinkRegistry
+    {
+        @Override
+        public LinkModel getDurableSendingLink(final String name)
+        {
+            return null;
+        }
+
+        @Override
+        public boolean registerSendingLink(final String name, final LinkModel 
link)
+        {
+            throw new ConnectionScopedRuntimeException("Durable links are not 
supported");
+        }
+
+        @Override
+        public boolean unregisterSendingLink(final String name)
+        {
+            return false;
+        }
+
+        @Override
+        public LinkModel getDurableReceivingLink(final String name)
+        {
+            return null;
+        }
+
+        @Override
+        public boolean registerReceivingLink(final String name, final 
LinkModel link)
+        {
+            throw new ConnectionScopedRuntimeException("Durable links are not 
supported");
+        }
+    }
+}

Propchange: 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpace.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpaceCreator.java
 (from r1745130, 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeCreator.java)
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpaceCreator.java?p2=qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpaceCreator.java&p1=qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeCreator.java&r1=1745130&r2=1745217&rev=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeCreator.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpaceCreator.java
 Mon May 23 15:25:45 2016
@@ -21,21 +21,22 @@
 package org.apache.qpid.server.management.amqp;
 
 import org.apache.qpid.server.plugin.PluggableService;
-import org.apache.qpid.server.plugin.SystemNodeCreator;
+import org.apache.qpid.server.plugin.SystemAddressSpaceCreator;
 
 @PluggableService
-public class ManagementNodeCreator implements SystemNodeCreator
+public class ManagementAddressSpaceCreator implements SystemAddressSpaceCreator
 {
+
     @Override
-    public void register(final SystemNodeRegistry registry)
+    public String getType()
     {
-        ManagementNode managementNode = new 
ManagementNode(registry,registry.getVirtualHost());
-        registry.registerSystemNode(managementNode);
+        return "AMQP-SYSTEM-MANAGEMENT";
     }
 
     @Override
-    public String getType()
+    public void register(final AddressSpaceRegistry registry)
     {
-        return "AMQP-VIRTUALHOST-MANAGEMENT";
+        ManagementAddressSpace addressSpace = new 
ManagementAddressSpace(registry);
+        registry.registerAddressSpace(addressSpace);
     }
 }

Copied: 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpacePrincipal.java
 (from r1745130, 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostPrincipal.java)
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpacePrincipal.java?p2=qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpacePrincipal.java&p1=qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostPrincipal.java&r1=1745130&r2=1745217&rev=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostPrincipal.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementAddressSpacePrincipal.java
 Mon May 23 15:25:45 2016
@@ -18,21 +18,21 @@
  * under the License.
  *
  */
-package org.apache.qpid.server.virtualhost;
+package org.apache.qpid.server.management.amqp;
 
 import java.security.Principal;
 
-import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.NamedAddressSpace;
 
-public class VirtualHostPrincipal implements Principal
+class ManagementAddressSpacePrincipal implements Principal
 {
-    private final VirtualHost<?> _virtualHost;
+    private final NamedAddressSpace _addressSpace;
     private final String _name;
 
-    public VirtualHostPrincipal(VirtualHost<?> virtualHost)
+    public ManagementAddressSpacePrincipal(NamedAddressSpace addressSpace)
     {
-        _virtualHost = virtualHost;
-        _name = "virtualhost:" + virtualHost.getName() + "-" + 
virtualHost.getId();
+        _addressSpace = addressSpace;
+        _name = "addressspace:" + addressSpace.getName();
     }
 
     @Override
@@ -53,13 +53,13 @@ public class VirtualHostPrincipal implem
             return false;
         }
 
-        VirtualHostPrincipal that = (VirtualHostPrincipal) o;
-        return _virtualHost.equals(that._virtualHost);
+        ManagementAddressSpacePrincipal that = 
(ManagementAddressSpacePrincipal) o;
+        return _addressSpace.equals(that._addressSpace);
     }
 
     @Override
     public int hashCode()
     {
-        return _virtualHost.hashCode();
+        return _addressSpace.hashCode();
     }
 }

Modified: 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java?rev=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java
 Mon May 23 15:25:45 2016
@@ -52,8 +52,8 @@ import org.apache.qpid.server.message.in
 import org.apache.qpid.server.model.ConfigurationChangeListener;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.ManagedObject;
+import org.apache.qpid.server.model.NamedAddressSpace;
 import org.apache.qpid.server.model.State;
-import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.plugin.MessageConverter;
 import org.apache.qpid.server.plugin.SystemNodeCreator;
 import org.apache.qpid.server.protocol.AMQSessionModel;
@@ -102,11 +102,11 @@ class ManagementNode implements MessageS
     public static final String RESULTS = "results";
 
 
-    private final VirtualHost<?> _virtualHost;
+    private final NamedAddressSpace _addressSpace;
 
     private final UUID _id;
 
-    private final SystemNodeCreator.SystemNodeRegistry _registry;
+    private final Action<ManagementNode> _onDelete;
     private final ConfiguredObject<?> _managedObject;
     private Map<String, ManagementNodeConsumer> _consumers = new 
ConcurrentHashMap<String, ManagementNodeConsumer>();
 
@@ -115,11 +115,13 @@ class ManagementNode implements MessageS
     private Map<ManagedEntityType,Map<String,ConfiguredObject>> _entities = 
Collections.synchronizedMap(new 
LinkedHashMap<ManagedEntityType,Map<String,ConfiguredObject>>());
 
 
-    public ManagementNode(final SystemNodeCreator.SystemNodeRegistry registry,
-                          final ConfiguredObject<?> configuredObject)
+
+    public ManagementNode(final NamedAddressSpace addressSpace,
+                          final ConfiguredObject<?> configuredObject,
+                          final Action<ManagementNode> onDelete)
     {
-        _virtualHost = registry.getVirtualHost();
-        _registry = registry;
+        _addressSpace = addressSpace;
+        _onDelete = onDelete;
         final String name = configuredObject.getId() + MANAGEMENT_NODE_NAME;
         _id = UUID.nameUUIDFromBytes(name.getBytes(Charset.defaultCharset()));
 
@@ -127,7 +129,6 @@ class ManagementNode implements MessageS
         _managedObject = configuredObject;
 
         configuredObject.addChangeListener(new ModelObjectListener());
-
     }
 
     private Class getManagementClass(Class objectClass)
@@ -265,7 +266,7 @@ class ManagementNode implements MessageS
         MessageConverter converter =
                 MessageConverterRegistry.getConverter(message.getClass(), 
InternalMessage.class);
 
-        final InternalMessage msg = (InternalMessage) 
converter.convert(message, _virtualHost);
+        final InternalMessage msg = (InternalMessage) 
converter.convert(message, _addressSpace);
 
         if(validateMessage(msg))
         {
@@ -364,10 +365,10 @@ class ManagementNode implements MessageS
         }
         else
         {
-            _virtualHost.getDefaultDestination().send(response,
-                                                      
message.getMessageHeader().getReplyTo(), InstanceProperties.EMPTY,
-                                                      new 
AutoCommitTransaction(_virtualHost.getMessageStore()),
-                                                      null);
+            _addressSpace.getDefaultDestination().send(response,
+                                                       
message.getMessageHeader().getReplyTo(), InstanceProperties.EMPTY,
+                                                       new 
AutoCommitTransaction(_addressSpace.getMessageStore()),
+                                                       null);
         }
         // TODO - route to a queue
 
@@ -475,7 +476,7 @@ class ManagementNode implements MessageS
             responseBody.put(attribute, 
fixValue(entity.getAttribute(attribute)));
         }
 
-        return 
InternalMessage.createMapMessage(_virtualHost.getMessageStore(),responseHeader, 
responseBody);
+        return 
InternalMessage.createMapMessage(_addressSpace.getMessageStore(), 
responseHeader, responseBody);
     }
 
 
@@ -501,7 +502,7 @@ class ManagementNode implements MessageS
             responseHeader.setHeader(STATUS_CODE_HEADER, 
STATUS_CODE_FORBIDDEN);
         }
 
-        return 
InternalMessage.createMapMessage(_virtualHost.getMessageStore(),responseHeader, 
Collections.emptyMap());
+        return 
InternalMessage.createMapMessage(_addressSpace.getMessageStore(), 
responseHeader, Collections.emptyMap());
     }
 
 
@@ -612,7 +613,7 @@ class ManagementNode implements MessageS
         }
         responseHeader.setHeader(STATUS_CODE_HEADER, statusCode);
         responseHeader.setHeader(STATUS_DESCRIPTION_HEADER, 
MessageFormat.format(stateDescription, params));
-        return 
InternalMessage.createBytesMessage(_virtualHost.getMessageStore(), 
responseHeader, new byte[0]);
+        return 
InternalMessage.createBytesMessage(_addressSpace.getMessageStore(), 
responseHeader, new byte[0]);
 
     }
 
@@ -646,7 +647,7 @@ class ManagementNode implements MessageS
         }
         else
         {
-            responseMessage = 
InternalMessage.createBytesMessage(_virtualHost.getMessageStore(), 
requestHeader, new byte[0]);
+            responseMessage = 
InternalMessage.createBytesMessage(_addressSpace.getMessageStore(), 
requestHeader, new byte[0]);
         }
         return responseMessage;
     }
@@ -689,7 +690,7 @@ class ManagementNode implements MessageS
                 responseMap.put(type.getName(), parentNames);
             }
         }
-        responseMessage = 
InternalMessage.createMapMessage(_virtualHost.getMessageStore(), 
responseHeader, responseMap);
+        responseMessage = 
InternalMessage.createMapMessage(_addressSpace.getMessageStore(), 
responseHeader, responseMap);
         return responseMessage;
     }
 
@@ -727,7 +728,7 @@ class ManagementNode implements MessageS
             responseMap.put(restriction, 
Arrays.asList(entityMapCopy.get(restriction).getAttributes()));
         }
 
-        responseMessage = 
InternalMessage.createMapMessage(_virtualHost.getMessageStore(), 
responseHeader, responseMap);
+        responseMessage = 
InternalMessage.createMapMessage(_addressSpace.getMessageStore(), 
responseHeader, responseMap);
         return responseMessage;
     }
 
@@ -766,7 +767,7 @@ class ManagementNode implements MessageS
             ManagedEntityType type = entityMapCopy.get(restriction);
             responseMap.put(type.getName(), 
Arrays.asList(type.getOperations()));
         }
-        responseMessage = 
InternalMessage.createMapMessage(_virtualHost.getMessageStore(), 
responseHeader, responseMap);
+        responseMessage = 
InternalMessage.createMapMessage(_addressSpace.getMessageStore(), 
responseHeader, responseMap);
         return responseMessage;
     }
 
@@ -887,7 +888,7 @@ class ManagementNode implements MessageS
         Map<String,List> responseMap = new HashMap<String, List>();
         responseMap.put(ATTRIBUTE_NAMES, attributes);
         responseMap.put(RESULTS, responseList);
-        responseMessage = 
InternalMessage.createMapMessage(_virtualHost.getMessageStore(),
+        responseMessage = 
InternalMessage.createMapMessage(_addressSpace.getMessageStore(),
                                                            responseHeader,
                                                            responseMap);
         return responseMessage;
@@ -1223,7 +1224,10 @@ class ManagementNode implements MessageS
         {
             if(newState == State.DELETED)
             {
-                _registry.removeSystemNode(ManagementNode.this);
+                if(_onDelete != null)
+                {
+                    _onDelete.performAction(ManagementNode.this);
+                }
             }
             else if(newState == State.ACTIVE && object instanceof 
org.apache.qpid.server.model.VirtualHost)
             {

Modified: 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeCreator.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeCreator.java?rev=1745217&r1=1745216&r2=1745217&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeCreator.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeCreator.java
 Mon May 23 15:25:45 2016
@@ -22,6 +22,7 @@ package org.apache.qpid.server.managemen
 
 import org.apache.qpid.server.plugin.PluggableService;
 import org.apache.qpid.server.plugin.SystemNodeCreator;
+import org.apache.qpid.server.util.Action;
 
 @PluggableService
 public class ManagementNodeCreator implements SystemNodeCreator
@@ -29,7 +30,15 @@ public class ManagementNodeCreator imple
     @Override
     public void register(final SystemNodeRegistry registry)
     {
-        ManagementNode managementNode = new 
ManagementNode(registry,registry.getVirtualHost());
+        ManagementNode managementNode = new 
ManagementNode(registry.getVirtualHost(),
+                                                           
registry.getVirtualHost(), new Action<ManagementNode>()
+                {
+                    @Override
+                    public void performAction(final ManagementNode node)
+                    {
+                        registry.removeSystemNode(node);
+                    }
+                });
         registry.registerSystemNode(managementNode);
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to