You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2012/11/01 10:48:57 UTC

svn commit: r1404521 [4/6] - in /qpid/branches/java-broker-config-qpid-4390/qpid/java: ./ broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/ broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/ bro...

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java Thu Nov  1 09:48:52 2012
@@ -31,16 +31,21 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.UUID;
+
 import org.apache.qpid.AMQException;
 import org.apache.qpid.framing.FieldTable;
+import org.apache.qpid.server.configuration.VirtualHostConfiguration;
 import org.apache.qpid.server.connection.IConnectionRegistry;
 import org.apache.qpid.server.exchange.ExchangeRegistry;
 import org.apache.qpid.server.message.ServerMessage;
+import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.Connection;
 import org.apache.qpid.server.model.Exchange;
 import org.apache.qpid.server.model.LifetimePolicy;
 import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.Protocol;
 import org.apache.qpid.server.model.Queue;
 import org.apache.qpid.server.model.QueueType;
 import org.apache.qpid.server.model.State;
@@ -56,16 +61,20 @@ import org.apache.qpid.server.queue.Queu
 import org.apache.qpid.server.queue.QueueRegistry;
 import org.apache.qpid.server.security.SecurityManager;
 import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
+import org.apache.qpid.server.stats.StatisticsGatherer;
 import org.apache.qpid.server.store.MessageStore;
 import org.apache.qpid.server.txn.LocalTransaction;
 import org.apache.qpid.server.txn.ServerTransaction;
+import org.apache.qpid.server.util.MapValueConverter;
+import org.apache.qpid.server.virtualhost.VirtualHostImpl;
+import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
 
-final class VirtualHostAdapter extends AbstractAdapter implements VirtualHost, ExchangeRegistry.RegistryChangeListener,
+public final class VirtualHostAdapter extends AbstractAdapter implements VirtualHost, ExchangeRegistry.RegistryChangeListener,
                                                                   QueueRegistry.RegistryChangeListener,
                                                                   IConnectionRegistry.RegistryChangeListener
 {
 
-    private final org.apache.qpid.server.virtualhost.VirtualHost _virtualHost;
+    private org.apache.qpid.server.virtualhost.VirtualHost _virtualHost;
 
     private final Map<AMQConnectionModel, ConnectionAdapter> _connectionAdapters =
             new HashMap<AMQConnectionModel, ConnectionAdapter>();
@@ -76,35 +85,34 @@ final class VirtualHostAdapter extends A
     private final Map<org.apache.qpid.server.exchange.Exchange, ExchangeAdapter> _exchangeAdapters =
             new HashMap<org.apache.qpid.server.exchange.Exchange, ExchangeAdapter>();
 
-    private final StatisticsAdapter _statistics;
+    private StatisticsAdapter _statistics;
 
-    private final BrokerAdapter _broker;
+    private final Broker _broker;
 
     private final List<VirtualHostAlias> _aliases = new ArrayList<VirtualHostAlias>();
 
+    private final String _name;
 
-    VirtualHostAdapter(BrokerAdapter brokerAdapter,
-                       final org.apache.qpid.server.virtualhost.VirtualHost virtualHost)
-    {
-        super(virtualHost.getId());
-        _broker = brokerAdapter;
-        _virtualHost = virtualHost;
-        _statistics = new VirtualHostStatisticsAdapter(virtualHost);
-        virtualHost.getQueueRegistry().addRegistryChangeListener(this);
-        populateQueues();
-        virtualHost.getExchangeRegistry().addRegistryChangeListener(this);
-        populateExchanges();
-        virtualHost.getConnectionRegistry().addRegistryChangeListener(this);
-        populateConnections();
+    private VirtualHostRegistry _virtualHostRegistry;
 
+    private VirtualHostConfiguration _configuration;
 
+    private StatisticsGatherer _statisticsGatherer;
 
-        for(Port port :_broker.getPorts())
-        {
-            _aliases.add(new VirtualHostAliasAdapter(this, port));
-        }
-    }
+    private SecurityManager _securityManager;
 
+    public VirtualHostAdapter(UUID id, Broker broker, Map<String, Object> attributes, VirtualHostRegistry virtualHostRegistry,
+            StatisticsGatherer statisticsGatherer, SecurityManager securityManager, VirtualHostConfiguration configuration)
+    {
+        super(id);
+        _broker = broker;
+        _name = (String)attributes.get(NAME);
+        _virtualHostRegistry = virtualHostRegistry;
+        _configuration = configuration;
+        _statisticsGatherer = statisticsGatherer;
+        _securityManager = securityManager;
+        addParent(Broker.class, broker);
+    }
 
     private void populateExchanges()
     {
@@ -127,14 +135,16 @@ final class VirtualHostAdapter extends A
     private void populateQueues()
     {
         Collection<AMQQueue> actualQueues = _virtualHost.getQueueRegistry().getQueues();
-
-        synchronized(_queueAdapters)
+        if ( actualQueues != null )
         {
-            for(AMQQueue queue : actualQueues)
+            synchronized(_queueAdapters)
             {
-                if(!_queueAdapters.containsKey(queue))
+                for(AMQQueue queue : actualQueues)
                 {
-                    _queueAdapters.put(queue, new QueueAdapter(this,queue));
+                    if(!_queueAdapters.containsKey(queue))
+                    {
+                        _queueAdapters.put(queue, new QueueAdapter(this,queue));
+                    }
                 }
             }
         }
@@ -158,6 +168,7 @@ final class VirtualHostAdapter extends A
 
     }
 
+    @Override
     public String getReplicationGroupName()
     {
         return null;  //TODO
@@ -199,12 +210,12 @@ final class VirtualHostAdapter extends A
     {
         attributes = new HashMap<String, Object>(attributes);
 
-        String         name     = getStringAttribute(Exchange.NAME, attributes, null);
-        State          state    = getEnumAttribute(State.class, Exchange.STATE, attributes, State.ACTIVE);
-        boolean        durable  = getBooleanAttribute(Exchange.DURABLE, attributes, false);
-        LifetimePolicy lifetime = getEnumAttribute(LifetimePolicy.class, Exchange.LIFETIME_POLICY, attributes, LifetimePolicy.PERMANENT);
-        String         type     = getStringAttribute(Exchange.TYPE, attributes, null);
-        long           ttl      = getLongAttribute(Exchange.TIME_TO_LIVE, attributes, 0l);
+        String         name     = MapValueConverter.getStringAttribute(Exchange.NAME, attributes, null);
+        State          state    = MapValueConverter.getEnumAttribute(State.class, Exchange.STATE, attributes, State.ACTIVE);
+        boolean        durable  = MapValueConverter.getBooleanAttribute(Exchange.DURABLE, attributes, false);
+        LifetimePolicy lifetime = MapValueConverter.getEnumAttribute(LifetimePolicy.class, Exchange.LIFETIME_POLICY, attributes, LifetimePolicy.PERMANENT);
+        String         type     = MapValueConverter.getStringAttribute(Exchange.TYPE, attributes, null);
+        long           ttl      = MapValueConverter.getLongAttribute(Exchange.TIME_TO_LIVE, attributes, 0l);
 
         attributes.remove(Exchange.NAME);
         attributes.remove(Exchange.STATE);
@@ -267,7 +278,7 @@ final class VirtualHostAdapter extends A
 
         if (attributes.containsKey(Queue.TYPE))
         {
-            String typeAttribute = getStringAttribute(Queue.TYPE, attributes, null);
+            String typeAttribute = MapValueConverter.getStringAttribute(Queue.TYPE, attributes, null);
             QueueType queueType = null;
             try
             {
@@ -290,12 +301,12 @@ final class VirtualHostAdapter extends A
                 throw new IllegalArgumentException("Sort key is not specified for sorted queue");
             }
         }
-        String         name     = getStringAttribute(Queue.NAME, attributes, null);
-        State          state    = getEnumAttribute(State.class, Queue.STATE, attributes, State.ACTIVE);
-        boolean        durable  = getBooleanAttribute(Queue.DURABLE, attributes, false);
-        LifetimePolicy lifetime = getEnumAttribute(LifetimePolicy.class, Queue.LIFETIME_POLICY, attributes, LifetimePolicy.PERMANENT);
-        long           ttl      = getLongAttribute(Queue.TIME_TO_LIVE, attributes, 0l);
-        boolean        exclusive= getBooleanAttribute(Queue.EXCLUSIVE, attributes, false);
+        String         name     = MapValueConverter.getStringAttribute(Queue.NAME, attributes, null);
+        State          state    = MapValueConverter.getEnumAttribute(State.class, Queue.STATE, attributes, State.ACTIVE);
+        boolean        durable  = MapValueConverter.getBooleanAttribute(Queue.DURABLE, attributes, false);
+        LifetimePolicy lifetime = MapValueConverter.getEnumAttribute(LifetimePolicy.class, Queue.LIFETIME_POLICY, attributes, LifetimePolicy.PERMANENT);
+        long           ttl      = MapValueConverter.getLongAttribute(Queue.TIME_TO_LIVE, attributes, 0l);
+        boolean        exclusive= MapValueConverter.getBooleanAttribute(Queue.EXCLUSIVE, attributes, false);
 
         attributes.remove(Queue.NAME);
         attributes.remove(Queue.STATE);
@@ -370,7 +381,7 @@ final class VirtualHostAdapter extends A
 
     public String getName()
     {
-        return _virtualHost.getName();
+        return _name;
     }
 
     public String setName(final String currentName, final String desiredName)
@@ -885,4 +896,59 @@ final class VirtualHostAdapter extends A
         }
     }
 
+
+    @Override
+    protected boolean setState(State currentState, State desiredState)
+    {
+        if (desiredState == State.ACTIVE)
+        {
+            try
+            {
+                _virtualHost = new VirtualHostImpl(_virtualHostRegistry, _statisticsGatherer, _securityManager, _configuration);
+            }
+            catch (Exception e)
+            {
+               throw new RuntimeException("Failed to create virtual host", e);
+            }
+
+            _virtualHostRegistry.registerVirtualHost(_virtualHost);
+
+            _statistics = new VirtualHostStatisticsAdapter(_virtualHost);
+            _virtualHost.getQueueRegistry().addRegistryChangeListener(this);
+            populateQueues();
+            _virtualHost.getExchangeRegistry().addRegistryChangeListener(this);
+            populateExchanges();
+            _virtualHost.getConnectionRegistry().addRegistryChangeListener(this);
+            populateConnections();
+
+            synchronized(_aliases)
+            {
+                for(Port port :_broker.getPorts())
+                {
+                   if (Protocol.hasAmqpProtocol(port.getProtocols()))
+                   {
+                       _aliases.add(new VirtualHostAliasAdapter(this, port));
+                   }
+                }
+            }
+            return true;
+        }
+        else if (desiredState == State.STOPPED)
+        {
+            if (_virtualHost != null)
+            {
+                try
+                {
+                    _virtualHost.close();
+                }
+                finally
+                {
+                    _virtualHostRegistry.unregisterVirtualHost(_virtualHost);
+                }
+            }
+            return true;
+        }
+        return false;
+    }
+
 }

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java Thu Nov  1 09:48:52 2012
@@ -140,4 +140,11 @@ public class VirtualHostAliasAdapter  ex
     {
         throw new UnsupportedOperationException();
     }
+
+    @Override
+    protected boolean setState(State currentState, State desiredState)
+    {
+        // TODO: state is not supported at the moment
+        return false;
+    }
 }

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/AuthenticationManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/AuthenticationManagerFactory.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/AuthenticationManagerFactory.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/AuthenticationManagerFactory.java Thu Nov  1 09:48:52 2012
@@ -18,11 +18,15 @@
  */
 package org.apache.qpid.server.plugin;
 
