You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2015/01/27 16:00:16 UTC

svn commit: r1655057 [3/8] - in /qpid/branches/QPID-6262-JavaBrokerNIO: ./ qpid/ qpid/cpp/examples/messaging/ qpid/cpp/src/ qpid/cpp/src/qpid/amqp_0_10/ qpid/cpp/src/qpid/broker/ qpid/cpp/src/qpid/broker/amqp/ qpid/cpp/src/qpid/client/amqp0_10/ qpid/cp...

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBSystemConfigImpl.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBSystemConfigImpl.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBSystemConfigImpl.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBSystemConfigImpl.java Tue Jan 27 15:00:13 2015
@@ -20,7 +20,8 @@
  */
 package org.apache.qpid.server.store.berkeleydb;
 
-import org.apache.qpid.server.BrokerOptions;
+import java.util.Map;
+
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
 import org.apache.qpid.server.logging.EventLogger;
 import org.apache.qpid.server.logging.LogRecorder;
@@ -49,10 +50,10 @@ public class BDBSystemConfigImpl extends
     public BDBSystemConfigImpl(final TaskExecutor taskExecutor,
                                final EventLogger eventLogger,
                                final LogRecorder logRecorder,
-                               final BrokerOptions brokerOptions,
+                               final Map<String,Object> attributes,
                                final BrokerShutdownProvider brokerShutdownProvider)
     {
-        super(taskExecutor, eventLogger, logRecorder, brokerOptions, brokerShutdownProvider);
+        super(taskExecutor, eventLogger, logRecorder, attributes, brokerShutdownProvider);
     }
 
     @Override

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/CoalescingCommiter.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/CoalescingCommiter.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/CoalescingCommiter.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/CoalescingCommiter.java Tue Jan 27 15:00:13 2015
@@ -50,14 +50,17 @@ public class CoalescingCommiter implemen
     public void stop()
     {
         _commitThread.close();
-        try
+        if (Thread.currentThread() != _commitThread)
         {
-            _commitThread.join();
-        }
-        catch (InterruptedException ie)
-        {
-            Thread.currentThread().interrupt();
-            throw new RuntimeException("Commit thread has not shutdown", ie);
+            try
+            {
+                _commitThread.join();
+            }
+            catch (InterruptedException ie)
+            {
+                Thread.currentThread().interrupt();
+                throw new RuntimeException("Commit thread has not shutdown", ie);
+            }
         }
     }
 

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java Tue Jan 27 15:00:13 2015
@@ -392,6 +392,13 @@ public class ReplicatedEnvironmentFacade
                 }
             }
 
+            if (dbe instanceof UnknownMasterException)
+            {
+                // when Master transits into Unknown state ( for example, due to mastership transfer)
+                // we need to abort any ongoing je operation without halting the Broker or VHN/VH
+                return new ConnectionScopedRuntimeException(String.format("Environment '%s' cannot finish JE operation because master is unknown", getNodeName()), dbe);
+            }
+
             boolean restart = (noMajority || dbe instanceof RestartRequiredException);
             if (restart)
             {

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHost.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHost.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHost.java Tue Jan 27 15:00:13 2015
@@ -19,456 +19,17 @@
 
 package org.apache.qpid.server.virtualhost.berkeleydb;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.ScheduledFuture;
-
-import org.apache.qpid.server.connection.IConnectionRegistry;
 import org.apache.qpid.server.exchange.ExchangeImpl;
-import org.apache.qpid.server.logging.EventLogger;
-import org.apache.qpid.server.message.MessageDestination;
-import org.apache.qpid.server.message.MessageSource;
-import org.apache.qpid.server.model.AbstractConfiguredObject;
-import org.apache.qpid.server.model.BrokerModel;
-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.ManagedAttributeField;
-import org.apache.qpid.server.model.ManagedObject;
-import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
-import org.apache.qpid.server.model.Queue;
-import org.apache.qpid.server.model.State;
-import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.model.VirtualHostAlias;
-import org.apache.qpid.server.model.VirtualHostNode;
-import org.apache.qpid.server.protocol.LinkRegistry;
 import org.apache.qpid.server.queue.AMQQueue;
-import org.apache.qpid.server.stats.StatisticsCounter;
-import org.apache.qpid.server.store.DurableConfigurationStore;
-import org.apache.qpid.server.store.MessageStore;
-import org.apache.qpid.server.txn.DtxRegistry;
-import org.apache.qpid.server.virtualhost.ExchangeIsAlternateException;
-import org.apache.qpid.server.virtualhost.HouseKeepingTask;
-import org.apache.qpid.server.virtualhost.RequiredExchangeException;
+import org.apache.qpid.server.virtualhost.NonStandardVirtualHost;
 import org.apache.qpid.server.virtualhost.VirtualHostImpl;
 
 /**
   Object that represents the VirtualHost whilst the VirtualHostNode is in the replica role.  The
   real virtualhost will be elsewhere in the group.
  */
-@ManagedObject( category = false, type = "BDB_HA_REPLICA", register = false )
-public class BDBHAReplicaVirtualHost extends AbstractConfiguredObject<BDBHAReplicaVirtualHost>
-    implements VirtualHostImpl<BDBHAReplicaVirtualHost, AMQQueue<?>, ExchangeImpl<?>>,
-               VirtualHost<BDBHAReplicaVirtualHost,AMQQueue<?>, ExchangeImpl<?>>
+public interface BDBHAReplicaVirtualHost<X extends BDBHAReplicaVirtualHost<X>>
+        extends VirtualHostImpl<X, AMQQueue<?>, ExchangeImpl<?>>,
+                NonStandardVirtualHost<X,AMQQueue<?>,ExchangeImpl<?>>
 {
-    private final StatisticsCounter _messagesDelivered, _dataDelivered, _messagesReceived, _dataReceived;
-
-    @ManagedAttributeField
-    private boolean _queue_deadLetterQueueEnabled;
-
-    @ManagedAttributeField
-    private long _housekeepingCheckPeriod;
-
-    @ManagedAttributeField
-    private long _storeTransactionIdleTimeoutClose;
-
-    @ManagedAttributeField
-    private long _storeTransactionIdleTimeoutWarn;
-
-    @ManagedAttributeField
-    private long _storeTransactionOpenTimeoutClose;
-
-    @ManagedAttributeField
-    private long _storeTransactionOpenTimeoutWarn;
-    @ManagedAttributeField
-    private int _housekeepingThreadCount;
-
-    @ManagedObjectFactoryConstructor
-    public BDBHAReplicaVirtualHost(final Map<String, Object> attributes, VirtualHostNode<?> virtualHostNode)
-    {
-        super(parentsMap(virtualHostNode), attributes);
-
-        _messagesDelivered = new StatisticsCounter("messages-delivered-" + getName());
-        _dataDelivered = new StatisticsCounter("bytes-delivered-" + getName());
-        _messagesReceived = new StatisticsCounter("messages-received-" + getName());
-        _dataReceived = new StatisticsCounter("bytes-received-" + getName());
-        setState(State.UNAVAILABLE);
-    }
-
-    @Override
-    protected void validateChange(final ConfiguredObject<?> proxyForValidation, final Set<String> changedAttributes)
-    {
-        super.validateChange(proxyForValidation, changedAttributes);
-
-        throwUnsupportedForReplica();
-    }
-
-    @Override
-    public String getModelVersion()
-    {
-        return BrokerModel.MODEL_VERSION;
-    }
-
-    @Override
-    protected <C extends ConfiguredObject> C addChild(final Class<C> childClass,
-                                                      final Map<String, Object> attributes,
-                                                      final ConfiguredObject... otherParents)
-    {
-        throwUnsupportedForReplica();
-        return null;
-    }
-
-    @Override
-    public ExchangeImpl createExchange(final Map<String, Object> attributes)
-    {
-        throwUnsupportedForReplica();
-        return null;
-    }
-
-    @Override
-    public void removeExchange(final ExchangeImpl<?> exchange, final boolean force)
-            throws ExchangeIsAlternateException, RequiredExchangeException
-    {
-        throwUnsupportedForReplica();
-    }
-
-    @Override
-    public MessageDestination getMessageDestination(final String name)
-    {
-        return null;
-    }
-
-    @Override
-    public ExchangeImpl<?> getExchange(final String name)
-    {
-        return null;
-    }
-
-    @Override
-    public AMQQueue<?> createQueue(final Map<String, Object> attributes)
-    {
-        throwUnsupportedForReplica();
-        return null;
-    }
-
-    @Override
-    public void executeTransaction(final TransactionalOperation op)
-    {
-        throwUnsupportedForReplica();
-    }
-
-    @Override
-    public Collection<String> getExchangeTypeNames()
-    {
-        return getObjectFactory().getSupportedTypes(Exchange.class);
-    }
-
-    @Override
-    public Collection<String> getSupportedExchangeTypes()
-    {
-        return getObjectFactory().getSupportedTypes(Exchange.class);
-    }
-
-    @Override
-    public Collection<String> getSupportedQueueTypes()
-    {
-        return getObjectFactory().getSupportedTypes(Queue.class);
-    }
-
-    @Override
-    public boolean isQueue_deadLetterQueueEnabled()
-    {
-        return false;
-    }
-
-    @Override
-    public long getHousekeepingCheckPeriod()
-    {
-        return 0;
-    }
-
-    @Override
-    public long getStoreTransactionIdleTimeoutClose()
-    {
-        return 0;
-    }
-
-    @Override
-    public long getStoreTransactionIdleTimeoutWarn()
-    {
-        return 0;
-    }
-
-    @Override
-    public long getStoreTransactionOpenTimeoutClose()
-    {
-        return 0;
-    }
-
-    @Override
-    public long getStoreTransactionOpenTimeoutWarn()
-    {
-        return 0;
-    }
-
-    @Override
-    public int getHousekeepingThreadCount()
-    {
-        return 0;
-    }
-
-    @Override
-    public long getQueueCount()
-    {
-        return 0;
-    }
-
-    @Override
-    public long getExchangeCount()
-    {
-        return 0;
-    }
-
-    @Override
-    public long getConnectionCount()
-    {
-        return 0;
-    }
-
-    @Override
-    public long getBytesIn()
-    {
-        return 0;
-    }
-
-    @Override
-    public long getBytesOut()
-    {
-        return 0;
-    }
-
-    @Override
-    public long getMessagesIn()
-    {
-        return 0;
-    }
-
-    @Override
-    public long getMessagesOut()
-    {
-        return 0;
-    }
-
-    @Override
-    public Collection<VirtualHostAlias> getAliases()
-    {
-        return Collections.emptyList();
-    }
-
-    @Override
-    public Collection<Connection> getConnections()
-    {
-        return Collections.emptyList();
-    }
-
-    @Override
-    public IConnectionRegistry getConnectionRegistry()
-    {
-        return null;
-    }
-
-    @Override
-    public AMQQueue<?> getQueue(final String name)
-    {
-        return null;
-    }
-
-    @Override
-    public MessageSource getMessageSource(final String name)
-    {
-        return null;
-    }
-
-    @Override
-    public AMQQueue<?> getQueue(final UUID id)
-    {
-        return null;
-    }
-
-    @Override
-    public Collection<AMQQueue<?>> getQueues()
-    {
-        return Collections.emptyList();
-    }
-
-    @Override
-    public int removeQueue(final AMQQueue<?> queue)
-    {
-        throwUnsupportedForReplica();
-        return 0;
-    }
-
-    @Override
-    public Collection<ExchangeImpl<?>> getExchanges()
-    {
-        return Collections.emptyList();
-    }
-
-    @Override
-    public DurableConfigurationStore getDurableConfigurationStore()
-    {
-        return null;
-    }
-
-    @Override
-    public ExchangeImpl<?> getExchange(final UUID id)
-    {
-        return null;
-    }
-
-    @Override
-    public MessageDestination getDefaultDestination()
-    {
-        return null;
-    }
-
-    @Override
-    public MessageStore getMessageStore()
-    {
-        return null;
-    }
-
-    @Override
-    public void setTargetSize(final long targetSize)
-    {
-
-    }
-
-    @Override
-    public long getTotalQueueDepthBytes()
-    {
-        return 0l;
-    }
-
-    @Override
-    public org.apache.qpid.server.security.SecurityManager getSecurityManager()
-    {
-        return null;
-    }
-
-    @Override
-    public void scheduleHouseKeepingTask(final long period, final HouseKeepingTask task)
-    {
-    }
-
-    @Override
-    public long getHouseKeepingTaskCount()
-    {
-        return 0;
-    }
-
-    @Override
-    public long getHouseKeepingCompletedTaskCount()
-    {
-        return 0;
-    }
-
-    @Override
-    public int getHouseKeepingPoolSize()
-    {
-        return 0;
-    }
-
-    @Override
-    public void setHouseKeepingPoolSize(final int newSize)
-    {
-    }
-
-    @Override
-    public int getHouseKeepingActiveCount()
-    {
-        return 0;
-    }
-
-    @Override
-    public DtxRegistry getDtxRegistry()
-    {
-        return null;
-    }
-
-    @Override
-    public LinkRegistry getLinkRegistry(final String remoteContainerId)
-    {
-        return null;
-    }
-
-    @Override
-    public ScheduledFuture<?> scheduleTask(final long delay, final Runnable timeoutTask)
-    {
-        throwUnsupportedForReplica();
-        return null;
-    }
-
-    @Override
-    public boolean getDefaultDeadLetterQueueEnabled()
-    {
-        return false;
-    }
-
-    @Override
-    public EventLogger getEventLogger()
-    {
-        return null;
-    }
-
-    @Override
-    public void registerMessageReceived(final long messageSize, final long timestamp)
-    {
-        throwUnsupportedForReplica();
-    }
-
-    @Override
-    public void registerMessageDelivered(final long messageSize)
-    {
-        throwUnsupportedForReplica();
-    }
-
-    @Override
-    public StatisticsCounter getMessageDeliveryStatistics()
-    {
-        return _messagesDelivered;
-    }
-
-    @Override
-    public StatisticsCounter getMessageReceiptStatistics()
-    {
-        return _messagesReceived;
-    }
-
-    @Override
-    public StatisticsCounter getDataDeliveryStatistics()
-    {
-        return _dataDelivered;
-    }
-
-    @Override
-    public StatisticsCounter getDataReceiptStatistics()
-    {
-        return _dataReceived;
-    }
-
-    @Override
-    public void resetStatistics()
-    {
-    }
-
-    private void throwUnsupportedForReplica()
-    {
-        throw new IllegalStateException("The virtual host state of " + getState()
-                                        + " does not permit this operation.");
-    }
-
 }

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAVirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAVirtualHost.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAVirtualHost.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAVirtualHost.java Tue Jan 27 15:00:13 2015
@@ -20,16 +20,18 @@
  */
 package org.apache.qpid.server.virtualhost.berkeleydb;
 
-import java.util.List;
-
 import org.apache.qpid.server.exchange.ExchangeImpl;
 import org.apache.qpid.server.model.DerivedAttribute;
 import org.apache.qpid.server.model.ManagedAttribute;
 import org.apache.qpid.server.queue.AMQQueue;
 import org.apache.qpid.server.store.SizeMonitoringSettings;
+import org.apache.qpid.server.virtualhost.NonStandardVirtualHost;
 import org.apache.qpid.server.virtualhost.VirtualHostImpl;
 
-public interface BDBHAVirtualHost<X extends BDBHAVirtualHost<X>> extends VirtualHostImpl<X, AMQQueue<?>, ExchangeImpl<?>>, SizeMonitoringSettings
+public interface BDBHAVirtualHost<X extends BDBHAVirtualHost<X>>
+        extends VirtualHostImpl<X, AMQQueue<?>, ExchangeImpl<?>>,
+                SizeMonitoringSettings,
+                NonStandardVirtualHost<X,AMQQueue<?>,ExchangeImpl<?>>
 {
     String REMOTE_TRANSACTION_SYNCHRONIZATION_POLICY = "remoteTransactionSynchronizationPolicy";
     String LOCAL_TRANSACTION_SYNCHRONIZATION_POLICY = "localTransactionSynchronizationPolicy";

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java Tue Jan 27 15:00:13 2015
@@ -21,15 +21,14 @@
 package org.apache.qpid.server.virtualhostnode.berkeleydb;
 
 import java.io.File;
-import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.nio.file.Files;
 import java.security.PrivilegedAction;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
@@ -62,7 +61,6 @@ import org.apache.qpid.server.logging.me
 import org.apache.qpid.server.logging.messages.HighAvailabilityMessages;
 import org.apache.qpid.server.logging.subjects.BDBHAVirtualHostNodeLogSubject;
 import org.apache.qpid.server.logging.subjects.GroupLogSubject;
-import org.apache.qpid.server.model.AbstractConfiguredObject;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.BrokerModel;
 import org.apache.qpid.server.model.ConfiguredObject;
@@ -88,7 +86,8 @@ import org.apache.qpid.server.util.Serve
 import org.apache.qpid.server.virtualhost.berkeleydb.BDBHAVirtualHostImpl;
 import org.apache.qpid.server.virtualhostnode.AbstractVirtualHostNode;
 
-@ManagedObject( category = false, type = BDBHAVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE )
+@ManagedObject( category = false, type = BDBHAVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE,
+        validChildTypes = "org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNodeImpl#getSupportedChildTypes()" )
 public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtualHostNodeImpl> implements
         BDBHAVirtualHostNode<BDBHAVirtualHostNodeImpl>
 {
@@ -637,12 +636,6 @@ public class BDBHAVirtualHostNodeImpl ex
         createReplicaVirtualHost();
     }
 
-
-    private void onDetached()
-    {
-        closeVirtualHostIfExist();
-    }
-
     private void createReplicaVirtualHost()
     {
         try
@@ -694,9 +687,10 @@ public class BDBHAVirtualHostNodeImpl ex
                         onReplica();
                         break;
                     case DETACHED:
-                        onDetached();
+                        closeVirtualHostIfExist();
                         break;
                     case UNKNOWN:
+                        closeVirtualHostIfExist();
                         break;
                     default:
                         LOGGER.error("Unexpected state change: " + state);
@@ -1205,4 +1199,8 @@ public class BDBHAVirtualHostNodeImpl ex
         abstract void perform();
     }
 
+    public static Map<String, Collection<String>> getSupportedChildTypes()
+    {
+        return Collections.singletonMap(VirtualHost.class.getSimpleName(), (Collection<String>) Collections.singleton(BDBHAVirtualHostImpl.VIRTUAL_HOST_TYPE));
+    }
 }

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java Tue Jan 27 15:00:13 2015
@@ -20,6 +20,8 @@
  */
 package org.apache.qpid.server.virtualhostnode.berkeleydb;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
 
 import org.apache.qpid.server.logging.messages.ConfigStoreMessages;
@@ -32,7 +34,8 @@ import org.apache.qpid.server.store.Dura
 import org.apache.qpid.server.store.berkeleydb.BDBConfigurationStore;
 import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode;
 
-@ManagedObject(type = BDBVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE, category = false)
+@ManagedObject(type = BDBVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE, category = false,
+               validChildTypes = "org.apache.qpid.server.virtualhostnode.berkeleydb.BDBVirtualHostNodeImpl#getSupportedChildTypes()")
 public class BDBVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<BDBVirtualHostNodeImpl> implements BDBVirtualHostNode<BDBVirtualHostNodeImpl>
 {
     public static final String VIRTUAL_HOST_NODE_TYPE = "BDB";
@@ -70,4 +73,8 @@ public class BDBVirtualHostNodeImpl exte
         return getClass().getSimpleName() + " [id=" + getId() + ", name=" + getName() + ", storePath=" + getStorePath() + "]";
     }
 
+    public static Map<String, Collection<String>> getSupportedChildTypes()
+    {
+        return Collections.singletonMap(VirtualHost.class.getSimpleName(), getSupportedVirtualHostTypes(true));
+    }
 }

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/add/existinggroup/add.js
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/add/existinggroup/add.js?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/add/existinggroup/add.js (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/add/existinggroup/add.js Tue Jan 27 15:00:13 2015
@@ -39,6 +39,9 @@ define(["dojo/_base/xhr",
             registry.byId("addVirtualHostNode.helperNodeName").set("regExpGen", util.nameOrContextVarRegexp);
             registry.byId("addVirtualHostNode.helperAddress").set("regExpGen", util.nodeAddressOrContextVarRegexp);
             registry.byId("addVirtualHostNode.address").set("regExpGen", util.nodeAddressOrContextVarRegexp);
+
+            dom.byId("addVirtualHostNode.uploadFields").style.display = "none";
+
         }
     };
   }

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/add/newgroup/add.js
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/add/newgroup/add.js?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/add/newgroup/add.js (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/add/newgroup/add.js Tue Jan 27 15:00:13 2015
@@ -70,6 +70,9 @@ define(["dojo/_base/xhr",
           this.addVirtualHostNodePermittedNodes = registry.byId("addVirtualHostNode.permittedNodes");
 
           registry.byId("addVirtualHostNode.groupName").set("regExpGen", util.nameOrContextVarRegexp);
+
+          dom.byId("addVirtualHostNode.uploadFields").style.display = "block";
+
         },
         _updatePermittedNodesJson: function ()
         {

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java Tue Jan 27 15:00:13 2015
@@ -803,7 +803,7 @@ public class ReplicatedEnvironmentFacade
                 _replicaRolledback.countDown();
             }
         });