-import org.apache.commons.configuration.Configuration;
+import java.util.Map;
+
+import org.apache.qpid.server.model.AuthenticationProvider;
 import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
 
 
 public interface AuthenticationManagerFactory
 {
-    AuthenticationManager createInstance(Configuration securityConfiguration);
+    public static final String TYPE =  AuthenticationProvider.TYPE;
+
+    AuthenticationManager createInstance(Map<String, Object> attributes);
 }

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/GroupManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/GroupManagerFactory.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/GroupManagerFactory.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/GroupManagerFactory.java Thu Nov  1 09:48:52 2012
@@ -18,10 +18,11 @@
  */
 package org.apache.qpid.server.plugin;
 
-import org.apache.commons.configuration.Configuration;
+import java.util.Map;
+
 import org.apache.qpid.server.security.group.GroupManager;
 
 public interface GroupManagerFactory
 {
-    GroupManager createInstance(Configuration securityConfiguration);
+    GroupManager createInstance(Map<String, Object> attributes);
 }

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java Thu Nov  1 09:48:52 2012
@@ -309,7 +309,7 @@ public class MultiVersionProtocolEngine 
             conn.setConnectionDelegate(connDelegate);
             conn.setRemoteAddress(_network.getRemoteAddress());
             conn.setLocalAddress(_network.getLocalAddress());
-            return new ProtocolEngine_0_10( conn, _network, _appRegistry);
+            return new ProtocolEngine_0_10( conn, _network);
         }
     };
 

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactory.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactory.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactory.java Thu Nov  1 09:48:52 2012
@@ -22,7 +22,6 @@ package org.apache.qpid.server.protocol;
 
 import org.apache.qpid.protocol.ProtocolEngineFactory;
 import org.apache.qpid.protocol.ServerProtocolEngine;
-import org.apache.qpid.server.registry.ApplicationRegistry;
 import org.apache.qpid.server.registry.IApplicationRegistry;
 
 import java.util.Set;
@@ -36,7 +35,7 @@ public class MultiVersionProtocolEngineF
     private final Set<AmqpProtocolVersion> _supported;
     private final AmqpProtocolVersion _defaultSupportedReply;
 
-    public MultiVersionProtocolEngineFactory(final Set<AmqpProtocolVersion> supportedVersions, final AmqpProtocolVersion defaultSupportedReply)
+    public MultiVersionProtocolEngineFactory(IApplicationRegistry appRegistry, final Set<AmqpProtocolVersion> supportedVersions, final AmqpProtocolVersion defaultSupportedReply)
     {
         if(defaultSupportedReply != null && !supportedVersions.contains(defaultSupportedReply))
         {
@@ -44,7 +43,7 @@ public class MultiVersionProtocolEngineF
                                              + ") to an unsupported protocol version initiation is itself not supported!");
         }
 
-        _appRegistry = ApplicationRegistry.getInstance();
+        _appRegistry = appRegistry;
         _supported = supportedVersions;
         _defaultSupportedReply = defaultSupportedReply;
     }

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_0_10.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_0_10.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_0_10.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_0_10.java Thu Nov  1 09:48:52 2012
@@ -22,7 +22,6 @@ package org.apache.qpid.server.protocol;
 
 import org.apache.qpid.protocol.ServerProtocolEngine;
 import org.apache.qpid.server.logging.messages.ConnectionMessages;
-import org.apache.qpid.server.registry.IApplicationRegistry;
 import org.apache.qpid.server.transport.ServerConnection;
 import org.apache.qpid.transport.Sender;
 import org.apache.qpid.transport.network.Assembler;
@@ -32,7 +31,7 @@ import org.apache.qpid.transport.network
 
 import java.net.SocketAddress;
 import java.nio.ByteBuffer;
-import java.util.UUID;
+
 
 public class ProtocolEngine_0_10  extends InputHandler implements ServerProtocolEngine
 {
@@ -42,17 +41,15 @@ public class ProtocolEngine_0_10  extend
     private long _readBytes;
     private long _writtenBytes;
     private ServerConnection _connection;
-    private final IApplicationRegistry _appRegistry;
+
     private long _createTime = System.currentTimeMillis();
 
     public ProtocolEngine_0_10(ServerConnection conn,
-                               NetworkConnection network,
-                               final IApplicationRegistry appRegistry)
+                               NetworkConnection network)
     {
         super(new Assembler(conn));
         _connection = conn;
 
-        _appRegistry = appRegistry;
 
         if(network != null)
         {

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java Thu Nov  1 09:48:52 2012
@@ -20,44 +20,61 @@
  */
 package org.apache.qpid.server.registry;
 
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.log4j.Logger;
-import org.apache.qpid.server.logging.*;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicReference;
 
+import org.apache.log4j.Logger;
 import org.apache.qpid.common.Closeable;
 import org.apache.qpid.common.QpidProperties;
+import org.apache.qpid.server.BrokerOptions;
+import org.apache.qpid.server.configuration.ConfigurationEntryStore;
 import org.apache.qpid.server.configuration.ServerConfiguration;
 import org.apache.qpid.server.configuration.VirtualHostConfiguration;
+import org.apache.qpid.server.configuration.startup.AuthenticationProviderRecoverer;
+import org.apache.qpid.server.configuration.startup.BrokerRecoverer;
+import org.apache.qpid.server.configuration.startup.GroupProviderRecoverer;
+import org.apache.qpid.server.configuration.startup.PortRecoverer;
+import org.apache.qpid.server.configuration.startup.VirtualHostRecoverer;
+import org.apache.qpid.server.configuration.store.XMLConfigurationEntryStore;
+import org.apache.qpid.server.logging.CompositeStartupMessageLogger;
+import org.apache.qpid.server.logging.Log4jMessageLogger;
+import org.apache.qpid.server.logging.LogActor;
+import org.apache.qpid.server.logging.LogRecorder;
+import org.apache.qpid.server.logging.RootMessageLogger;
+import org.apache.qpid.server.logging.SystemOutMessageLogger;
 import org.apache.qpid.server.logging.actors.AbstractActor;
 import org.apache.qpid.server.logging.actors.BrokerActor;
 import org.apache.qpid.server.logging.actors.CurrentActor;
+import org.apache.qpid.server.logging.actors.GenericActor;
 import org.apache.qpid.server.logging.messages.BrokerMessages;
 import org.apache.qpid.server.logging.messages.VirtualHostMessages;
 import org.apache.qpid.server.management.plugin.ManagementPlugin;
+import org.apache.qpid.server.model.AuthenticationProvider;
 import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.adapter.BrokerAdapter;
+import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.adapter.AuthenticationProviderFactory;
+import org.apache.qpid.server.model.adapter.PortFactory;
+import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
 import org.apache.qpid.server.plugin.GroupManagerFactory;
 import org.apache.qpid.server.plugin.ManagementFactory;
 import org.apache.qpid.server.plugin.QpidServiceLoader;
 import org.apache.qpid.server.security.SecurityManager;
 import org.apache.qpid.server.security.SubjectCreator;
-import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
-import org.apache.qpid.server.security.auth.manager.AuthenticationManagerRegistry;
-import org.apache.qpid.server.security.auth.manager.IAuthenticationManagerRegistry;
-import org.apache.qpid.server.security.group.GroupManager;
-import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
 import org.apache.qpid.server.stats.StatisticsCounter;
-import org.apache.qpid.server.transport.QpidAcceptor;
 import org.apache.qpid.server.virtualhost.VirtualHost;
 import org.apache.qpid.server.virtualhost.VirtualHostImpl;
 import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
 
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicReference;
-
 
 /**
  * An abstract application registry that provides access to configuration information and handles the
@@ -73,11 +90,6 @@ public class ApplicationRegistry impleme
 
     private final ServerConfiguration _configuration;
 
-    private final Map<InetSocketAddress, QpidAcceptor> _acceptors =
-            Collections.synchronizedMap(new HashMap<InetSocketAddress, QpidAcceptor>());
-
-    private IAuthenticationManagerRegistry _authenticationManagerRegistry;
-
     private final VirtualHostRegistry _virtualHostRegistry = new VirtualHostRegistry(this);
 
     private SecurityManager _securityManager;
@@ -91,31 +103,11 @@ public class ApplicationRegistry impleme
     private Timer _reportingTimer;
     private StatisticsCounter _messagesDelivered, _dataDelivered, _messagesReceived, _dataReceived;
 
-    private final List<PortBindingListener> _portBindingListeners = new ArrayList<PortBindingListener>();
-
-    private int _httpManagementPort = -1, _httpsManagementPort = -1;
-
     private LogRecorder _logRecorder;
 
-    private List<IAuthenticationManagerRegistry.RegistryChangeListener> _authManagerChangeListeners =
-            new ArrayList<IAuthenticationManagerRegistry.RegistryChangeListener>();
-
-    private List<GroupManagerChangeListener> _groupManagerChangeListeners =
-            new ArrayList<GroupManagerChangeListener>();
-
-    private List<GroupManager> _groupManagerList = new ArrayList<GroupManager>();
-
-    private QpidServiceLoader<GroupManagerFactory> _groupManagerServiceLoader = new QpidServiceLoader<GroupManagerFactory>();
-
     private final List<ManagementPlugin> _managmentInstanceList = new ArrayList<ManagementPlugin>();
 
-    public Map<InetSocketAddress, QpidAcceptor> getAcceptors()
-    {
-        synchronized (_acceptors)
-        {
-            return new HashMap<InetSocketAddress, QpidAcceptor>(_acceptors);
-        }
-    }
+    private final BrokerOptions _brokerOptions;
 
     protected void setSecurityManager(SecurityManager securityManager)
     {
@@ -158,10 +150,17 @@ public class ApplicationRegistry impleme
         }
         catch (Exception e)
         {
-            _instance.set(null);
+            try
+            {
+                instance.close();
+            }
+            catch(Exception e1)
+            {
+                _logger.error("Failed to close uninitialized registry", e1);
+            }
 
             //remove the Broker instance, then re-throw
-
+            _instance.set(null);
             throw e;
         }
     }
@@ -191,9 +190,16 @@ public class ApplicationRegistry impleme
         }
     }
 
+    /** intended to be used when broker options are not applicable, eg from tests */
     public ApplicationRegistry(ServerConfiguration configuration)
     {
+        this(configuration, new BrokerOptions());
+    }
+
+    public ApplicationRegistry(ServerConfiguration configuration, BrokerOptions brokerOptions)
+    {
         _configuration = configuration;
+        _brokerOptions = brokerOptions;
     }
 
     public void initialise() throws Exception
@@ -212,69 +218,87 @@ public class ApplicationRegistry impleme
 
         try
         {
-            initialiseStatistics();
 
-            if(_configuration.getHTTPManagementEnabled())
-            {
-                _httpManagementPort = _configuration.getHTTPManagementPort();
-            }
-            if (_configuration.getHTTPSManagementEnabled())
-            {
-                _httpsManagementPort = _configuration.getHTTPSManagementPort();
-            }
+            initialiseStatistics();
+            _configuration.initialise();
 
-            _broker = new BrokerAdapter(this);
+            // We have already loaded the BrokerMessages class by this point so we
+            // need to refresh the locale setting in case we had a different value in
+            // the configuration.
+            BrokerMessages.reload();
+
+            // AR.initialise() sets and removes its own actor so we now need to set the actor
+            // for the remainder of the startup, and the default actor if the stack is empty
+            //CurrentActor.set(new BrokerActor(applicationRegistry.getCompositeStartupMessageLogger()));
+            CurrentActor.setDefault(new BrokerActor(_rootMessageLogger));
+            GenericActor.setDefaultMessageLogger(_rootMessageLogger);
 
-            _configuration.initialise();
             logStartupMessages(CurrentActor.get());
 
-            // Management needs to be registered so that JMXManagement.childAdded can create optional management objects
-            createAndStartManagementPlugins(_configuration, _broker);
-
             _securityManager = new SecurityManager(_configuration.getConfig());
 
-            _groupManagerList = createGroupManagers(_configuration);
+            createBroker();
 
-            _authenticationManagerRegistry = createAuthenticationManagerRegistry(_configuration, new GroupPrincipalAccessor(_groupManagerList));
+            getVirtualHostRegistry().setDefaultVirtualHostName(_configuration.getDefaultVirtualHost());
+            initialiseStatisticsReporting();
 
-            if(!_authManagerChangeListeners.isEmpty())
-            {
-                for(IAuthenticationManagerRegistry.RegistryChangeListener listener : _authManagerChangeListeners)
-                {
+            // starting the broker
+            _broker.setDesiredState(State.INITIALISING, State.ACTIVE);
 
-                    _authenticationManagerRegistry.addRegistryChangeListener(listener);
-                    for(AuthenticationManager authMgr : _authenticationManagerRegistry.getAvailableAuthenticationManagers().values())
-                    {
-                        listener.authenticationManagerRegistered(authMgr);
-                    }
-                }
-                _authManagerChangeListeners.clear();
-            }
+            createAndStartManagementPlugins(_configuration);
+            CurrentActor.get().message(BrokerMessages.READY());
         }
         finally
         {
             CurrentActor.remove();
         }
 
-        CurrentActor.set(new BrokerActor(_rootMessageLogger));
-        try
-        {
-            initialiseVirtualHosts();
-            initialiseStatisticsReporting();
-        }
-        finally
+    }
+
+    private void createBroker()
+    {
+        // XXX move all the code below into store and broker creator
+        ConfigurationEntryStore store = new XMLConfigurationEntryStore(_configuration, _brokerOptions);
+
+        Map<String, VirtualHostConfiguration> virtualHostConfigurations = new HashMap<String, VirtualHostConfiguration>();
+        String[] vhNames = _configuration.getVirtualHostsNames();
+        for (String name : vhNames)
         {
-            // Startup complete, so pop the current actor
-            CurrentActor.remove();
+            virtualHostConfigurations.put(name, _configuration.getVirtualHostConfig(name));
         }
+
+        // XXX : introduce RecovererGeneraor/Registry/Factory?
+
+        PortFactory portFactory = new PortFactory(this);
+        PortRecoverer portRecoverer = new PortRecoverer(portFactory);
+        VirtualHostRecoverer virtualHostRecoverer = new VirtualHostRecoverer(getVirtualHostRegistry(),
+                this, getSecurityManager(), virtualHostConfigurations);
+
+        AuthenticationProviderFactory authenticationProviderFactory =
+                new AuthenticationProviderFactory(new QpidServiceLoader<AuthenticationManagerFactory>());
+        AuthenticationProviderRecoverer authenticationProviderRecoverer =
+                new AuthenticationProviderRecoverer(authenticationProviderFactory);
+
+        GroupProviderRecoverer groupProviderRecoverer = new GroupProviderRecoverer(new QpidServiceLoader<GroupManagerFactory>());
+
+        BrokerRecoverer brokerRecoverer =  new BrokerRecoverer(
+                portRecoverer,
+                virtualHostRecoverer,
+                authenticationProviderRecoverer,
+                authenticationProviderFactory,
+                portFactory,
+                groupProviderRecoverer,
+                this);
+
+        _broker = brokerRecoverer.create(store.getRootEntry());
     }
 
-    private void createAndStartManagementPlugins(ServerConfiguration configuration, Broker broker) throws Exception
+    private void createAndStartManagementPlugins(ServerConfiguration configuration) throws Exception
     {
         QpidServiceLoader<ManagementFactory> factories = new QpidServiceLoader<ManagementFactory>();
         for (ManagementFactory managementFactory: factories.instancesOf(ManagementFactory.class))
         {
-            ManagementPlugin managementPlugin = managementFactory.createInstance(configuration, broker);
+            ManagementPlugin managementPlugin = managementFactory.createInstance(configuration, _broker);
             if(managementPlugin != null)
             {
                 try
@@ -313,46 +337,6 @@ public class ApplicationRegistry impleme
         }
     }
 
-    private List<GroupManager> createGroupManagers(ServerConfiguration configuration) throws ConfigurationException
-    {
-        List<GroupManager> groupManagerList = new ArrayList<GroupManager>();
-        Configuration securityConfig = configuration.getConfig().subset("security");
-
-        for(GroupManagerFactory factory : _groupManagerServiceLoader.instancesOf(GroupManagerFactory.class))
-        {
-            GroupManager groupManager = factory.createInstance(securityConfig);
-            if (groupManager != null)
-            {
-                groupManagerList.add(groupManager);
-                for(GroupManagerChangeListener listener : _groupManagerChangeListeners)
-                {
-                    listener.groupManagerRegistered(groupManager);
-                }
-            }
-        }
-
-        if (_logger.isDebugEnabled())
-        {
-            _logger.debug("Configured " + groupManagerList.size() + " group manager(s)");
-        }
-        return groupManagerList;
-    }
-
-    protected IAuthenticationManagerRegistry createAuthenticationManagerRegistry(ServerConfiguration configuration, GroupPrincipalAccessor groupPrincipalAccessor)
-            throws ConfigurationException
-    {
-        return new AuthenticationManagerRegistry(configuration, groupPrincipalAccessor);
-    }
-
-    protected void initialiseVirtualHosts() throws Exception
-    {
-        for (String name : _configuration.getVirtualHosts())
-        {
-            createVirtualHost(_configuration.getVirtualHostConfig(name));
-        }
-        getVirtualHostRegistry().setDefaultVirtualHostName(_configuration.getDefaultVirtualHost());
-    }
-
     public void initialiseStatisticsReporting()
     {
         long report = _configuration.getStatisticsReportingPeriod() * 1000; // convert to ms
@@ -487,19 +471,20 @@ public class ApplicationRegistry impleme
                 _reportingTimer.cancel();
             }
 
-            //Stop incoming connections
-            unbind();
+            closeAllManagementPlugins();
+
+            if (_broker != null)
+            {
+                _broker.setDesiredState(_broker.getActualState(), State.STOPPED);
+            }
 
             //Shutdown virtualhosts
             close(_virtualHostRegistry);
 
-            close(_authenticationManagerRegistry);
-
             CurrentActor.get().message(BrokerMessages.STOPPED());
 
             _logRecorder.closeLogRecorder();
 
-            closeAllManagementPlugins();
         }
         finally
         {
@@ -507,60 +492,11 @@ public class ApplicationRegistry impleme
         }
     }
 