-        assertTrue("Node 1 did not go into desired state",
+        assertTrue("Node 1 did not go into desired state and remained in state " + node1.getNodeState(),
                    node1StateChangeListener.awaitForStateChange(LISTENER_TIMEOUT, TimeUnit.SECONDS));
         assertTrue("Node 1 did not experience rollback within timeout",
                    _replicaRolledback.await(LISTENER_TIMEOUT, TimeUnit.SECONDS));

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/pom.xml
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/pom.xml?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/pom.xml (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/pom.xml Tue Jan 27 15:00:13 2015
@@ -80,6 +80,16 @@
   </dependencies>
 
   <build>
+
+    <resources>
+      <resource>
+          <directory>src/main/resources</directory>
+      </resource>
+      <resource>
+          <directory>${test.resource.directory}/test-profiles/test_resources</directory>
+      </resource>
+    </resources>
+
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBBackupTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBBackupTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBBackupTest.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBBackupTest.java Tue Jan 27 15:00:13 2015
@@ -31,6 +31,7 @@ import javax.jms.MessageConsumer;
 import javax.jms.Session;
 
 import org.apache.log4j.Logger;
+import org.apache.qpid.server.configuration.BrokerProperties;
 import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBVirtualHostNode;
 import org.apache.qpid.test.utils.Piper;
@@ -151,15 +152,15 @@ public class BDBBackupTest extends QpidB
         Process backupProcess = null;
         try
         {
-            String qpidHome = System.getProperty(QPID_HOME);
+            String qpidHome = QPID_HOME;
             ProcessBuilder pb = new ProcessBuilder(qpidHome + BACKUP_SCRIPT, "-todir", backupToDir.getAbsolutePath(), "-fromdir", backupFromDir.getAbsolutePath());
             pb.redirectErrorStream(true);
             Map<String, String> env = pb.environment();
-            env.put(QPID_HOME, qpidHome);
+            env.put(BrokerProperties.PROPERTY_QPID_HOME, qpidHome);
 
             LOGGER.debug("Backup command is " + pb.command());
             backupProcess = pb.start();
-            Piper piper = new Piper(backupProcess.getInputStream(), _testcaseOutputStream, null, BACKUP_COMPLETE_MESSAGE);
+            Piper piper = new Piper(backupProcess.getInputStream(),  null, BACKUP_COMPLETE_MESSAGE, "BACKUP", "");
             piper.start();
             piper.await(2, TimeUnit.SECONDS);
             backupProcess.waitFor();

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupCreator.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupCreator.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupCreator.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupCreator.java Tue Jan 27 15:00:13 2015
@@ -73,9 +73,9 @@ public class GroupCreator
     private static final String MANY_BROKER_URL_FORMAT = "amqp://guest:guest@/%s?brokerlist='%s'&failover='roundrobin?cyclecount='%d''";
     private static final String BROKER_PORTION_FORMAT = "tcp://localhost:%d?connectdelay='%d',retries='%d'";
 
-    private static final int FAILOVER_CYCLECOUNT = 20;
+    private static final int FAILOVER_CYCLECOUNT = 40;
     private static final int FAILOVER_RETRIES = 0;
-    private static final int FAILOVER_CONNECTDELAY = 500;
+    private static final int FAILOVER_CONNECTDELAY = 250;
 
     private static final String SINGLE_BROKER_URL_WITH_RETRY_FORMAT = "amqp://guest:guest@/%s?brokerlist='tcp://localhost:%d?connectdelay='%d',retries='%d''";
     private static final String SINGLE_BROKER_URL_WITHOUT_RETRY_FORMAT = "amqp://guest:guest@/%s?brokerlist='tcp://localhost:%d'";
@@ -209,7 +209,7 @@ public class GroupCreator
                     {
                         try
                         {
-                            _testcase.startBroker(brokerPortNumber, brokerConfig);
+                            _testcase.startBroker(brokerPortNumber, brokerConfig, null);
                             return "OK";
                         }
                         catch (Exception e)

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/JMXManagementTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/JMXManagementTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/JMXManagementTest.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/JMXManagementTest.java Tue Jan 27 15:00:13 2015
@@ -45,6 +45,7 @@ import org.apache.qpid.server.model.Virt
 import org.apache.qpid.server.store.berkeleydb.jmx.ManagedBDBHAMessageStore;
 import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode;
 import org.apache.qpid.systest.rest.RestTestHelper;
+import org.apache.qpid.test.utils.BrokerHolder;
 import org.apache.qpid.test.utils.JMXTestUtils;
 import org.apache.qpid.test.utils.QpidBrokerTestCase;
 import org.junit.Assert;
@@ -72,7 +73,7 @@ public class JMXManagementTest extends Q
     @Override
     protected void setUp() throws Exception
     {
-        _brokerType = BrokerType.SPAWNED;
+        _brokerType = BrokerHolder.BrokerType.SPAWNED;
 
         setTestClientSystemProperty("log4j.configuration", getBrokerCommandLog4JFile().toURI().toString());
 

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java Tue Jan 27 15:00:13 2015
@@ -48,6 +48,7 @@ import org.apache.qpid.jms.ConnectionURL
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode;
+import org.apache.qpid.test.utils.BrokerHolder;
 import org.apache.qpid.test.utils.QpidBrokerTestCase;
 import org.apache.qpid.test.utils.TestUtils;
 
@@ -75,7 +76,7 @@ public class MultiNodeTest extends QpidB
     @Override
     protected void setUp() throws Exception
     {
-        _brokerType = BrokerType.SPAWNED;
+        _brokerType = BrokerHolder.BrokerType.SPAWNED;
 
         assertTrue(isJavaBroker());
         assertTrue(isBrokerStorePersistent());

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/TwoNodeTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/TwoNodeTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/TwoNodeTest.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/TwoNodeTest.java Tue Jan 27 15:00:13 2015
@@ -28,6 +28,7 @@ import javax.jms.JMSException;
 
 import org.apache.qpid.jms.ConnectionURL;
 import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode;
+import org.apache.qpid.test.utils.BrokerHolder;
 import org.apache.qpid.test.utils.QpidBrokerTestCase;
 
 public class TwoNodeTest extends QpidBrokerTestCase
@@ -47,7 +48,7 @@ public class TwoNodeTest extends QpidBro
     @Override
     protected void setUp() throws Exception
     {
-        _brokerType = BrokerType.SPAWNED;
+        _brokerType = BrokerHolder.BrokerType.SPAWNED;
 
         setTestClientSystemProperty("log4j.configuration", getBrokerCommandLog4JFile().toURI().toString());
 

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/SystemConfigFactoryGenerator.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/SystemConfigFactoryGenerator.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/SystemConfigFactoryGenerator.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/SystemConfigFactoryGenerator.java Tue Jan 27 15:00:13 2015
@@ -113,7 +113,8 @@ public class SystemConfigFactoryGenerato
             pw.println(";");
             pw.println();
 
-            pw.println("import org.apache.qpid.server.BrokerOptions;");
+            pw.println("import java.util.Map;");
+            pw.println();
             pw.println("import org.apache.qpid.server.configuration.updater.TaskExecutor;");
             pw.println("import org.apache.qpid.server.logging.EventLogger;");
             pw.println("import org.apache.qpid.server.logging.LogRecorder;");
@@ -140,10 +141,10 @@ public class SystemConfigFactoryGenerato
             pw.println("    public "+objectSimpleName+" newInstance(final TaskExecutor taskExecutor,");
             pw.println("                       final EventLogger eventLogger,");
             pw.println("                       final LogRecorder logRecorder,");
-            pw.println("                       final BrokerOptions brokerOptions,");
+            pw.println("                       final Map<String,Object> attributes,");
             pw.println("                       final BrokerShutdownProvider brokerShutdownProvider)");
             pw.println("    {");
-            pw.println("        return new "+objectSimpleName+"(taskExecutor, eventLogger, logRecorder, brokerOptions, brokerShutdownProvider);");
+            pw.println("        return new "+objectSimpleName+"(taskExecutor, eventLogger, logRecorder, attributes, brokerShutdownProvider);");
             pw.println("    }");
             pw.println("}");
 

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java Tue Jan 27 15:00:13 2015
@@ -33,10 +33,13 @@ import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
 import org.apache.log4j.PropertyConfigurator;
 
+import org.apache.qpid.server.configuration.BrokerProperties;
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
 import org.apache.qpid.server.configuration.updater.TaskExecutorImpl;
 import org.apache.qpid.server.logging.EventLogger;
+import org.apache.qpid.server.logging.Log4jMessageLogger;
 import org.apache.qpid.server.logging.LogRecorder;
+import org.apache.qpid.server.logging.MessageLogger;
 import org.apache.qpid.server.logging.SystemOutMessageLogger;
 import org.apache.qpid.server.logging.log4j.LoggingManagementFacade;
 import org.apache.qpid.server.logging.messages.BrokerMessages;
@@ -44,30 +47,31 @@ import org.apache.qpid.server.model.Brok
 import org.apache.qpid.server.model.SystemConfig;
 import org.apache.qpid.server.plugin.PluggableFactoryLoader;
 import org.apache.qpid.server.plugin.SystemConfigFactory;
-import org.apache.qpid.server.registry.ApplicationRegistry;
-import org.apache.qpid.server.registry.IApplicationRegistry;
 import org.apache.qpid.server.security.SecurityManager;
-import org.apache.qpid.server.store.DurableConfigurationStore;
+import org.apache.qpid.server.util.Action;
 
 public class Broker implements BrokerShutdownProvider
 {
     private static final Logger LOGGER = Logger.getLogger(Broker.class);
 
     private volatile Thread _shutdownHookThread;
-    private volatile IApplicationRegistry _applicationRegistry;
     private EventLogger _eventLogger;
     private boolean _configuringOwnLogging = false;
     private final TaskExecutor _taskExecutor = new TaskExecutorImpl();
-    private final boolean _exitJVMOnShutdownWithNonZeroExitCode;
+
+    private SystemConfig _systemConfig;
+
+    private final Action<Integer> _shutdownAction;
+
 
     public Broker()
     {
-        this(false);
+        this(null);
     }
 
-    public Broker(boolean exitJVMOnShutdownWithNonZeroExitCode)
+    public Broker(Action<Integer> shutdownAction)
     {
-        this._exitJVMOnShutdownWithNonZeroExitCode = exitJVMOnShutdownWithNonZeroExitCode;
+        _shutdownAction = shutdownAction;
     }
 
     protected static class InitException extends RuntimeException
@@ -96,9 +100,9 @@ public class Broker implements BrokerShu
         {
             try
             {
-                if (_applicationRegistry != null)
+                if(_systemConfig != null)
                 {
-                    _applicationRegistry.close();
+                    _systemConfig.close();
                 }
                 _taskExecutor.stop();
 
@@ -110,9 +114,9 @@ public class Broker implements BrokerShu
                     LogManager.shutdown();
                 }
 
-                if (_exitJVMOnShutdownWithNonZeroExitCode && exitStatusCode != 0)
+                if (_shutdownAction != null)
                 {
-                    System.exit(exitStatusCode);
+                    _shutdownAction.performAction(exitStatusCode);
                 }
             }
         }
@@ -146,15 +150,29 @@ public class Broker implements BrokerShu
         String storeLocation = options.getConfigurationStoreLocation();
         String storeType = options.getConfigurationStoreType();
 
-        _eventLogger.message(BrokerMessages.CONFIG(storeLocation));
+        if (options.isStartupLoggedToSystemOut())
+        {
+            _eventLogger.message(BrokerMessages.CONFIG(storeLocation));
+        }
 
         //Allow skipping the logging configuration for people who are
         //embedding the broker and want to configure it themselves.
         if(!options.isSkipLoggingConfiguration())
         {
-            configureLogging(new File(options.getLogConfigFileLocation()), options.getLogWatchFrequency());
+            configureLogging(new File(options.getLogConfigFileLocation()), options.getLogWatchFrequency(), options.isStartupLoggedToSystemOut());
         }
+        // Create the RootLogger to be used during broker operation
+        boolean statusUpdatesEnabled = Boolean.parseBoolean(System.getProperty(BrokerProperties.PROPERTY_STATUS_UPDATES, "true"));
+        MessageLogger messageLogger = new Log4jMessageLogger(statusUpdatesEnabled);
+        _eventLogger.setMessageLogger(messageLogger);
 
+        // Additionally, report BRK-1006 and BRK-1007 into log4j appenders
+        if(!options.isSkipLoggingConfiguration())
+        {
+            _eventLogger.message(BrokerMessages.LOG_CONFIG(new File(options.getLogConfigFileLocation()).getAbsolutePath()));
+        }
+
+        _eventLogger.message(BrokerMessages.CONFIG(storeLocation));
 
         PluggableFactoryLoader<SystemConfigFactory> configFactoryLoader = new PluggableFactoryLoader<>(SystemConfigFactory.class);
         SystemConfigFactory configFactory = configFactoryLoader.get(storeType);
@@ -169,21 +187,17 @@ public class Broker implements BrokerShu
         LogRecorder logRecorder = new LogRecorder();
 
         _taskExecutor.start();
-        SystemConfig systemConfig = configFactory.newInstance(_taskExecutor, _eventLogger, logRecorder, options, this);
-        systemConfig.open();
-        DurableConfigurationStore store = systemConfig.getConfigurationStore();
-
-        _applicationRegistry = new ApplicationRegistry(store, systemConfig);
+        _systemConfig = configFactory.newInstance(_taskExecutor, _eventLogger, logRecorder, options.convertToSystemConfigAttributes(), this);
         try
         {
-            _applicationRegistry.initialise(options);
+            _systemConfig.open();
         }
-        catch(Exception e)
+        catch(RuntimeException e)
         {
             LOGGER.fatal("Exception during startup", e);
             try
             {
-                _applicationRegistry.close();
+                _systemConfig.close();
             }
             catch(Exception ce)
             {
@@ -194,12 +208,15 @@ public class Broker implements BrokerShu
 
     }
 
-    private void configureLogging(File logConfigFile, int logWatchTime) throws InitException, IOException
+    private void configureLogging(File logConfigFile, int logWatchTime, boolean startupLoggedToSystemOutput) throws InitException, IOException
     {
         _configuringOwnLogging = true;
         if (logConfigFile.exists() && logConfigFile.canRead())
         {
-            _eventLogger.message(BrokerMessages.LOG_CONFIG(logConfigFile.getAbsolutePath()));
+            if (startupLoggedToSystemOutput)
+            {
+                _eventLogger.message(BrokerMessages.LOG_CONFIG(logConfigFile.getAbsolutePath()));
+            }
 
             if (logWatchTime > 0)
             {
@@ -297,15 +314,6 @@ public class Broker implements BrokerShu
         }
     }
 
-    public org.apache.qpid.server.model.Broker getBroker()
-    {
-        if (_applicationRegistry == null)
-        {
-            return null;
-        }
-        return _applicationRegistry.getBroker();
-    }
-
     private class ShutdownService implements Runnable
     {
         public void run()

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/BrokerOptions.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/BrokerOptions.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/BrokerOptions.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/BrokerOptions.java Tue Jan 27 15:00:13 2015
@@ -29,6 +29,7 @@ import java.util.concurrent.ConcurrentMa
 
 import org.apache.qpid.server.configuration.BrokerProperties;
 import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.SystemConfig;
 import org.apache.qpid.server.util.StringUtil;
 
 public class BrokerOptions
@@ -79,13 +80,23 @@ public class BrokerOptions
     private boolean _overwriteConfigurationStore;
     private Map<String, String> _configProperties = new HashMap<String,String>();
     private String _initialSystemProperties;
+    private boolean _startupLoggedToSystemOut = true;
 
-    public Map<String, Object> convertToSystemAttributes()
+    public Map<String, Object> convertToSystemConfigAttributes()
     {
         Map<String,Object> attributes = new HashMap<String, Object>();
 
         attributes.put("storePath", getConfigurationStoreLocation());
         attributes.put(ConfiguredObject.CONTEXT, getConfigProperties());
+
+        attributes.put(SystemConfig.MANAGEMENT_MODE, _managementMode);
+        attributes.put(SystemConfig.MANAGEMENT_MODE_QUIESCE_VIRTUAL_HOSTS, _managementModeQuiesceVhosts);
+        attributes.put(SystemConfig.MANAGEMENT_MODE_RMI_PORT_OVERRIDE, _managementModeRmiPortOverride);
+        attributes.put(SystemConfig.MANAGEMENT_MODE_JMX_PORT_OVERRIDE, _managementModeJmxPortOverride);
+        attributes.put(SystemConfig.MANAGEMENT_MODE_HTTP_PORT_OVERRIDE, _managementModeHttpPortOverride);
+        attributes.put(SystemConfig.MANAGEMENT_MODE_PASSWORD, _managementModePassword);
+        attributes.put(SystemConfig.INITIAL_CONFIGURATION_LOCATION, getInitialConfigurationLocation());
+        attributes.put(SystemConfig.STARTUP_LOGGED_TO_SYSTEM_OUT, isStartupLoggedToSystemOut());
         return attributes;
     }
 
@@ -372,4 +383,19 @@ public class BrokerOptions
         return _configProperties.get(QPID_HOME_DIR);
     }
 
+    /*
+     * Temporary method for test purposes
+     */
+    public boolean isStartupLoggedToSystemOut()
+    {
+        return _startupLoggedToSystemOut;
+    }
+
+    /*
+     * Temporary method for test purposes
+     */
+    public void setStartupLoggedToSystemOut(boolean startupLoggedToSystemOut)
+    {
+        this._startupLoggedToSystemOut = startupLoggedToSystemOut;
+    }
 }

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java Tue Jan 27 15:00:13 2015
@@ -30,7 +30,6 @@ import java.util.UUID;
 
 import org.apache.log4j.Logger;
 
-import org.apache.qpid.server.BrokerOptions;
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
@@ -40,6 +39,7 @@ import org.apache.qpid.server.model.Mode
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.Protocol;
 import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.SystemConfig;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.model.adapter.BrokerAdapter;
 import org.apache.qpid.server.store.ConfiguredObjectRecord;
@@ -62,14 +62,14 @@ public class ManagementModeStoreHandler
     private final DurableConfigurationStore _store;
     private Map<UUID, ConfiguredObjectRecord> _cliEntries;
     private Map<UUID, Object> _quiescedEntriesOriginalState;
-    private final BrokerOptions _options;
+    private final SystemConfig<?> _systemConfig;
     private ConfiguredObject<?> _parent;
     private HashMap<UUID, ConfiguredObjectRecord> _records;
 
     public ManagementModeStoreHandler(DurableConfigurationStore store,
-                                      BrokerOptions options)
+                                      SystemConfig<?> systemConfig)
     {
-        _options = options;
+        _systemConfig = systemConfig;
         _store = store;
     }
 
@@ -82,16 +82,16 @@ public class ManagementModeStoreHandler
         _parent = parent;
         _store.openConfigurationStore(parent, overwrite, initialRecords);
 
-        _quiescedEntriesOriginalState = quiesceEntries(_options);
+        _quiescedEntriesOriginalState = quiesceEntries(_systemConfig);
 
 
         _records = new HashMap<UUID, ConfiguredObjectRecord>();
         final ConfiguredObjectRecordHandler localRecoveryHandler = new ConfiguredObjectRecordHandler()
         {
             private int _version;
-            private boolean _quiesceRmiPort = _options.getManagementModeRmiPortOverride() > 0;
-            private boolean _quiesceJmxPort = _options.getManagementModeJmxPortOverride() > 0;
-            private boolean _quiesceHttpPort = _options.getManagementModeHttpPortOverride() > 0;
+            private boolean _quiesceRmiPort = _systemConfig.getManagementModeRmiPortOverride() > 0;
+            private boolean _quiesceJmxPort = _systemConfig.getManagementModeJmxPortOverride() > 0;
+            private boolean _quiesceHttpPort = _systemConfig.getManagementModeHttpPortOverride() > 0;
 
             @Override
             public void begin()
@@ -104,7 +104,7 @@ public class ManagementModeStoreHandler
                 String entryType = object.getType();
                 Map<String, Object> attributes = object.getAttributes();
                 boolean quiesce = false;
-                if (VIRTUAL_HOST_TYPE.equals(entryType) && _options.isManagementModeQuiesceVirtualHosts())
+                if (VIRTUAL_HOST_TYPE.equals(entryType) && _systemConfig.isManagementModeQuiesceVirtualHosts())
                 {
                     quiesce = true;
                 }
@@ -174,7 +174,7 @@ public class ManagementModeStoreHandler
 
         _store.visitConfiguredObjectRecords(localRecoveryHandler);
 
-        _cliEntries = createPortsFromCommandLineOptions(_options);
+        _cliEntries = createPortsFromCommandLineOptions(_systemConfig);
 
         for(ConfiguredObjectRecord entry : _cliEntries.values())
         {
@@ -293,7 +293,7 @@ public class ManagementModeStoreHandler
         }
     }
 
-    private Map<UUID, ConfiguredObjectRecord> createPortsFromCommandLineOptions(BrokerOptions options)
+    private Map<UUID, ConfiguredObjectRecord> createPortsFromCommandLineOptions(SystemConfig<?> options)
     {
         int managementModeRmiPortOverride = options.getManagementModeRmiPortOverride();
         if (managementModeRmiPortOverride < 0)
@@ -369,7 +369,7 @@ public class ManagementModeStoreHandler
     }
 
 
-    private Map<UUID, Object> quiesceEntries(final BrokerOptions options)
+    private Map<UUID, Object> quiesceEntries(final SystemConfig<?> options)
     {
         final Map<UUID, Object> quiescedEntries = new HashMap<UUID, Object>();
         final int managementModeRmiPortOverride = options.getManagementModeRmiPortOverride();

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/EventLogger.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/EventLogger.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/EventLogger.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/EventLogger.java Tue Jan 27 15:00:13 2015
@@ -59,4 +59,9 @@ public class EventLogger
     {
         _messageLogger = messageLogger;
     }
+
+    public MessageLogger getMessageLogger()
+    {
+        return _messageLogger;
+    }
 }

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/BrokerMessages.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/BrokerMessages.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/BrokerMessages.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/BrokerMessages.java Tue Jan 27 15:00:13 2015
@@ -54,6 +54,7 @@ public class BrokerMessages
     public static final String FLOW_TO_DISK_ACTIVE_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "broker.flow_to_disk_active";
     public static final String MAX_MEMORY_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "broker.max_memory";
     public static final String PLATFORM_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "broker.platform";
+    public static final String PROCESS_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "broker.process";
     public static final String SHUTTING_DOWN_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "broker.shutting_down";
     public static final String MANAGEMENT_MODE_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "broker.management_mode";
     public static final String STARTUP_LOG_HIERARCHY = DEFAULT_LOG_HIERARCHY_PREFIX + "broker.startup";
@@ -73,6 +74,7 @@ public class BrokerMessages
         Logger.getLogger(FLOW_TO_DISK_ACTIVE_LOG_HIERARCHY);
         Logger.getLogger(MAX_MEMORY_LOG_HIERARCHY);
         Logger.getLogger(PLATFORM_LOG_HIERARCHY);
+        Logger.getLogger(PROCESS_LOG_HIERARCHY);
         Logger.getLogger(SHUTTING_DOWN_LOG_HIERARCHY);
         Logger.getLogger(MANAGEMENT_MODE_LOG_HIERARCHY);
         Logger.getLogger(STARTUP_LOG_HIERARCHY);
@@ -396,6 +398,38 @@ public class BrokerMessages
             }
         };
     }
+
+    /**
+     * Log a Broker message of the Format:
+     * <pre>BRK-1017 : Process : PID : {0}</pre>
+     * Optional values are contained in [square brackets] and are numbered
+     * sequentially in the method call.
+     *
+     */
+    public static LogMessage PROCESS(String param1)
+    {
+        String rawMessage = _messages.getString("PROCESS");
+
+        final Object[] messageArguments = {param1};
+        // Create a new MessageFormat to ensure thread safety.
+        // Sharing a MessageFormat and using applyPattern is not thread safe
+        MessageFormat formatter = new MessageFormat(rawMessage, _currentLocale);
+
+        final String message = formatter.format(messageArguments);
+
+        return new LogMessage()
+        {
+            public String toString()
+            {
+                return message;
+            }
+
+            public String getLogHierarchy()
+            {
+                return PROCESS_LOG_HIERARCHY;
+            }
+        };
+    }
 
     /**
      * Log a Broker message of the Format:

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Broker_logmessages.properties
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Broker_logmessages.properties?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Broker_logmessages.properties (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/Broker_logmessages.properties Tue Jan 27 15:00:13 2015
@@ -54,4 +54,7 @@ MANAGEMENT_MODE = BRK-1012 : Management
 FLOW_TO_DISK_ACTIVE = BRK-1014 : Message flow to disk active :  Message memory use {0,number,#}KB exceeds threshold {1,number,#.##}KB
 FLOW_TO_DISK_INACTIVE = BRK-1015 : Message flow to disk inactive : Message memory use {0,number,#}KB within threshold {1,number,#.##}KB
 
-FATAL_ERROR = BRK-1016 : Fatal error : {0} : See log file for more information
\ No newline at end of file
+FATAL_ERROR = BRK-1016 : Fatal error : {0} : See log file for more information
+
+# 0 - pid
+PROCESS = BRK-1017 : Process : PID : {0}
\ No newline at end of file

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java Tue Jan 27 15:00:13 2015
@@ -556,9 +556,14 @@ public abstract class AbstractConfigured
     {
     }
 
+    protected boolean rethrowRuntimeExceptionsOnOpen()
+    {
+        return false;
+    }
+
     protected final void handleExceptionOnOpen(RuntimeException e)
     {
-        if (e instanceof ServerScopedRuntimeException)
+        if (rethrowRuntimeExceptionsOnOpen() || e instanceof ServerScopedRuntimeException)
         {
             throw e;
         }

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractSystemConfig.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractSystemConfig.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractSystemConfig.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractSystemConfig.java Tue Jan 27 15:00:13 2015
@@ -31,16 +31,21 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
-import org.apache.qpid.server.BrokerOptions;
+import org.apache.qpid.common.QpidProperties;
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.qpid.server.configuration.store.ManagementModeStoreHandler;
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.logging.CompositeStartupMessageLogger;
 import org.apache.qpid.server.logging.EventLogger;
 import org.apache.qpid.server.logging.LogRecorder;
+import org.apache.qpid.server.logging.MessageLogger;
+import org.apache.qpid.server.logging.SystemOutMessageLogger;
 import org.apache.qpid.server.logging.messages.BrokerMessages;
+import org.apache.qpid.server.store.BrokerStoreUpgraderAndRecoverer;
 import org.apache.qpid.server.store.ConfiguredObjectRecord;
 import org.apache.qpid.server.store.ConfiguredObjectRecordConverter;
 import org.apache.qpid.server.store.DurableConfigurationStore;
+import org.apache.qpid.util.SystemUtils;
 
 public abstract class AbstractSystemConfig<X extends SystemConfig<X>>
         extends AbstractConfiguredObject<X> implements SystemConfig<X>
@@ -48,24 +53,47 @@ public abstract class AbstractSystemConf
     private static final UUID SYSTEM_ID = new UUID(0l, 0l);
     private final EventLogger _eventLogger;
     private final LogRecorder _logRecorder;
-    private final BrokerOptions _brokerOptions;
     private final BrokerShutdownProvider _brokerShutdownProvider;
 
     private DurableConfigurationStore _configurationStore;
 
+    @ManagedAttributeField
+    private boolean _managementMode;
+
+    @ManagedAttributeField
+    private int _managementModeRmiPortOverride;
+
+    @ManagedAttributeField
+    private int _managementModeJmxPortOverride;
+
+    @ManagedAttributeField
+    private int _managementModeHttpPortOverride;
+
+    @ManagedAttributeField
+    private boolean _managementModeQuiesceVirtualHosts;
+
+    @ManagedAttributeField
+    private String _managementModePassword;
+
+    @ManagedAttributeField
+    private String _initialConfigurationLocation;
+
+    @ManagedAttributeField
+    private boolean _startupLoggedToSystemOut;
+
+
     public AbstractSystemConfig(final TaskExecutor taskExecutor,
                                 final EventLogger eventLogger,
                                 final LogRecorder logRecorder,
-                                final BrokerOptions brokerOptions,
+                                final Map<String,Object> attributes,
                                 final BrokerShutdownProvider brokerShutdownProvider)
     {
         super(parentsMap(),
-              updateAttributes(brokerOptions.convertToSystemAttributes()),
+              updateAttributes(attributes),
               taskExecutor, BrokerModel.getInstance());
         _eventLogger = eventLogger;
         getTaskExecutor().start();
         _logRecorder = logRecorder;
-        _brokerOptions = brokerOptions;
         _brokerShutdownProvider = brokerShutdownProvider;
     }
 
@@ -84,12 +112,6 @@ public abstract class AbstractSystemConf
     }
 
     @Override
-    public State getState()
-    {
-        return State.ACTIVE;
-    }
-
-    @Override
     public EventLogger getEventLogger()
     {
         return _eventLogger;
@@ -101,12 +123,6 @@ public abstract class AbstractSystemConf
     }
 
     @Override
-    public BrokerOptions getBrokerOptions()
-    {
-        return _brokerOptions;
-    }
-
-    @Override
     protected void onClose()
     {
         try
@@ -155,17 +171,17 @@ public abstract class AbstractSystemConf
         super.onOpen();
         _configurationStore = createStoreObject();
 
-        if (_brokerOptions.isManagementMode())
+        if (isManagementMode())
         {
-            _configurationStore = new ManagementModeStoreHandler(_configurationStore, _brokerOptions);
+            _configurationStore = new ManagementModeStoreHandler(_configurationStore, this);
         }
 
         try
         {
             _configurationStore.openConfigurationStore(this,
-                                          false,
-                                          convertToConfigurationRecords(_brokerOptions.getInitialConfigurationLocation(),
-                                                                        this));
+                                                       false,
+                                                       convertToConfigurationRecords(getInitialConfigurationLocation(),
+                                                                                     this));
             _configurationStore.upgradeStoreStructure();
         }
         catch (IOException e)
@@ -173,6 +189,66 @@ public abstract class AbstractSystemConf
             throw new IllegalArgumentException(e);
         }
 
+
+
+    }
+
+    @StateTransition(currentState = State.UNINITIALIZED, desiredState = State.ACTIVE)
+    protected void activate()
+    {
+        final EventLogger eventLogger = _eventLogger;
+
+        EventLogger startupLogger;
+        if (isStartupLoggedToSystemOut())
+        {
+            //Create the composite (logging+SystemOut MessageLogger to be used during startup
+            MessageLogger[] messageLoggers = {new SystemOutMessageLogger(), eventLogger.getMessageLogger()};
+
+            CompositeStartupMessageLogger startupMessageLogger = new CompositeStartupMessageLogger(messageLoggers);
+            startupLogger = new EventLogger(startupMessageLogger);
+        }
+        else
+        {
+            startupLogger = eventLogger;
+        }
+
+        startupLogger.message(BrokerMessages.STARTUP(QpidProperties.getReleaseVersion(),
+                                                     QpidProperties.getBuildVersion()));
+
+        startupLogger.message(BrokerMessages.PLATFORM(System.getProperty("java.vendor"),
+                                                      System.getProperty("java.runtime.version",
+                                                                         System.getProperty("java.version")),
+                                                      SystemUtils.getOSName(),
+                                                      SystemUtils.getOSVersion(),
+                                                      SystemUtils.getOSArch()));
+
+        startupLogger.message(BrokerMessages.MAX_MEMORY(Runtime.getRuntime().maxMemory()));
+
+        if (SystemUtils.getProcessPid() != null)
+        {
+            startupLogger.message(BrokerMessages.PROCESS(SystemUtils.getProcessPid()));
+        }
+
+        BrokerStoreUpgraderAndRecoverer upgrader = new BrokerStoreUpgraderAndRecoverer(this);
+        upgrader.perform();
+
+        Broker broker = getBroker();
+
+        broker.setEventLogger(startupLogger);
+        broker.open();
+
+        if (broker.getState() == State.ACTIVE)
+        {
+            startupLogger.message(BrokerMessages.READY());
+            broker.setEventLogger(eventLogger);
+        }
+
+    }
+
+    @Override
+    protected final boolean rethrowRuntimeExceptionsOnOpen()
+    {
+        return true;
     }
 
     abstract protected DurableConfigurationStore createStoreObject();
@@ -216,8 +292,56 @@ public abstract class AbstractSystemConf
     }
 
     @Override
+    public boolean isManagementMode()
+    {
+        return _managementMode;
+    }
+
+    @Override
+    public int getManagementModeRmiPortOverride()
+    {
+        return _managementModeRmiPortOverride;
+    }
+
+    @Override
+    public int getManagementModeJmxPortOverride()
+    {
+        return _managementModeJmxPortOverride;
+    }
+
+    @Override
+    public int getManagementModeHttpPortOverride()
+    {
+        return _managementModeHttpPortOverride;
+    }
+
+    @Override
+    public boolean isManagementModeQuiesceVirtualHosts()
+    {
+        return _managementModeQuiesceVirtualHosts;
+    }
+
+    @Override
+    public String getManagementModePassword()
+    {
+        return _managementModePassword;
+    }
+
+    @Override
+    public String getInitialConfigurationLocation()
+    {
+        return _initialConfigurationLocation;
+    }
+
+    @Override
     public BrokerShutdownProvider getBrokerShutdownProvider()
     {
         return _brokerShutdownProvider;
     }
+
+    @Override
+    public boolean isStartupLoggedToSystemOut()
+    {
+        return _startupLoggedToSystemOut;
+    }
 }

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java Tue Jan 27 15:00:13 2015
@@ -40,10 +40,6 @@ public interface Broker<X extends Broker
     String PLATFORM = "platform";
     String PROCESS_PID = "processPid";
     String PRODUCT_VERSION = "productVersion";
-    String SUPPORTED_VIRTUALHOST_TYPES = "supportedVirtualHostTypes";
-    String SUPPORTED_VIRTUALHOSTNODE_TYPES = "supportedVirtualHostNodeTypes";
-    String SUPPORTED_AUTHENTICATION_PROVIDERS = "supportedAuthenticationProviders";
-    String SUPPORTED_PREFERENCES_PROVIDER_TYPES = "supportedPreferencesProviderTypes";
     String DEFAULT_VIRTUAL_HOST = "defaultVirtualHost";
     String STATISTICS_REPORTING_PERIOD = "statisticsReportingPeriod";
     String STATISTICS_REPORTING_RESET_ENABLED = "statisticsReportingResetEnabled";
@@ -110,18 +106,6 @@ public interface Broker<X extends Broker
     @DerivedAttribute
     String getProductVersion();
 
-    @DerivedAttribute
-    Collection<String> getSupportedVirtualHostNodeTypes();
-
-    @DerivedAttribute
-    Collection<String> getSupportedAuthenticationProviders();
-
-    @DerivedAttribute
-    Collection<String> getSupportedPreferencesProviderTypes();
-
-    @DerivedAttribute
-    Collection<String> getSupportedVirtualHostTypes();
-
     @ManagedAttribute
     String getDefaultVirtualHost();
 

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java Tue Jan 27 15:00:13 2015
@@ -42,6 +42,9 @@ public final class BrokerModel extends M
      * 1.3 Truststore/Keystore type => trustStoreType / type => keyStoreType
      * 1.4 Separate messageStoreSettings from virtualhost
      * 2.0 Introduce VirtualHostNode as a child of a Broker instead of VirtualHost
+     * 2.1 Add VH aliases;
+     *     Remove Broker#supportedVirtualHostNodeTypes, #supportedVirtualHostTypes, #supportedAuthenticationProviders,
+     *            supportedPreferencesProviderTypes, VH#supportedExchangeTypes, VH#supportedQueueTypes
      */
     public static final int MODEL_MAJOR_VERSION = 2;
     public static final int MODEL_MINOR_VERSION = 1;
@@ -87,7 +90,6 @@ public final class BrokerModel extends M
 
         addRelationship(AuthenticationProvider.class, User.class);
         addRelationship(AuthenticationProvider.class, PreferencesProvider.class);
-        addRelationship(User.class, GroupMember.class);
 
         addRelationship(GroupProvider.class, Group.class);
         addRelationship(Group.class, GroupMember.class);

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectTypeRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectTypeRegistry.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectTypeRegistry.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectTypeRegistry.java Tue Jan 27 15:00:13 2015
@@ -21,8 +21,11 @@
 package org.apache.qpid.server.model;
 
 import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
 import java.util.AbstractCollection;
 import java.util.Arrays;
 import java.util.Collection;
@@ -176,6 +179,9 @@ public class ConfiguredObjectTypeRegistr
     private final Map<Class<? extends ConfiguredObject>,Set<Class<? extends ManagedInterface>>> _allManagedInterfaces =
             Collections.synchronizedMap(new HashMap<Class<? extends ConfiguredObject>, Set<Class<? extends ManagedInterface>>>());
 
+    private final Map<Class<? extends ConfiguredObject>, Map<String, Collection<String>>> _validChildTypes =
+            Collections.synchronizedMap(new HashMap<Class<? extends ConfiguredObject>, Map<String, Collection<String>>>());
+
     public ConfiguredObjectTypeRegistry(Iterable<ConfiguredObjectRegistration> configuredObjectRegistrations, Collection<Class<? extends ConfiguredObject>> categoriesRestriction)
     {
 
@@ -265,6 +271,96 @@ public class ConfiguredObjectTypeRegistr
             }
 
         }
+
+        for(Class<? extends ConfiguredObject> type : types)
+        {
+            final ManagedObject annotation = type.getAnnotation(ManagedObject.class);
+            String validChildren = annotation.validChildTypes();
+            if(!"".equals(validChildren))
+            {
+                Method validChildTypesMethod = getValidChildTypesFunction(validChildren, type);
+                if(validChildTypesMethod != null)
+                {
+                    try
+                    {
+                        _validChildTypes.put(type, (Map<String, Collection<String>>) validChildTypesMethod.invoke(null));
+                    }
+                    catch (IllegalAccessException | InvocationTargetException e)
+                    {
+                        throw new IllegalArgumentException("Exception while evaluating valid child types for " + type.getName(), e);
+                    }
+                }
+
+            }
+        }
+    }
+
+    private static Method getValidChildTypesFunction(final String validValue, final Class<? extends ConfiguredObject> clazz)
+    {
+        if (validValue.matches("([\\w][\\w\\d_]+\\.)+[\\w][\\w\\d_\\$]*#[\\w\\d_]+\\s*\\(\\s*\\)"))
+        {
+            String function = validValue;
+            try
+            {
+                String className = function.split("#")[0].trim();
+                String methodName = function.split("#")[1].split("\\(")[0].trim();
+                Class<?> validValueCalculatingClass = Class.forName(className);
+                Method method = validValueCalculatingClass.getMethod(methodName);
+                if (Modifier.isStatic(method.getModifiers()) && Modifier.isPublic(method.getModifiers()))
+                {
+                    if (Map.class.isAssignableFrom(method.getReturnType()))
+                    {
+                        if (method.getGenericReturnType() instanceof ParameterizedType)
+                        {
+                            Type keyType =
+                                    ((ParameterizedType) method.getGenericReturnType()).getActualTypeArguments()[0];
+                            if (keyType == String.class)
+                            {
+                                Type valueType =
+                                        ((ParameterizedType) method.getGenericReturnType()).getActualTypeArguments()[1];
+                                if (valueType instanceof ParameterizedType)
+                                {
+                                    ParameterizedType paramType = (ParameterizedType) valueType;
+                                    final Type rawType = paramType.getRawType();
+                                    final Type[] args = paramType.getActualTypeArguments();
+                                    if (Collection.class.isAssignableFrom((Class<?>) rawType)
+                                        && args.length == 1
+                                        && args[0] == String.class)
+                                    {
+                                        return method;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+
+
+                throw new IllegalArgumentException("The validChildTypes of the class "
+                                                   + clazz.getSimpleName()
+                                                   + " has value '"
+                                                   + validValue
+                                                   + "' but the method does not meet the requirements - is it public and static");
+
+            }
+            catch (ClassNotFoundException | NoSuchMethodException e)
+            {
+                throw new IllegalArgumentException("The validChildTypes of the class "
+                                                   + clazz.getSimpleName()
+                                                   + " has value '"
+                                                   + validValue
+                                                   + "' which looks like it should be a method,"
+                                                   + " but no such method could be used.", e);
+            }
+        }
+        else
+        {
+            throw new IllegalArgumentException("The validChildTypes of the class "
+                                               + clazz.getSimpleName()
+                                               + " has value '"
+                                               + validValue
+                                               + "' which does not match the required <package>.<class>#<method>() format.");
+        }
     }
 
     public static Class<? extends ConfiguredObject> getCategory(final Class<?> clazz)
@@ -907,4 +1003,18 @@ public class ConfiguredObjectTypeRegistr
         }
     }
 
+    public Collection<String> getValidChildTypes(Class<? extends ConfiguredObject> type, Class<? extends ConfiguredObject> childType)
+    {
+        final Map<String, Collection<String>> allValidChildTypes = _validChildTypes.get(getTypeClass(type));
+        if(allValidChildTypes != null)
+        {
+            final Collection<String> validTypesForSpecificChild = allValidChildTypes.get(getCategory(childType).getSimpleName());
+            return validTypesForSpecificChild == null ? null : Collections.unmodifiableCollection(validTypesForSpecificChild);
+        }
+        else
+        {
+            return null;
+        }
+    }
+
 }

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Group.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Group.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Group.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Group.java Tue Jan 27 15:00:13 2015
@@ -19,7 +19,11 @@
  */
 package org.apache.qpid.server.model;
 
-@ManagedObject
+import org.apache.qpid.server.security.group.GroupImpl;
+import org.apache.qpid.server.security.group.GroupPrincipal;
+
+@ManagedObject( defaultType = GroupImpl.CONFIG_TYPE )
 public interface Group<X extends Group<X>> extends ConfiguredObject<X>
 {
+    GroupPrincipal getGroupPrincipal();
 }

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupMember.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupMember.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupMember.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupMember.java Tue Jan 27 15:00:13 2015
@@ -19,7 +19,12 @@
  */
 package org.apache.qpid.server.model;
 
-@ManagedObject
+import java.security.Principal;
+
+import org.apache.qpid.server.security.group.GroupMemberImpl;
+
+@ManagedObject( defaultType = GroupMemberImpl.CONFIG_TYPE )
 public interface GroupMember<X extends GroupMember<X>> extends ConfiguredObject<X>
 {
+    Principal getPrincipal();
 }

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/JsonSystemConfigImpl.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/JsonSystemConfigImpl.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/JsonSystemConfigImpl.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/JsonSystemConfigImpl.java Tue Jan 27 15:00:13 2015
@@ -20,7 +20,8 @@
  */
 package org.apache.qpid.server.model;
 
-import org.apache.qpid.server.BrokerOptions;
+import java.util.Map;
+
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
 import org.apache.qpid.server.logging.EventLogger;
 import org.apache.qpid.server.logging.LogRecorder;
@@ -38,10 +39,10 @@ public class JsonSystemConfigImpl extend
     public JsonSystemConfigImpl(final TaskExecutor taskExecutor,
                                 final EventLogger eventLogger,
                                 final LogRecorder logRecorder,
-                                final BrokerOptions brokerOptions,
+                                final Map<String,Object> attributes,
                                 final BrokerShutdownProvider brokerShutdownProvider)
     {
-        super(taskExecutor, eventLogger, logRecorder, brokerOptions, brokerShutdownProvider);
+        super(taskExecutor, eventLogger, logRecorder, attributes, brokerShutdownProvider);
     }
 
     public String getStorePath()

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java Tue Jan 27 15:00:13 2015
@@ -35,5 +35,6 @@ public @interface ManagedObject
     boolean creatable() default true;
     String defaultType() default ""; // in this case the class/interface itself is to be used
     String type() default "";
+    String validChildTypes() default "";
     boolean register() default true;
 }



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