-    private void unbind()
-    {
-        List<QpidAcceptor> removedAcceptors = new ArrayList<QpidAcceptor>();
-        synchronized (_acceptors)
-        {
-            for (InetSocketAddress bindAddress : _acceptors.keySet())
-            {
-                QpidAcceptor acceptor = _acceptors.get(bindAddress);
-
-                removedAcceptors.add(acceptor);
-                try
-                {
-                    acceptor.getNetworkTransport().close();
-                }
-                catch (Throwable e)
-                {
-                    _logger.error("Unable to close network driver due to:" + e.getMessage());
-                }
-
-               CurrentActor.get().message(BrokerMessages.SHUTTING_DOWN(acceptor.toString(), bindAddress.getPort()));
-            }
-        }
-        synchronized (_portBindingListeners)
-        {
-            for(QpidAcceptor acceptor : removedAcceptors)
-            {
-                for(PortBindingListener listener : _portBindingListeners)
-                {
-                    listener.unbound(acceptor);
-                }
-            }
-        }
-    }
-
     public ServerConfiguration getConfiguration()
     {
         return _configuration;
     }
 
-    public void addAcceptor(InetSocketAddress bindAddress, QpidAcceptor acceptor)
-    {
-        synchronized (_acceptors)
-        {
-            _acceptors.put(bindAddress, acceptor);
-        }
-        synchronized (_portBindingListeners)
-        {
-            for(PortBindingListener listener : _portBindingListeners)
-            {
-                listener.bound(acceptor, bindAddress);
-            }
-        }
-    }
-
     public VirtualHostRegistry getVirtualHostRegistry()
     {
         return _virtualHostRegistry;
@@ -574,19 +510,18 @@ public class ApplicationRegistry impleme
     @Override
     public SubjectCreator getSubjectCreator(SocketAddress localAddress)
     {
-        return _authenticationManagerRegistry.getSubjectCreator(localAddress);
-    }
-
-    @Override
-    public IAuthenticationManagerRegistry getAuthenticationManagerRegistry()
-    {
-        return _authenticationManagerRegistry;
-    }
-
-    @Override
-    public List<GroupManager> getGroupManagers()
-    {
-        return _groupManagerList;
+        AuthenticationProvider provider = _broker.getDefaultAuthenticationProvider();
+        InetSocketAddress inetSocketAddress = (InetSocketAddress)localAddress;
+        Collection<Port> ports = _broker.getPorts();
+        for (Port p : ports)
+        {
+            if (inetSocketAddress.getPort() == p.getPort())
+            {
+                provider = p.getAuthenticationProvider();
+                break;
+            }
+        }
+        return provider.getSubjectCreator();
     }
 
     public RootMessageLogger getRootMessageLogger()
@@ -606,7 +541,7 @@ public class ApplicationRegistry impleme
 
     public VirtualHost createVirtualHost(final VirtualHostConfiguration vhostConfig) throws Exception
     {
-        VirtualHostImpl virtualHost = new VirtualHostImpl(this, vhostConfig);
+        VirtualHostImpl virtualHost = new VirtualHostImpl(this.getVirtualHostRegistry(), this, this.getSecurityManager(), vhostConfig);
         _virtualHostRegistry.registerVirtualHost(virtualHost);
         return virtualHost;
     }
@@ -682,61 +617,8 @@ public class ApplicationRegistry impleme
         return _broker;
     }
 
-    @Override
-    public void addPortBindingListener(PortBindingListener listener)
-    {
-        synchronized (_portBindingListeners)
-        {
-            _portBindingListeners.add(listener);
-        }
-    }
-
-
-    @Override
-    public boolean useHTTPManagement()
-    {
-        return _httpManagementPort != -1;
-    }
-
-    @Override
-    public int getHTTPManagementPort()
-    {
-        return _httpManagementPort;
-    }
-
-    @Override
-    public boolean useHTTPSManagement()
-    {
-        return _httpsManagementPort != -1;
-    }
-
-    @Override
-    public int getHTTPSManagementPort()
-    {
-        return _httpsManagementPort;
-    }
-
     public LogRecorder getLogRecorder()
     {
         return _logRecorder;
     }
-
-    @Override
-    public void addAuthenticationManagerRegistryChangeListener(IAuthenticationManagerRegistry.RegistryChangeListener registryChangeListener)
-    {
-        if(_authenticationManagerRegistry == null)
-        {
-            _authManagerChangeListeners.add(registryChangeListener);
-        }
-        else
-        {
-            _authenticationManagerRegistry.addRegistryChangeListener(registryChangeListener);
-        }
-    }
-
-    @Override
-    public void addGroupManagerChangeListener(GroupManagerChangeListener groupManagerChangeListener)
-    {
-        _groupManagerChangeListeners.add(groupManagerChangeListener);
-    }
 }

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java Thu Nov  1 09:48:52 2012
@@ -26,18 +26,11 @@ import org.apache.qpid.server.logging.Ro
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.security.SecurityManager;
 import org.apache.qpid.server.security.SubjectCreator;
-import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
-import org.apache.qpid.server.security.auth.manager.IAuthenticationManagerRegistry;
-import org.apache.qpid.server.security.group.GroupManager;
 import org.apache.qpid.server.stats.StatisticsGatherer;
-import org.apache.qpid.server.transport.QpidAcceptor;
 import org.apache.qpid.server.virtualhost.VirtualHost;
 import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
 
-import java.net.InetSocketAddress;
 import java.net.SocketAddress;
-import java.util.List;
-import java.util.Map;
 import java.util.UUID;
 
 public interface IApplicationRegistry extends StatisticsGatherer
@@ -68,23 +61,12 @@ public interface IApplicationRegistry ex
      */
     SubjectCreator getSubjectCreator(SocketAddress localAddress);
 
-    IAuthenticationManagerRegistry getAuthenticationManagerRegistry();
-
-    List<GroupManager> getGroupManagers();
-
     VirtualHostRegistry getVirtualHostRegistry();
 
     SecurityManager getSecurityManager();
 
     RootMessageLogger getRootMessageLogger();
 
-    /**
-     * Register any acceptors for this registry
-     * @param bindAddress The address that the acceptor has been bound with
-     * @param acceptor The acceptor in use
-     */
-    void addAcceptor(InetSocketAddress bindAddress, QpidAcceptor acceptor);
-
     public UUID getBrokerId();
 
     Broker getBroker();
@@ -92,33 +74,4 @@ public interface IApplicationRegistry ex
     VirtualHost createVirtualHost(VirtualHostConfiguration vhostConfig) throws Exception;
 
     void initialiseStatisticsReporting();
-
-    Map<InetSocketAddress, QpidAcceptor> getAcceptors();
-
-    void addPortBindingListener(PortBindingListener listener);
-
-    boolean useHTTPManagement();
-
-    int getHTTPManagementPort();
-
-    boolean useHTTPSManagement();
-
-    int getHTTPSManagementPort();
-
-    void addAuthenticationManagerRegistryChangeListener(IAuthenticationManagerRegistry.RegistryChangeListener registryChangeListener);
-
-    public interface PortBindingListener
-    {
-        public void bound(QpidAcceptor acceptor, InetSocketAddress bindAddress);
-        public void unbound(QpidAcceptor acceptor);
-
-    }
-
-    void addGroupManagerChangeListener(GroupManagerChangeListener groupManagerChangeListener);
-
-    public static interface GroupManagerChangeListener
-    {
-        void groupManagerRegistered(GroupManager groupManager);
-        void groupManagerUnregistered(GroupManager groupManager);
-    }
 }

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManagerFactory.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManagerFactory.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManagerFactory.java Thu Nov  1 09:48:52 2012
@@ -19,20 +19,21 @@
  */
 package org.apache.qpid.server.security.auth.manager;
 
-import org.apache.commons.configuration.Configuration;
+import java.util.Map;
+
 import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
 
 public class AnonymousAuthenticationManagerFactory implements AuthenticationManagerFactory
 {
+
     @Override
-    public AuthenticationManager createInstance(Configuration configuration)
+    public AuthenticationManager createInstance(Map<String, Object> attributes)
     {
-        if (configuration.subset("anonymous-auth-manager").isEmpty())
+        if (attributes != null && "anonymous-auth-manager".equals(attributes.get(TYPE)))
         {
-            return null;
+            return new AnonymousAuthenticationManager();
         }
-
-        return new AnonymousAuthenticationManager();
+        return null;
     }
 
 }

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerFactory.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerFactory.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerFactory.java Thu Nov  1 09:48:52 2012
@@ -19,20 +19,20 @@
  */
 package org.apache.qpid.server.security.auth.manager;
 
-import org.apache.commons.configuration.Configuration;
+import java.util.Map;
+
 import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
 
 public class ExternalAuthenticationManagerFactory implements AuthenticationManagerFactory
 {
     @Override
-    public AuthenticationManager createInstance(Configuration configuration)
+    public AuthenticationManager createInstance(Map<String, Object> attributes)
     {
-        if (configuration.subset("external-auth-manager").isEmpty())
+        if (attributes != null && "external-auth-manager".equals(attributes.get(TYPE)))
         {
-            return null;
+            return new ExternalAuthenticationManager();
         }
-
-        return new ExternalAuthenticationManager();
+        return null;
     }
 
 }

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManagerFactory.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManagerFactory.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManagerFactory.java Thu Nov  1 09:48:52 2012
@@ -19,19 +19,20 @@
  */
 package org.apache.qpid.server.security.auth.manager;
 
-import org.apache.commons.configuration.Configuration;
+import java.util.Map;
+
 import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
 
 public class KerberosAuthenticationManagerFactory implements AuthenticationManagerFactory
 {
+
     @Override
-    public AuthenticationManager createInstance(Configuration configuration)
+    public AuthenticationManager createInstance(Map<String, Object> attributes)
     {
-        if (configuration.subset("kerberos-auth-manager").isEmpty())
+        if (attributes != null && "kerberos-auth-manager".equals(attributes.get(TYPE)))
         {
-            return null;
+            return new KerberosAuthenticationManager();
         }
-
-        return new KerberosAuthenticationManager();
+        return null;
     }
 }

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthManagerFactory.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthManagerFactory.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthManagerFactory.java Thu Nov  1 09:48:52 2012
@@ -20,8 +20,8 @@
 package org.apache.qpid.server.security.auth.manager;
 
 import java.io.IOException;
+import java.util.Map;
 
-import org.apache.commons.configuration.Configuration;
 import org.apache.log4j.Logger;
 import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
 import org.apache.qpid.server.security.auth.database.Base64MD5PasswordFilePrincipalDatabase;
@@ -29,30 +29,21 @@ import org.apache.qpid.server.security.a
 import org.apache.qpid.server.security.auth.database.PrincipalDatabase;
 
 /**
- * Factory for {@link PrincipalDatabaseAuthenticationManager} objects configured with either the
- * Plain or Base64MD5 digest {@link PrincipalDatabase} implementation.
+ * Factory for {@link PrincipalDatabaseAuthenticationManager} objects configured
+ * with either the Plain or Base64MD5 digest {@link PrincipalDatabase}
+ * implementation.
  */
 public class PrincipalDatabaseAuthManagerFactory implements AuthenticationManagerFactory
 {
     private static final Logger LOGGER = Logger.getLogger(PrincipalDatabaseAuthManagerFactory.class);
 
-    @Override
-    public AuthenticationManager createInstance(Configuration configuration)
+    private AuthenticationManager createAuthenticationManager(String clazz, String passwordArgumentName, String passwordFile)
     {
-        if(configuration.subset("pd-auth-manager").isEmpty())
-        {
-            return null;
-        }
-
-        String clazz = configuration.getString("pd-auth-manager.principal-database.class");
-        String passwordArgumentName = configuration.getString("pd-auth-manager.principal-database.attributes.attribute.name");
-        String passwordFile = configuration.getString("pd-auth-manager.principal-database.attributes.attribute.value");
-
         PrincipalDatabase principalDatabase = createKnownImplementation(clazz);
         if (principalDatabase == null)
         {
-            LOGGER.warn("Config for pd-auth-manager found but principal-database class specified in config " + clazz +
-                    " not recognised.");
+            LOGGER.warn("Config for pd-auth-manager found but principal-database class specified in config " + clazz
+                    + " not recognised.");
             return null;
         }
 
@@ -89,4 +80,20 @@ public class PrincipalDatabaseAuthManage
             return null;
         }
     }
+
+    @Override
+    public AuthenticationManager createInstance(Map<String, Object> attributes)
+    {
+        if (attributes == null || !"pd-auth-manager".equals(attributes.get(TYPE)))
+        {
+            return null;
+        }
+
+        String clazz = (String) attributes.get("principal-database.class");
+        String passwordArgumentName = (String) attributes.get("principal-database.attributes.attribute.name");
+        String passwordFile = (String) attributes.get("principal-database.attributes.attribute.value");
+
+        return createAuthenticationManager(clazz, passwordArgumentName, passwordFile);
+
+    }
 }

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerFactory.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerFactory.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerFactory.java Thu Nov  1 09:48:52 2012
@@ -19,7 +19,8 @@
  */
 package org.apache.qpid.server.security.auth.manager;
 
-import org.apache.commons.configuration.Configuration;
+import java.util.Map;
+
 import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
 
 public class SimpleLDAPAuthenticationManagerFactory implements AuthenticationManagerFactory
@@ -28,23 +29,33 @@ public class SimpleLDAPAuthenticationMan
     private static final String DEFAULT_LDAP_CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
 
     @Override
-    public AuthenticationManager createInstance(Configuration configuration)
+    public AuthenticationManager createInstance(Map<String, Object> attributes)
     {
-
-        final Configuration subset = configuration.subset("simple-ldap-auth-manager");
-        if(subset.isEmpty())
+        if (attributes == null || !"simple-ldap-auth-manager".equals(attributes.get(TYPE)))
         {
             return null;
         }
+        String providerUrl = (String) attributes.get("provider-url");
+        String providerSearchUrl = (String) attributes.get("provider-search-url");
+        if (providerSearchUrl == null)
+        {
+            providerSearchUrl = providerUrl;
+        }
+        String providerAuthUrl = (String) attributes.get("provider-auth-url");
+        if (providerAuthUrl == null)
+        {
+            providerAuthUrl = providerUrl;
+        }
+        String searchContext = (String) attributes.get("search-context");
+        String searchFilter = (String) attributes.get("search-filter");
+        String ldapContextFactory = (String) attributes.get("ldap-context-factory");
+        if (ldapContextFactory == null)
+        {
+            ldapContextFactory = DEFAULT_LDAP_CONTEXT_FACTORY;
+        }
 
-        String providerUrl = configuration.getString("simple-ldap-auth-manager.provider-url");
-        String providerSearchUrl = configuration.getString("simple-ldap-auth-manager.provider-search-url", providerUrl);
-        String providerAuthUrl = configuration.getString("simple-ldap-auth-manager.provider-auth-url", providerUrl);
-        String searchContext = configuration.getString("simple-ldap-auth-manager.search-context");
-        String searchFilter = configuration.getString("simple-ldap-auth-manager.search-filter");
-        String ldapContextFactory = configuration.getString("simple-ldap-auth-manager.ldap-context-factory", DEFAULT_LDAP_CONTEXT_FACTORY);
-
-        return new SimpleLDAPAuthenticationManager(providerSearchUrl, providerAuthUrl, searchContext, searchFilter, ldapContextFactory);
+        return new SimpleLDAPAuthenticationManager(providerSearchUrl, providerAuthUrl, searchContext, searchFilter,
+                ldapContextFactory);
     }
 
 }

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/FileGroupManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/FileGroupManagerFactory.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/FileGroupManagerFactory.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/FileGroupManagerFactory.java Thu Nov  1 09:48:52 2012
@@ -18,40 +18,34 @@
  */
 package org.apache.qpid.server.security.group;
 
-import org.apache.commons.configuration.Configuration;
+import static org.apache.qpid.server.util.MapValueConverter.getStringAttribute;
+
+import java.util.Map;
+
 import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.lang.StringUtils;
+import org.apache.qpid.server.configuration.IllegalConfigurationException;
+import org.apache.qpid.server.model.GroupProvider;
 import org.apache.qpid.server.plugin.GroupManagerFactory;
 
 public class FileGroupManagerFactory implements GroupManagerFactory
 {
-    private static final String GROUP_FILE_MARKER = "groupFile";
-    private static final String FILE_ATTRIBUTE_VALUE = "file-group-manager.attributes.attribute.value";
-    private static final String FILE_ATTRIBUTE_NAME = "file-group-manager.attributes.attribute.name";
+    static final String FILE_GROUP_MANAGER_TYPE = "file-group-manager";
+    static final String FILE = "file";
 
     @Override
-    public GroupManager createInstance(Configuration configuration)
+    public GroupManager createInstance(Map<String, Object> attributes)
     {
-        if(configuration.subset("file-group-manager").isEmpty())
+        if(!FILE_GROUP_MANAGER_TYPE.equals(getStringAttribute(GroupProvider.TYPE, attributes, null)))
         {
             return null;
         }
 
-        String groupFileArgumentName = configuration.getString(FILE_ATTRIBUTE_NAME);
-        String groupFile = configuration.getString(FILE_ATTRIBUTE_VALUE);
-
-        if (!GROUP_FILE_MARKER.equals(groupFileArgumentName))
+        String groupFile =  getStringAttribute(FILE, attributes, null);
+        if (StringUtils.isBlank(groupFile))
         {
-            throw new RuntimeException("Config for file-group-manager found but " + FILE_ATTRIBUTE_NAME
-                    + " has no value or " + groupFileArgumentName
-                    + " does not equal " + GROUP_FILE_MARKER);
+            throw new IllegalConfigurationException("Path to file containing groups is not specified!");
         }
-
-        if (groupFile == null)
-        {
-            throw new RuntimeException("Config for file-group-manager found but " +  FILE_ATTRIBUTE_VALUE + " has no value."
-                    + " Filename expected.");
-        }
-
         try
         {
             return new FileGroupManager(groupFile);

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupPrincipalAccessor.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupPrincipalAccessor.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupPrincipalAccessor.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupPrincipalAccessor.java Thu Nov  1 09:48:52 2012
@@ -19,27 +19,30 @@
 package org.apache.qpid.server.security.group;
 
 import java.security.Principal;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
+import org.apache.qpid.server.model.GroupProvider;
+import org.apache.qpid.server.model.adapter.GroupProviderAdapter;
+
 
 public class GroupPrincipalAccessor
 {
-    private final List<GroupManager> _groupManagerList;
+    private final Collection<GroupProvider> _groupProviders;
 
-    public GroupPrincipalAccessor(List<GroupManager> groupManagerList)
+    public GroupPrincipalAccessor(Collection<GroupProvider> groupProviders)
     {
-        _groupManagerList = groupManagerList;
+        _groupProviders = groupProviders;
     }
 
     public Set<Principal> getGroupPrincipals(String username)
     {
         Set<Principal> principals = new HashSet<Principal>();
-        for (GroupManager groupManager : _groupManagerList)
+        for (GroupProvider groupProvider : _groupProviders)
         {
-            Set<Principal> groups = groupManager.getGroupPrincipalsForUser(username);
+            Set<Principal> groups = groupProvider.getGroupPrincipalsForUser(username);
             if (groups != null)
             {
                 principals.addAll(groups);

Added: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/AmqpPortAdapter.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/AmqpPortAdapter.java?rev=1404521&view=auto
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/AmqpPortAdapter.java (added)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/AmqpPortAdapter.java Thu Nov  1 09:48:52 2012
@@ -0,0 +1,210 @@
+/*
+ * 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.transport;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.security.GeneralSecurityException;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+
+import javax.net.ssl.SSLContext;
+
+import org.apache.qpid.server.configuration.ServerConfiguration;
+import org.apache.qpid.server.logging.actors.CurrentActor;
+import org.apache.qpid.server.logging.messages.BrokerMessages;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.Protocol;
+import org.apache.qpid.server.model.Transport;
+import org.apache.qpid.server.model.adapter.PortAdapter;
+import org.apache.qpid.server.protocol.AmqpProtocolVersion;
+import org.apache.qpid.server.protocol.MultiVersionProtocolEngineFactory;
+import org.apache.qpid.server.registry.IApplicationRegistry;
+import org.apache.qpid.ssl.SSLContextFactory;
+import org.apache.qpid.transport.NetworkTransportConfiguration;
+import org.apache.qpid.transport.network.IncomingNetworkTransport;
+
+public class AmqpPortAdapter extends PortAdapter
+{
+    private final IApplicationRegistry _appRegistry;
+    private IncomingNetworkTransport _transport;
+
+    public AmqpPortAdapter(UUID id, Broker broker, Map<String, Object> attributes, IApplicationRegistry appRegistry)
+    {
+        super(id, broker, attributes);
+        _appRegistry = appRegistry;
+    }
+
+    @Override
+    protected void onActivate()
+    {
+        Collection<Transport> transports = getTransports();
+        Set<AmqpProtocolVersion> supported = convertFromModelProtocolsToAmqp(getProtocols());
+
+        SSLContext sslContext = null;
+        if (transports.contains(Transport.SSL))
+        {
+            sslContext = createSslContext();
+        }
+
+        AmqpProtocolVersion defaultSupportedProtocolReply = getDefaultAmqpSupportedReply();
+        InetSocketAddress bindingSocketAddress = new InetSocketAddress(getBindingAddress(), getPort());
+
+        final NetworkTransportConfiguration settings = new ServerNetworkTransportConfiguration(
+                bindingSocketAddress, isTcpNoDelay(),
+                getSendBufferSize(), getReceiveBufferSize(),
+                isNeedClientAuth(), isWantClientAuth());
+
+        _transport = org.apache.qpid.transport.network.Transport.getIncomingTransportInstance();
+        final MultiVersionProtocolEngineFactory protocolEngineFactory = new MultiVersionProtocolEngineFactory(
+                _appRegistry, supported, defaultSupportedProtocolReply);
+
+        _transport.accept(settings, protocolEngineFactory, sslContext);
+        CurrentActor.get().message(BrokerMessages.LISTENING(getTransports().toString(), getPort()));
+    }
+
+    @Override
+    protected void onStop()
+    {
+        if (_transport != null)
+        {
+            CurrentActor.get().message(BrokerMessages.SHUTTING_DOWN(getTransports().toString(), getPort()));
+            _transport.close();
+        }
+    }
+
+    private Set<AmqpProtocolVersion> convertFromModelProtocolsToAmqp(Collection<Protocol> modelProtocols)
+    {
+        Set<AmqpProtocolVersion> amqpProtocols = new HashSet<AmqpProtocolVersion>();
+        for (Protocol protocol : modelProtocols)
+        {
+            amqpProtocols.add(protocol.toAmqpProtocolVersion());
+        }
+        return amqpProtocols;
+    }
+
+
+    /** This will be delegated to the KeyStore and TrustStore model objects */
+    private SSLContext createSslContext()
+    {
+        ServerConfiguration configuration = _appRegistry.getConfiguration();
+        final String keystorePath = configuration.getConnectorKeyStorePath();
+        final String keystorePassword = configuration.getConnectorKeyStorePassword();
+        final String keystoreType = configuration.getConnectorKeyStoreType();
+        final String keyManagerFactoryAlgorithm = configuration.getConnectorKeyManagerFactoryAlgorithm();
+        final SSLContext sslContext;
+        try
+        {
+            if(configuration.getConnectorTrustStorePath() != null)
+            {
+                sslContext = SSLContextFactory.buildClientContext(configuration.getConnectorTrustStorePath(),
+                        configuration.getConnectorTrustStorePassword(),
+                        configuration.getConnectorTrustStoreType(),
+                        configuration.getConnectorTrustManagerFactoryAlgorithm(),
+                        keystorePath,
+                        keystorePassword, keystoreType, keyManagerFactoryAlgorithm,
+                        configuration.getCertAlias());
+            }
+            else
+            {
+                sslContext = SSLContextFactory.buildServerContext(keystorePath, keystorePassword, keystoreType, keyManagerFactoryAlgorithm);
+            }
+        }
+        catch (GeneralSecurityException e)
+        {
+            throw new RuntimeException("Unable to create SSLContext for key or trust store", e);
+        }
+        catch (IOException e)
+        {
+            throw new RuntimeException("Unable to create SSLContext - unable to load key/trust store", e);
+        }
+        return sslContext;
+    }
+
+    /** This will be refactored later into AmqpPort model */
+    private AmqpProtocolVersion getDefaultAmqpSupportedReply()
+    {
+        ServerConfiguration configuration = _appRegistry.getConfiguration();
+        return configuration.getDefaultSupportedProtocolReply();
+    }
+
+
+    class ServerNetworkTransportConfiguration implements NetworkTransportConfiguration
+    {
+        private final InetSocketAddress _bindingSocketAddress;
+        private final Boolean _tcpNoDelay;
+        private final Integer _sendBufferSize;
+        private final Integer _receiveBufferSize;
+        private final boolean _needClientAuth;
+        private final boolean _wantClientAuth;
+
+        public ServerNetworkTransportConfiguration(
+                InetSocketAddress bindingSocketAddress, boolean tcpNoDelay,
+                int sendBufferSize, int receiveBufferSize,
+                boolean needClientAuth, boolean wantClientAuth)
+        {
+            _bindingSocketAddress = bindingSocketAddress;
+            _tcpNoDelay = tcpNoDelay;
+            _sendBufferSize = sendBufferSize;
+            _receiveBufferSize = receiveBufferSize;
+            _needClientAuth = needClientAuth;
+            _wantClientAuth = wantClientAuth;
+        }
+
+        @Override
+        public boolean wantClientAuth()
+        {
+            return _wantClientAuth;
+        }
+
+        @Override
+        public boolean needClientAuth()
+        {
+            return _needClientAuth;
+        }
+
+        @Override
+        public Boolean getTcpNoDelay()
+        {
+            return _tcpNoDelay;
+        }
+
+        @Override
+        public Integer getSendBufferSize()
+        {
+            return _sendBufferSize;
+        }
+
+        @Override
+        public Integer getReceiveBufferSize()
+        {
+            return _receiveBufferSize;
+        }
+
+        @Override
+        public InetSocketAddress getAddress()
+        {
+            return _bindingSocketAddress;
+        }
+    };
+}

Added: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/util/MapValueConverter.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/util/MapValueConverter.java?rev=1404521&view=auto
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/util/MapValueConverter.java (added)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/util/MapValueConverter.java Thu Nov  1 09:48:52 2012
@@ -0,0 +1,199 @@
+/*
+ *
+ * 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.util;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+public class MapValueConverter
+{
+
+    public static String getStringAttribute(String name, Map<String,Object> attributes, String defaultVal)
+    {
+        final Object value = attributes.get(name);
+        return value == null ? defaultVal : String.valueOf(value);
+    }
+
+    public static String getStringAttribute(String name, Map<String, Object> attributes)
+    {
+        assertMandatoryAttribute(name, attributes);
+        return getStringAttribute(name, attributes, null);
+    }
+
+    private static void assertMandatoryAttribute(String name, Map<String, Object> attributes)
+    {
+        if (!attributes.containsKey(name))
+        {
+            throw new IllegalArgumentException("Value for attribute " + name + " is not found");
+        }
+    }
+
+    public static Map<String,Object> getMapAttribute(String name, Map<String,Object> attributes, Map<String,Object> defaultVal)
+    {
+        final Object value = attributes.get(name);
+        if(value == null)
+        {
+            return defaultVal;
+        }
+        else if(value instanceof Map)
+        {
+            @SuppressWarnings("unchecked")
+            Map<String,Object> retVal = (Map<String,Object>) value;
+            return retVal;
+        }
+        else
+        {
+            throw new IllegalArgumentException("Value for attribute " + name + " is not of required type Map");
+        }
+    }
+
+
+    @SuppressWarnings({ "unchecked", "rawtypes" })
+    public static <E extends Enum> E getEnumAttribute(Class<E> clazz, String name, Map<String,Object> attributes, E defaultVal)
+    {
+        Object obj = attributes.get(name);
+        if(obj == null)
+        {
+            return defaultVal;
+        }
+        else if(clazz.isInstance(obj))
+        {
+            return (E) obj;
+        }
+        else if(obj instanceof String)
+        {
+            return (E) Enum.valueOf(clazz, (String)obj);
+        }
+        else
+        {
+            throw new IllegalArgumentException("Value for attribute " + name + " is not of required type " + clazz.getSimpleName());
+        }
+    }
+
+    public static <E extends Enum<?>> E getEnumAttribute(Class<E> clazz, String name, Map<String,Object> attributes)
+    {
+        assertMandatoryAttribute(name, attributes);
+        return getEnumAttribute(clazz, name, attributes, null);
+    }
+
+    public static Boolean getBooleanAttribute(String name, Map<String,Object> attributes, Boolean defaultValue)
+    {
+        Object obj = attributes.get(name);
+        if(obj == null)
+        {
+            return defaultValue;
+        }
+        else if(obj instanceof Boolean)
+        {
+            return (Boolean) obj;
+        }
+        else if(obj instanceof String)
+        {
+            return Boolean.parseBoolean((String) obj);
+        }
+        else
+        {
+            throw new IllegalArgumentException("Value for attribute " + name + " is not of required type Boolean");
+        }
+    }
+
+
+    public static boolean getBooleanAttribute(String name, Map<String, Object> attributes)
+    {
+        assertMandatoryAttribute(name, attributes);
+        return getBooleanAttribute(name, attributes, null);
+    }
+
+    public static Integer getIntegerAttribute(String name, Map<String,Object> attributes, Integer defaultValue)
+    {
+        Object obj = attributes.get(name);
+        if(obj == null)
+        {
+            return defaultValue;
+        }
+        else if(obj instanceof Number)
+        {
+            return ((Number) obj).intValue();
+        }
+        else if(obj instanceof String)
+        {
+            return Integer.valueOf((String) obj);
+        }
+        else
+        {
+            throw new IllegalArgumentException("Value for attribute " + name + " is not of required type Integer");
+        }
+    }
+
+    public static Integer getIntegerAttribute(String name, Map<String,Object> attributes)
+    {
+        assertMandatoryAttribute(name, attributes);
+        return getIntegerAttribute(name, attributes, null);
+    }
+
+    public static Long getLongAttribute(String name, Map<String,Object> attributes, Long defaultValue)
+    {
+        Object obj = attributes.get(name);
+        if(obj == null)
+        {
+            return defaultValue;
+        }
+        else if(obj instanceof Number)
+        {
+            return ((Number) obj).longValue();
+        }
+        else if(obj instanceof String)
+        {
+            return Long.valueOf((String) obj);
+        }
+        else
+        {
+            throw new IllegalArgumentException("Value for attribute " + name + " is not of required type Long");
+        }
+    }
+
+    public static <T> Set<T> getSetAttribute(String name, Map<String,Object> attributes)
+    {
+        assertMandatoryAttribute(name, attributes);
+        return getSetAttribute(name, attributes, Collections.<T>emptySet());
+    }
+
+    @SuppressWarnings("unchecked")
+    public static <T> Set<T> getSetAttribute(String name, Map<String,Object> attributes, Set<T> defaultValue)
+    {
+        Object obj = attributes.get(name);
+        if(obj == null)
+        {
+            return defaultValue;
+        }
+        else if(obj instanceof Set)
+        {
+            return (Set<T>) obj;
+        }
+        else
+        {
+            throw new IllegalArgumentException("Value for attribute " + name + " is not of required type Set");
+        }
+    }
+
+
+}

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java Thu Nov  1 09:48:52 2012
@@ -58,8 +58,6 @@ public interface VirtualHost extends Dur
 
     void close();
 
-    UUID getBrokerId();
-
     UUID getId();
 
     void scheduleHouseKeepingTask(long period, HouseKeepingTask task);
@@ -74,7 +72,7 @@ public interface VirtualHost extends Dur
 
     int getHouseKeepingActiveCount();
 
-    IApplicationRegistry getApplicationRegistry();
+    VirtualHostRegistry getVirtualHostRegistry();
 
     BindingFactory getBindingFactory();
 

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java Thu Nov  1 09:48:52 2012
@@ -58,6 +58,7 @@ import org.apache.qpid.server.queue.Queu
 import org.apache.qpid.server.registry.IApplicationRegistry;
 import org.apache.qpid.server.security.SecurityManager;
 import org.apache.qpid.server.stats.StatisticsCounter;
+import org.apache.qpid.server.stats.StatisticsGatherer;
 import org.apache.qpid.server.store.Event;
 import org.apache.qpid.server.store.EventListener;
 import org.apache.qpid.server.store.HAMessageStore;
@@ -79,7 +80,9 @@ public class VirtualHostImpl implements 
 
     private final ScheduledThreadPoolExecutor _houseKeepingTasks;
 
-    private final IApplicationRegistry _appRegistry;
+    private final VirtualHostRegistry _virtualHostRegistry;
+
+    private final StatisticsGatherer _statisticsGatherer;
 
     private final SecurityManager _securityManager;
 
@@ -106,7 +109,7 @@ public class VirtualHostImpl implements 
     private final Map<String, LinkRegistry> _linkRegistry = new HashMap<String, LinkRegistry>();
     private boolean _blocked;
 
-    public VirtualHostImpl(IApplicationRegistry appRegistry, VirtualHostConfiguration hostConfig) throws Exception
+    public VirtualHostImpl(VirtualHostRegistry virtualHostRegistry, StatisticsGatherer statisticsGatherer, SecurityManager parentSecurityManager, VirtualHostConfiguration hostConfig) throws Exception
     {
         if (hostConfig == null)
         {
@@ -118,7 +121,8 @@ public class VirtualHostImpl implements 
             throw new IllegalArgumentException("Illegal name (" + hostConfig.getName() + ") for virtualhost.");
         }
 
-        _appRegistry = appRegistry;
+        _virtualHostRegistry = virtualHostRegistry;
+        _statisticsGatherer = statisticsGatherer;
         _vhostConfig = hostConfig;
         _name = _vhostConfig.getName();
         _dtxRegistry = new DtxRegistry();
@@ -127,7 +131,7 @@ public class VirtualHostImpl implements 
 
         CurrentActor.get().message(VirtualHostMessages.CREATED(_name));
 
-        _securityManager = new SecurityManager(_appRegistry.getSecurityManager(), _vhostConfig.getConfig());
+        _securityManager = new SecurityManager(parentSecurityManager, _vhostConfig.getConfig());
 
         _connectionRegistry = new ConnectionRegistry();
         _connectionRegistry.addRegistryChangeListener(this);
@@ -461,14 +465,9 @@ public class VirtualHostImpl implements 
         CurrentActor.get().message(VirtualHostMessages.CLOSED());
     }
 
-    public UUID getBrokerId()
-    {
-        return _appRegistry.getBrokerId();
-    }
-
-    public IApplicationRegistry getApplicationRegistry()
+    public VirtualHostRegistry getVirtualHostRegistry()
     {
-        return _appRegistry;
+        return _virtualHostRegistry;
     }
 
     public BindingFactory getBindingFactory()
@@ -480,14 +479,14 @@ public class VirtualHostImpl implements 
     {
         _messagesDelivered.registerEvent(1L);
         _dataDelivered.registerEvent(messageSize);
-        _appRegistry.registerMessageDelivered(messageSize);
+        _statisticsGatherer.registerMessageDelivered(messageSize);
     }
 
     public void registerMessageReceived(long messageSize, long timestamp)
     {
         _messagesReceived.registerEvent(1L, timestamp);
         _dataReceived.registerEvent(messageSize, timestamp);
-        _appRegistry.registerMessageReceived(messageSize, timestamp);
+        _statisticsGatherer.registerMessageReceived(messageSize, timestamp);
     }
 
     public StatisticsCounter getMessageReceiptStatistics()

Modified: qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostRegistry.java?rev=1404521&r1=1404520&r2=1404521&view=diff
==============================================================================
--- qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostRegistry.java (original)
+++ qpid/branches/java-broker-config-qpid-4390/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostRegistry.java Thu Nov  1 09:48:52 2012
@@ -21,7 +21,6 @@
 package org.apache.qpid.server.virtualhost;
 
 import org.apache.qpid.common.Closeable;
-import org.apache.qpid.server.exchange.ExchangeRegistry;
 import org.apache.qpid.server.registry.ApplicationRegistry;
 
 import java.util.ArrayList;
@@ -38,40 +37,25 @@ public class VirtualHostRegistry impleme
 
     private String _defaultVirtualHostName;
     private ApplicationRegistry _applicationRegistry;
-    private final Collection<RegistryChangeListener> _listeners =
-            Collections.synchronizedCollection(new ArrayList<RegistryChangeListener>());
+
 
     public VirtualHostRegistry(ApplicationRegistry applicationRegistry)
     {
         _applicationRegistry = applicationRegistry;
     }
 
-    public synchronized void registerVirtualHost(VirtualHost host) throws Exception
+    public synchronized void registerVirtualHost(VirtualHost host)
     {
         if(_registry.containsKey(host.getName()))
         {
-            throw new Exception("Virtual Host with name " + host.getName() + " already registered.");
+            throw new IllegalArgumentException("Virtual Host with name " + host.getName() + " already registered.");
         }
         _registry.put(host.getName(),host);
-        synchronized (_listeners)
-        {
-            for(RegistryChangeListener listener : _listeners)
-            {
-                listener.virtualHostRegistered(host);
-            }
-        }
     }
-    
+
     public synchronized void unregisterVirtualHost(VirtualHost host)
     {
         _registry.remove(host.getName());
-        synchronized (_listeners)
-        {
-            for(RegistryChangeListener listener : _listeners)
-            {
-                listener.virtualHostUnregistered(host);
-            }
-        }
     }
 
     public VirtualHost getVirtualHost(String name)
@@ -116,19 +100,6 @@ public class VirtualHostRegistry impleme
         {
             virtualHost.close();
         }
-
-    }
-
-    public static interface RegistryChangeListener
-    {
-        void virtualHostRegistered(VirtualHost virtualHost);
-        void virtualHostUnregistered(VirtualHost virtualHost);
-
-    }
-
-    public void addRegistryChangeListener(RegistryChangeListener listener)
-    {
-        _listeners.add(listener);
     }
 
 }



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