You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2016/07/27 16:30:43 UTC

svn commit: r1754311 [1/2] - in /qpid/java/trunk: broker-core/src/main/java/org/apache/qpid/server/ broker-core/src/main/java/org/apache/qpid/server/configuration/store/ broker-core/src/main/java/org/apache/qpid/server/model/ broker-core/src/main/java/...

Author: rgodfrey
Date: Wed Jul 27 16:30:42 2016
New Revision: 1754311

URL: http://svn.apache.org/viewvc?rev=1754311&view=rev
Log:
QPID-7365 : Allow SystemConfig to be used for other models - not just Brokers

Added:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerContainerType.java   (with props)
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Container.java   (with props)
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContainerStoreUpgraderAndRecoverer.java   (with props)
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContainerType.java   (with props)
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/DynamicModel.java   (with props)
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfigBootstrapModel.java
      - copied, changed from r1754025, qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerImpl.java
      - copied, changed from r1754310, qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/adapter/BrokerImplTest.java
      - copied, changed from r1754310, qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/adapter/BrokerAdapterTest.java
Removed:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/adapter/BrokerAdapterTest.java
Modified:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/Broker.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractSystemConfig.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/JsonSystemConfigImpl.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Model.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfig.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/ConfiguredObjectRecordConverter.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/BrokerTest.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/BrokerMemoryLoggerTest.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java
    qpid/java/trunk/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeTest.java
    qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/TestBrokerConfiguration.java

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/Broker.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/Broker.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/Broker.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/Broker.java Wed Jul 27 16:30:42 2016
@@ -204,7 +204,7 @@ public class Broker
                                                   _systemPrincipal,
                                                   options.convertToSystemConfigAttributes());
         _systemConfig.open();
-        if (_systemConfig.getBroker().getState() == State.ERRORED)
+        if (_systemConfig.getChild(org.apache.qpid.server.model.Broker.class).getState() == State.ERRORED)
         {
             throw new RuntimeException("Closing broker as it cannot operate due to errors");
         }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java Wed Jul 27 16:30:42 2016
@@ -44,7 +44,7 @@ import org.apache.qpid.server.model.Prot
 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.model.adapter.BrokerImpl;
 import org.apache.qpid.server.store.ConfiguredObjectRecord;
 import org.apache.qpid.server.store.ConfiguredObjectRecordImpl;
 import org.apache.qpid.server.store.DurableConfigurationStore;
@@ -248,7 +248,7 @@ public class ManagementModeStoreHandler
         attributes.put(Port.PORT, port);
         attributes.put(Port.PROTOCOLS, Collections.singleton(protocol));
         attributes.put(Port.NAME, MANAGEMENT_MODE_PORT_PREFIX + protocol.name());
-        attributes.put(Port.AUTHENTICATION_PROVIDER, BrokerAdapter.MANAGEMENT_MODE_AUTHENTICATION);
+        attributes.put(Port.AUTHENTICATION_PROVIDER, BrokerImpl.MANAGEMENT_MODE_AUTHENTICATION);
         ConfiguredObjectRecord portEntry = new ConfiguredObjectRecordImpl(UUID.randomUUID(), PORT_TYPE, attributes,
                 Collections.singletonMap(parent.getType(),parent.getId()));
         if (LOGGER.isDebugEnabled())

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java Wed Jul 27 16:30:42 2016
@@ -75,7 +75,6 @@ import org.apache.qpid.server.configurat
 import org.apache.qpid.server.configuration.updater.Task;
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
 import org.apache.qpid.server.model.preferences.UserPreferences;
-import org.apache.qpid.server.model.preferences.UserPreferencesImpl;
 import org.apache.qpid.server.security.AccessControl;
 import org.apache.qpid.server.security.Result;
 import org.apache.qpid.server.security.SecurityToken;
@@ -142,7 +141,7 @@ public abstract class AbstractConfigured
     private final Class<? extends ConfiguredObject> _category;
     private final Class<? extends ConfiguredObject> _typeClass;
     private final Class<? extends ConfiguredObject> _bestFitInterface;
-    private final Model _model;
+    private volatile Model _model;
     private final boolean _managesChildStorage;
 
 
@@ -320,12 +319,7 @@ public abstract class AbstractConfigured
             attributes.put(TYPE, _type);
         }
 
-        for (Class<? extends ConfiguredObject> childClass : getModel().getChildTypes(getCategoryClass()))
-        {
-            _children.put(childClass, new CopyOnWriteArrayList<ConfiguredObject<?>>());
-            _childrenById.put(childClass, new ConcurrentHashMap<UUID, ConfiguredObject<?>>());
-            _childrenByName.put(childClass, new ConcurrentHashMap<String, ConfiguredObject<?>>());
-        }
+        populateChildTypeMaps();
 
         for(Map.Entry<Class<? extends ConfiguredObject>, ConfiguredObject<?>> entry : parents.entrySet())
         {
@@ -380,6 +374,33 @@ public abstract class AbstractConfigured
         }
     }
 
+    protected final void updateModel(Model model)
+    {
+        if(this instanceof DynamicModel && _children.isEmpty() && _model.getChildTypes(getCategoryClass()).isEmpty() && Model.isSpecialization(_model, model, getCategoryClass()))
+        {
+            _model = model;
+            populateChildTypeMaps();
+        }
+        else
+        {
+            throw new IllegalStateException("Cannot change the model of a class which does not implement DynamicModel, or has defined child types");
+        }
+    }
+
+    private void populateChildTypeMaps()
+    {
+        if(!(_children.isEmpty() && _childrenById.isEmpty() && _childrenByName.isEmpty()))
+        {
+            throw new IllegalStateException("Cannot update the child type maps on a class with pre-existing child types");
+        }
+        for (Class<? extends ConfiguredObject> childClass : getModel().getChildTypes(getCategoryClass()))
+        {
+            _children.put(childClass, new CopyOnWriteArrayList<ConfiguredObject<?>>());
+            _childrenById.put(childClass, new ConcurrentHashMap<UUID, ConfiguredObject<?>>());
+            _childrenByName.put(childClass, new ConcurrentHashMap<String, ConfiguredObject<?>>());
+        }
+    }
+
     private boolean managesChildren(final Class<? extends ConfiguredObject> clazz)
     {
         return clazz.getAnnotation(ManagedObject.class).managesChildren();
@@ -1545,7 +1566,7 @@ public abstract class AbstractConfigured
     @Override
     public final ConfiguredObjectFactory getObjectFactory()
     {
-        return _model.getObjectFactory();
+        return getModel().getObjectFactory();
     }
 
     @Override
@@ -1890,7 +1911,7 @@ public abstract class AbstractConfigured
 
     public final Collection<String> getAttributeNames()
     {
-        return _model.getTypeRegistry().getAttributeNames(getClass());
+        return getTypeRegistry().getAttributeNames(getClass());
     }
 
     @Override
@@ -2245,7 +2266,8 @@ public abstract class AbstractConfigured
     @Override
     public <C extends ConfiguredObject> Collection<C> getChildren(final Class<C> clazz)
     {
-        return Collections.unmodifiableList((List<? extends C>) _children.get(clazz));
+        Collection<ConfiguredObject<?>> children = _children.get(clazz);
+        return Collections.unmodifiableList((List<? extends C>) children);
     }
 
     @Override
@@ -2789,8 +2811,8 @@ public abstract class AbstractConfigured
         return (ConfiguredObject<?>) Proxy.newProxyInstance(getClass().getClassLoader(),
                                                             new Class<?>[]{category},
                                                             new AuthorisationProxyInvocationHandler(attributes,
-                                                                    getModel().getTypeRegistry().getAttributeTypes(category),
-                                                                    category, parent, otherParents));
+                                                                                                    getTypeRegistry().getAttributeTypes(category),
+                                                                                                    category, parent, otherParents));
     }
 
     protected final <C extends ConfiguredObject<?>> void authoriseCreateChild(Class<C> childClass, Map<String, Object> attributes, ConfiguredObject... otherParents) throws AccessControlException
@@ -3043,7 +3065,7 @@ public abstract class AbstractConfigured
     @Override
     public Map<String, Object> getStatistics()
     {
-        Collection<ConfiguredObjectStatistic> stats = _model.getTypeRegistry().getStatistics(getClass());
+        Collection<ConfiguredObjectStatistic> stats = getTypeRegistry().getStatistics(getClass());
         Map<String,Object> map = new HashMap<>();
         for(ConfiguredObjectStatistic stat : stats)
         {
@@ -3082,7 +3104,7 @@ public abstract class AbstractConfigured
     @Override
     public Set<String> getContextKeys(final boolean excludeSystem)
     {
-        Map<String,String> inheritedContext = new HashMap<>(_model.getTypeRegistry().getDefaultContext());
+        Map<String,String> inheritedContext = new HashMap<>(getTypeRegistry().getDefaultContext());
         if(!excludeSystem)
         {
             inheritedContext.putAll(System.getenv());
@@ -3092,6 +3114,11 @@ public abstract class AbstractConfigured
         return Collections.unmodifiableSet(inheritedContext.keySet());
     }
 
+    private ConfiguredObjectTypeRegistry getTypeRegistry()
+    {
+        return getModel().getTypeRegistry();
+    }
+
     private OwnAttributeResolver getOwnAttributeResolver()
     {
         return _ownAttributeResolver;

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractSystemConfig.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractSystemConfig.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractSystemConfig.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractSystemConfig.java Wed Jul 27 16:30:42 2016
@@ -28,9 +28,11 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.security.Principal;
 import java.security.PrivilegedAction;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.ExecutionException;
@@ -55,10 +57,10 @@ import org.apache.qpid.server.logging.Me
 import org.apache.qpid.server.logging.SystemOutMessageLogger;
 import org.apache.qpid.server.logging.messages.BrokerMessages;
 import org.apache.qpid.server.plugin.QpidServiceLoader;
-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.server.store.handler.ConfiguredObjectRecordHandler;
 import org.apache.qpid.server.store.preferences.NoopPreferenceStoreFactoryService;
 import org.apache.qpid.server.store.preferences.PreferenceStore;
 import org.apache.qpid.server.store.preferences.PreferenceStoreAttributes;
@@ -66,7 +68,7 @@ import org.apache.qpid.server.store.pref
 import org.apache.qpid.server.util.ServerScopedRuntimeException;
 
 public abstract class AbstractSystemConfig<X extends SystemConfig<X>>
-        extends AbstractConfiguredObject<X> implements SystemConfig<X>
+        extends AbstractConfiguredObject<X> implements SystemConfig<X>, DynamicModel
 {
     private static final Logger LOGGER = LoggerFactory.getLogger(AbstractSystemConfig.class);
 
@@ -100,6 +102,9 @@ public abstract class AbstractSystemConf
     @ManagedAttributeField
     private PreferenceStoreAttributes _preferenceStoreAttributes;
 
+    @ManagedAttributeField
+    private String _defaultContainerType;
+
     private final Thread _shutdownHook = new Thread(new ShutdownService(), "QpidBrokerShutdownHook");
 
     public AbstractSystemConfig(final TaskExecutor taskExecutor,
@@ -109,7 +114,7 @@ public abstract class AbstractSystemConf
     {
         super(parentsMap(),
               updateAttributes(attributes),
-              taskExecutor, BrokerModel.getInstance());
+              taskExecutor, SystemConfigBootstrapModel.getInstance());
         _eventLogger = eventLogger;
         _systemPrincipal = systemPrincipal;
         getTaskExecutor().start();
@@ -180,9 +185,9 @@ public abstract class AbstractSystemConf
     }
 
     @Override
-    public Broker getBroker()
+    public <C extends ConfiguredObject<C>> C getChild(Class<C> childClass)
     {
-        Collection<Broker> children = getChildren(Broker.class);
+        Collection<C> children = getChildren(childClass);
         if(children == null || children.isEmpty())
         {
             return null;
@@ -194,6 +199,7 @@ public abstract class AbstractSystemConf
         return children.iterator().next();
     }
 
+
     @Override
     protected void onOpen()
     {
@@ -217,66 +223,136 @@ public abstract class AbstractSystemConf
     protected ListenableFuture<Void> activate()
     {
         final EventLogger eventLogger = _eventLogger;
+        final EventLogger startupLogger = initiateStartupLogging();
 
-        final EventLogger startupLogger;
-        if (isStartupLoggedToSystemOut())
+
+        try
         {
-            //Create the composite (logging+SystemOut MessageLogger to be used during startup
-            MessageLogger[] messageLoggers = {new SystemOutMessageLogger(), eventLogger.getMessageLogger()};
+            final Container<?> container = initateStoreAndRecovery();
+
+            container.setEventLogger(startupLogger);
+            final SettableFuture<Void> returnVal = SettableFuture.create();
+            Futures.addCallback(container.openAsync(), new FutureCallback()
+                                {
+                                    @Override
+                                    public void onSuccess(final Object result)
+                                    {
+                                        State state = container.getState();
+                                        if (state == State.ACTIVE)
+                                        {
+                                            startupLogger.message(BrokerMessages.READY());
+                                            container.setEventLogger(eventLogger);
+                                            returnVal.set(null);
+                                        }
+                                        else
+                                        {
+                                            returnVal.setException(new ServerScopedRuntimeException("Broker failed reach ACTIVE state (state is " + state + ")"));
+                                        }
+                                    }
+
+                                    @Override
+                                    public void onFailure(final Throwable t)
+                                    {
+                                        returnVal.setException(t);
+                                    }
+                                }, getTaskExecutor()
+                               );
+
+            return returnVal;
+        }
+        catch (IOException e)
+        {
+            throw new IllegalArgumentException(e);
+        }
+
+
+    }
+
+    private Container<?> initateStoreAndRecovery() throws IOException
+    {
+        ConfiguredObjectRecord[] initialRecords = convertToConfigurationRecords(getInitialConfigurationLocation()
+                                                                               );
+        final DurableConfigurationStore store = getConfigurationStore();
+        final List<ConfiguredObjectRecord> records = new ArrayList<>();
+
+        boolean isNew = store.openConfigurationStore(new ConfiguredObjectRecordHandler()
+        {
+            @Override
+            public void handle(final ConfiguredObjectRecord record)
+            {
+                records.add(record);
+            }
+        }, initialRecords);
+
+        String containerTypeName = getDefaultContainerType();
+        for(ConfiguredObjectRecord record : records)
+        {
+            if(record.getParents() == null || record.getParents().isEmpty())
+            {
+                containerTypeName = record.getType();
+                break;
+            }
+        }
+        QpidServiceLoader loader = new QpidServiceLoader();
+        final ContainerType<?> containerType = loader.getInstancesByType(ContainerType.class).get(containerTypeName);
+
+        if(containerType != null)
+        {
+            updateModel(containerType.getModel());
+            containerType.getRecoverer(this).upgradeAndRecover(records);
 
-            CompositeStartupMessageLogger startupMessageLogger = new CompositeStartupMessageLogger(messageLoggers);
-            startupLogger = new EventLogger(startupMessageLogger);
         }
         else
         {
-            startupLogger = eventLogger;
+            throw new IllegalConfigurationException("Unknown container type '" + containerTypeName + "'");
         }
 
+        final Class categoryClass = containerType.getCategoryClass();
+        return (Container<?>) getChild(categoryClass);
+    }
+
+
+    @StateTransition(currentState = State.UNINITIALIZED, desiredState = State.QUIESCED)
+    protected ListenableFuture<Void> startQuiesced()
+    {
+        final EventLogger startupLogger = initiateStartupLogging();
 
-        BrokerStoreUpgraderAndRecoverer upgrader = new BrokerStoreUpgraderAndRecoverer(this);
         try
         {
-            upgrader.perform(convertToConfigurationRecords(getInitialConfigurationLocation(),
-                                                           this));
+            final Container<?> container = initateStoreAndRecovery();
+
+            container.setEventLogger(startupLogger);
+            return Futures.immediateFuture(null);
         }
         catch (IOException e)
         {
             throw new IllegalArgumentException(e);
         }
 
-        final Broker broker = getBroker();
 
-        broker.setEventLogger(startupLogger);
-        final SettableFuture<Void> returnVal = SettableFuture.create();
-        Futures.addCallback(broker.openAsync(), new FutureCallback()
-                            {
-                                @Override
-                                public void onSuccess(final Object result)
-                                {
-                                    State state = broker.getState();
-                                    if (state == State.ACTIVE)
-                                    {
-                                        startupLogger.message(BrokerMessages.READY());
-                                        broker.setEventLogger(eventLogger);
-                                        returnVal.set(null);
-                                    }
-                                    else
-                                    {
-                                        returnVal.setException(new ServerScopedRuntimeException("Broker failed reach ACTIVE state (state is " + state + ")"));
-                                    }
-                                }
+    }
 
-                                @Override
-                                public void onFailure(final Throwable t)
-                                {
-                                    returnVal.setException(t);
-                                }
-                            }, getTaskExecutor()
-                           );
+    private EventLogger initiateStartupLogging()
+    {
+        final EventLogger eventLogger = _eventLogger;
 
-        return returnVal;
+        final 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;
+        }
+        return startupLogger;
     }
 
+
     @Override
     protected final boolean rethrowRuntimeExceptionsOnOpen()
     {
@@ -291,10 +367,9 @@ public abstract class AbstractSystemConf
         return _configurationStore;
     }
 
-    private ConfiguredObjectRecord[] convertToConfigurationRecords(final String initialConfigurationLocation,
-                                                                   final SystemConfig systemConfig) throws IOException
+    private ConfiguredObjectRecord[] convertToConfigurationRecords(final String initialConfigurationLocation) throws IOException
     {
-        ConfiguredObjectRecordConverter converter = new ConfiguredObjectRecordConverter(BrokerModel.getInstance());
+        ConfiguredObjectRecordConverter converter = new ConfiguredObjectRecordConverter(getModel());
 
         Reader reader;
 
@@ -311,8 +386,7 @@ public abstract class AbstractSystemConf
         try
         {
             Collection<ConfiguredObjectRecord> records =
-                    converter.readFromJson(org.apache.qpid.server.model.Broker.class,
-                                           systemConfig, reader);
+                    converter.readFromJson(null, this, reader);
             return records.toArray(new ConfiguredObjectRecord[records.size()]);
         }
         finally
@@ -324,6 +398,12 @@ public abstract class AbstractSystemConf
     }
 
     @Override
+    public String getDefaultContainerType()
+    {
+        return _defaultContainerType;
+    }
+
+    @Override
     public boolean isManagementMode()
     {
         return _managementMode;

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java Wed Jul 27 16:30:42 2016
@@ -30,12 +30,13 @@ import java.util.concurrent.TimeUnit;
 import org.apache.qpid.configuration.CommonProperties;
 import org.apache.qpid.server.logging.EventLogger;
 import org.apache.qpid.server.logging.EventLoggerProvider;
-import org.apache.qpid.server.model.adapter.BrokerAdapter;
+import org.apache.qpid.server.model.adapter.BrokerImpl;
 import org.apache.qpid.server.stats.StatisticsGatherer;
 
-@ManagedObject( defaultType = "Broker" )
-public interface Broker<X extends Broker<X>> extends ConfiguredObject<X>, EventLoggerProvider, StatisticsGatherer
+@ManagedObject( defaultType = Broker.BROKER_TYPE)
+public interface Broker<X extends Broker<X>> extends ConfiguredObject<X>, EventLoggerProvider, StatisticsGatherer, Container<X>
 {
+    String BROKER_TYPE = "Broker";
 
     String BUILD_VERSION = "buildVersion";
     String OPERATING_SYSTEM = "operatingSystem";
@@ -80,7 +81,7 @@ public interface Broker<X extends Broker
     String DEFAULT_HTTP_PORT_NUMBER = "8080";
 
     @ManagedContextDefault(name = BROKER_FLOW_TO_DISK_THRESHOLD)
-    long DEFAULT_FLOW_TO_DISK_THRESHOLD = (long)(0.4 * (double) BrokerAdapter.getMaxDirectMemorySize());
+    long DEFAULT_FLOW_TO_DISK_THRESHOLD = (long)(0.4 * (double) BrokerImpl.getMaxDirectMemorySize());
 
     @ManagedContextDefault(name = CHANNEL_FLOW_CONTROL_ENFORCEMENT_TIMEOUT)
     long DEFAULT_CHANNEL_FLOW_CONTROL_ENFORCEMENT_TIMEOUT = 5000l;
@@ -169,7 +170,7 @@ public interface Broker<X extends Broker
     @ManagedContextDefault(name = BROKER_DIRECT_BYTE_BUFFER_POOL_SIZE)
     int DEFAULT_BROKER_DIRECT_BYTE_BUFFER_POOL_SIZE = 1024;
 
-    @ManagedAttribute(validValues = {"org.apache.qpid.server.model.adapter.BrokerAdapter#getAvailableConfigurationEncrypters()"})
+    @ManagedAttribute(validValues = {"org.apache.qpid.server.model.adapter.BrokerImpl#getAvailableConfigurationEncrypters()"})
     String getConfidentialConfigurationEncryptionProvider();
 
     @DerivedAttribute( persist = true )

Added: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerContainerType.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerContainerType.java?rev=1754311&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerContainerType.java (added)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerContainerType.java Wed Jul 27 16:30:42 2016
@@ -0,0 +1,53 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.model;
+
+import org.apache.qpid.server.plugin.PluggableService;
+import org.apache.qpid.server.store.BrokerStoreUpgraderAndRecoverer;
+
+@PluggableService
+public class BrokerContainerType implements ContainerType<Broker>
+{
+
+    @Override
+    public String getType()
+    {
+        return Broker.BROKER_TYPE;
+    }
+
+    @Override
+    public Class<Broker> getCategoryClass()
+    {
+        return Broker.class;
+    }
+
+    @Override
+    public Model getModel()
+    {
+        return BrokerModel.getInstance();
+    }
+
+    @Override
+    public ContainerStoreUpgraderAndRecoverer<Broker> getRecoverer(final SystemConfig<?> systemConfig)
+    {
+        return new BrokerStoreUpgraderAndRecoverer(systemConfig);
+    }
+}

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

Added: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Container.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Container.java?rev=1754311&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Container.java (added)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Container.java Wed Jul 27 16:30:42 2016
@@ -0,0 +1,28 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.model;
+
+import org.apache.qpid.server.logging.EventLogger;
+
+public interface Container<C extends ConfiguredObject<C>> extends ConfiguredObject<C>
+{
+    void setEventLogger(EventLogger startupLogger);
+}

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

Added: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContainerStoreUpgraderAndRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContainerStoreUpgraderAndRecoverer.java?rev=1754311&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContainerStoreUpgraderAndRecoverer.java (added)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContainerStoreUpgraderAndRecoverer.java Wed Jul 27 16:30:42 2016
@@ -0,0 +1,30 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.model;
+
+import java.util.List;
+
+import org.apache.qpid.server.store.ConfiguredObjectRecord;
+
+public interface ContainerStoreUpgraderAndRecoverer<C extends Container>
+{
+    C upgradeAndRecover(List<ConfiguredObjectRecord> records);
+}

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

Added: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContainerType.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContainerType.java?rev=1754311&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContainerType.java (added)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ContainerType.java Wed Jul 27 16:30:42 2016
@@ -0,0 +1,31 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.model;
+
+import org.apache.qpid.server.plugin.Pluggable;
+
+public interface ContainerType<C extends Container> extends Pluggable
+{
+
+    Class<C> getCategoryClass();
+    Model getModel();
+    ContainerStoreUpgraderAndRecoverer<C> getRecoverer(SystemConfig<?> systemConfig);
+}

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

Added: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/DynamicModel.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/DynamicModel.java?rev=1754311&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/DynamicModel.java (added)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/DynamicModel.java Wed Jul 27 16:30:42 2016
@@ -0,0 +1,26 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.model;
+
+public interface DynamicModel
+{
+    String getDefaultContainerType();
+}

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

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/JsonSystemConfigImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/JsonSystemConfigImpl.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/JsonSystemConfigImpl.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/JsonSystemConfigImpl.java Wed Jul 27 16:30:42 2016
@@ -51,6 +51,6 @@ public class JsonSystemConfigImpl extend
 
     protected JsonFileConfigStore createStoreObject()
     {
-        return new JsonFileConfigStore(Broker.class);
+        return new JsonFileConfigStore(null);
     }
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Model.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Model.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Model.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Model.java Wed Jul 27 16:30:42 2016
@@ -21,6 +21,7 @@
 
 package org.apache.qpid.server.model;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
@@ -192,4 +193,28 @@ public abstract class Model
 
     public abstract ConfiguredObjectTypeRegistry getTypeRegistry();
 
+    public static boolean isSpecialization(final Model model,
+                                           final Model specialization,
+                                           final Class<? extends ConfiguredObject> specializationPoint)
+    {
+        if(model.getSupportedCategories().contains(specializationPoint)
+               && specialization.getSupportedCategories().containsAll(model.getSupportedCategories())
+               && model.getChildTypes(specializationPoint).isEmpty())
+        {
+            final Collection<Class<? extends ConfiguredObject>> modelSupportedCategories = new ArrayList<>(model.getSupportedCategories());
+            modelSupportedCategories.remove(specializationPoint);
+            for(Class<? extends ConfiguredObject> category : modelSupportedCategories)
+            {
+                if(!model.getChildTypes(category).equals(specialization.getChildTypes(category)))
+                {
+                    return false;
+                }
+            }
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+    }
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfig.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfig.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfig.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfig.java Wed Jul 27 16:30:42 2016
@@ -43,6 +43,9 @@ public interface SystemConfig<X extends
     @ManagedContextDefault(name = BrokerProperties.POSIX_FILE_PERMISSIONS)
     String DEFAULT_POSIX_FILE_PERMISSIONS = "rw-r-----";
 
+    @ManagedAttribute(immutable = true, defaultValue = Broker.BROKER_TYPE)
+    String getDefaultContainerType();
+
     @ManagedAttribute(defaultValue = "false")
     boolean isManagementMode();
 
@@ -67,7 +70,7 @@ public interface SystemConfig<X extends
 
     EventLogger getEventLogger();
 
-    Broker getBroker();
+    <C extends ConfiguredObject<C>> C getChild(Class<C> childClass);
 
     DurableConfigurationStore getConfigurationStore();
 }

Copied: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfigBootstrapModel.java (from r1754025, qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java)
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfigBootstrapModel.java?p2=qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfigBootstrapModel.java&p1=qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java&r1=1754025&r2=1754311&rev=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfigBootstrapModel.java Wed Jul 27 16:30:42 2016
@@ -32,92 +32,23 @@ import org.apache.qpid.server.plugin.Con
 import org.apache.qpid.server.plugin.ConfiguredObjectRegistration;
 import org.apache.qpid.server.plugin.QpidServiceLoader;
 
-public final class BrokerModel extends Model
+public final class SystemConfigBootstrapModel extends Model
 {
 
-    /*
-     * API version for the broker model
-     *
-     * 1.0 Initial version
-     * 1.1 Addition of mandatory virtual host type / different types of virtual host
-     * 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
-     * 3.0 Add VH aliases;
-     *     Remove Broker#supportedVirtualHostNodeTypes, #supportedVirtualHostTypes, #supportedAuthenticationProviders,
-     *            supportedPreferencesProviderTypes, VH#supportedExchangeTypes, VH#supportedQueueTypes
-     *     Renamed FileTrustStore/FileKeyStore.path => FileTrustStore/FileKeyStore.storeUrl
-     * 6.0 Add BrokerLogger as a child of Broker
-     *     Replace the defaultVirtualHost (at Broker) with defaultVirtualHostNode flag (at VHN)
-     *     Make Connections children of Ports instead of VHosts
-     *     Bring model version and Qpid version into sync
-     * 6.1 Remove JMX
-     */
-    public static final int MODEL_MAJOR_VERSION = 6;
-    public static final int MODEL_MINOR_VERSION = 1;
+    public static final int MODEL_MAJOR_VERSION = 1;
+    public static final int MODEL_MINOR_VERSION = 0;
     public static final String MODEL_VERSION = MODEL_MAJOR_VERSION + "." + MODEL_MINOR_VERSION;
-    private static final Model MODEL_INSTANCE = new BrokerModel();
-    private final Map<Class<? extends ConfiguredObject>, Collection<Class<? extends ConfiguredObject>>> _parents =
-            new HashMap<Class<? extends ConfiguredObject>, Collection<Class<? extends ConfiguredObject>>>();
+    private static final Model MODEL_INSTANCE = new SystemConfigBootstrapModel();
 
-    private final Map<Class<? extends ConfiguredObject>, Collection<Class<? extends ConfiguredObject>>> _children =
-            new HashMap<Class<? extends ConfiguredObject>, Collection<Class<? extends ConfiguredObject>>>();
-
-    private final Set<Class<? extends ConfiguredObject>> _supportedTypes =
-            new HashSet<Class<? extends ConfiguredObject>>();
     private final ConfiguredObjectTypeRegistry _typeRegistry;
 
     private Class<? extends ConfiguredObject> _rootCategory;
     private final ConfiguredObjectFactory _objectFactory;
 
-    private BrokerModel()
+    private SystemConfigBootstrapModel()
     {
         setRootCategory(SystemConfig.class);
 
-        addRelationship(SystemConfig.class, Broker.class);
-
-        addRelationship(Broker.class, BrokerLogger.class);
-        addRelationship(Broker.class, VirtualHostNode.class);
-        addRelationship(Broker.class, TrustStore.class);
-        addRelationship(Broker.class, KeyStore.class);
-        addRelationship(Broker.class, Port.class);
-        addRelationship(Broker.class, AccessControlProvider.class);
-        addRelationship(Broker.class, AuthenticationProvider.class);
-        addRelationship(Broker.class, GroupProvider.class);
-        addRelationship(Broker.class, Plugin.class);
-
-        addRelationship(BrokerLogger.class, BrokerLogInclusionRule.class);
-
-        addRelationship(VirtualHostNode.class, VirtualHost.class);
-        addRelationship(VirtualHostNode.class, RemoteReplicationNode.class);
-
-        addRelationship(VirtualHost.class, VirtualHostLogger.class);
-        addRelationship(VirtualHost.class, VirtualHostAccessControlProvider.class);
-        addRelationship(VirtualHost.class, Exchange.class);
-        addRelationship(VirtualHost.class, Queue.class);
-
-        addRelationship(VirtualHostLogger.class, VirtualHostLogInclusionRule.class);
-
-        addRelationship(Port.class, VirtualHostAlias.class);
-        addRelationship(Port.class, Connection.class);
-
-        addRelationship(AuthenticationProvider.class, User.class);
-        addRelationship(AuthenticationProvider.class, PreferencesProvider.class);
-
-        addRelationship(GroupProvider.class, Group.class);
-        addRelationship(Group.class, GroupMember.class);
-
-        addRelationship(Connection.class, Session.class);
-
-        addRelationship(Queue.class, Binding.class);
-        addRelationship(Queue.class, Consumer.class);
-
-        addRelationship(Exchange.class, Binding.class);
-        addRelationship(Exchange.class, Publisher.class);
-
-        addRelationship(Session.class, Consumer.class);
-        addRelationship(Session.class, Publisher.class);
-
         _objectFactory = new ConfiguredObjectFactoryImpl(this);
         _typeRegistry = new ConfiguredObjectTypeRegistry((new QpidServiceLoader()).instancesOf(ConfiguredObjectRegistration.class),
                                                          (new QpidServiceLoader()).instancesOf(ConfiguredObjectAttributeInjector.class),
@@ -144,9 +75,7 @@ public final class BrokerModel extends M
 
     public Collection<Class<? extends ConfiguredObject>> getParentTypes(Class<? extends ConfiguredObject> child)
     {
-        Collection<Class<? extends ConfiguredObject>> parentTypes = _parents.get(child);
-        return parentTypes == null ? Collections.<Class<? extends ConfiguredObject>>emptyList()
-                : Collections.unmodifiableCollection(parentTypes);
+        return Collections.<Class<? extends ConfiguredObject>>emptyList();
     }
 
     @Override
@@ -169,43 +98,19 @@ public final class BrokerModel extends M
 
     public Collection<Class<? extends ConfiguredObject>> getChildTypes(Class<? extends ConfiguredObject> parent)
     {
-        Collection<Class<? extends ConfiguredObject>> childTypes = _children.get(parent);
-        return childTypes == null ? Collections.<Class<? extends ConfiguredObject>>emptyList()
-                : Collections.unmodifiableCollection(childTypes);
+        return Collections.<Class<? extends ConfiguredObject>>emptyList();
     }
 
     @Override
     public Collection<Class<? extends ConfiguredObject>> getSupportedCategories()
     {
-        return Collections.unmodifiableSet(_supportedTypes);
+        return Collections.unmodifiableSet(Collections.<Class<? extends ConfiguredObject>>singleton(SystemConfig.class));
     }
 
-    public void setRootCategory(final Class<? extends ConfiguredObject> rootCategory)
+    private void setRootCategory(final Class<? extends ConfiguredObject> rootCategory)
     {
         _rootCategory = rootCategory;
     }
 
-    private void addRelationship(Class<? extends ConfiguredObject> parent, Class<? extends ConfiguredObject> child)
-    {
-        Collection<Class<? extends ConfiguredObject>> parents = _parents.get(child);
-        if (parents == null)
-        {
-            parents = new ArrayList<Class<? extends ConfiguredObject>>();
-            _parents.put(child, parents);
-        }
-        parents.add(parent);
-
-        Collection<Class<? extends ConfiguredObject>> children = _children.get(parent);
-        if (children == null)
-        {
-            children = new ArrayList<Class<? extends ConfiguredObject>>();
-            _children.put(parent, children);
-        }
-        children.add(child);
-
-        _supportedTypes.add(parent);
-        _supportedTypes.add(child);
-
-    }
 
 }

Copied: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerImpl.java (from r1754310, qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java)
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerImpl.java?p2=qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerImpl.java&p1=qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java&r1=1754310&r2=1754311&rev=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerImpl.java Wed Jul 27 16:30:42 2016
@@ -102,9 +102,9 @@ import org.apache.qpid.server.virtualhos
 import org.apache.qpid.util.SystemUtils;
 
 @ManagedObject( category = false, type = "Broker" )
-public class BrokerAdapter extends AbstractConfiguredObject<BrokerAdapter> implements Broker<BrokerAdapter>, StatisticsGatherer
+public class BrokerImpl extends AbstractConfiguredObject<BrokerImpl> implements Broker<BrokerImpl>, StatisticsGatherer
 {
-    private static final Logger LOGGER = LoggerFactory.getLogger(BrokerAdapter.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(BrokerImpl.class);
 
     private static final Pattern MODEL_VERSION_PATTERN = Pattern.compile("^\\d+\\.\\d+$");
 
@@ -204,8 +204,8 @@ public class BrokerAdapter extends Abstr
     private String _helpURL;
 
     @ManagedObjectFactoryConstructor
-    public BrokerAdapter(Map<String, Object> attributes,
-                         SystemConfig parent)
+    public BrokerImpl(Map<String, Object> attributes,
+                      SystemConfig parent)
     {
         super(parentsMap(parent), attributes);
         _parent = parent;
@@ -1517,7 +1517,7 @@ public class BrokerAdapter extends Abstr
         @Override
         public Broker<?> getBroker()
         {
-            return BrokerAdapter.this;
+            return BrokerImpl.this;
         }
     }
 
@@ -1538,7 +1538,7 @@ public class BrokerAdapter extends Abstr
             if(object.getCategoryClass() == Broker.class && child.getCategoryClass() == AccessControlProvider.class)
             {
                 child.addChangeListener(this);
-                BrokerAdapter.this.updateAccessControl();
+                BrokerImpl.this.updateAccessControl();
             }
         }
 
@@ -1547,7 +1547,7 @@ public class BrokerAdapter extends Abstr
         {
             if(object.getCategoryClass() == Broker.class && child.getCategoryClass() == AccessControlProvider.class)
             {
-                BrokerAdapter.this.updateAccessControl();
+                BrokerImpl.this.updateAccessControl();
             }
         }
 
@@ -1559,7 +1559,7 @@ public class BrokerAdapter extends Abstr
         {
             if(object.getCategoryClass() == AccessControlProvider.class && !_bulkChanges.contains(object))
             {
-                BrokerAdapter.this.updateAccessControl();
+                BrokerImpl.this.updateAccessControl();
             }
         }
 
@@ -1578,7 +1578,7 @@ public class BrokerAdapter extends Abstr
             if(object.getCategoryClass() == AccessControlProvider.class)
             {
                 _bulkChanges.remove(object);
-                BrokerAdapter.this.updateAccessControl();
+                BrokerImpl.this.updateAccessControl();
             }
         }
     }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java Wed Jul 27 16:30:42 2016
@@ -20,6 +20,7 @@
  */
 package org.apache.qpid.server.store;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -39,12 +40,14 @@ import org.apache.qpid.server.configurat
 import org.apache.qpid.server.logging.LogLevel;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.ContainerStoreUpgraderAndRecoverer;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.SystemConfig;
 import org.apache.qpid.server.model.VirtualHostAlias;
+import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler;
 import org.apache.qpid.server.util.Action;
 
-public class BrokerStoreUpgraderAndRecoverer
+public class BrokerStoreUpgraderAndRecoverer implements ContainerStoreUpgraderAndRecoverer<Broker>
 {
     private static final Logger LOGGER = LoggerFactory.getLogger(BrokerStoreUpgraderAndRecoverer.class);
 
@@ -910,14 +913,15 @@ public class BrokerStoreUpgraderAndRecov
         return brokerRecord;
     }
 
-    public Broker<?> perform(final ConfiguredObjectRecord... initialRecords)
+    public Broker<?> upgradeAndRecover(List<ConfiguredObjectRecord> records)
     {
         final DurableConfigurationStore store = _systemConfig.getConfigurationStore();
-        List<ConfiguredObjectRecord> upgradedRecords = upgrade(store, initialRecords);
+
+        List<ConfiguredObjectRecord> upgradedRecords = upgrade(store, records);
         new GenericRecoverer(_systemConfig).recover(upgradedRecords, false);
 
         final StoreConfigurationChangeListener configChangeListener = new StoreConfigurationChangeListener(store);
-        applyRecursively(_systemConfig.getBroker(), new RecursiveAction<ConfiguredObject<?>>()
+        applyRecursively(_systemConfig.getChild(Broker.class), new RecursiveAction<ConfiguredObject<?>>()
         {
             @Override
             public void performAction(final ConfiguredObject<?> object)
@@ -932,14 +936,14 @@ public class BrokerStoreUpgraderAndRecov
             }
         });
 
-        return _systemConfig.getBroker();
+        return _systemConfig.getChild(Broker.class);
     }
 
     List<ConfiguredObjectRecord> upgrade(final DurableConfigurationStore store,
-                                         final ConfiguredObjectRecord... initialRecords)
+                                         final List<ConfiguredObjectRecord> records)
     {
         GenericStoreUpgrader upgrader = new GenericStoreUpgrader(Broker.class.getSimpleName(), Broker.MODEL_VERSION, store, _upgraders);
-        boolean isNew = upgrader.upgrade(initialRecords);
+        upgrader.upgrade(records);
         return upgrader.getRecords();
     }
 

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/ConfiguredObjectRecordConverter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/ConfiguredObjectRecordConverter.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/ConfiguredObjectRecordConverter.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/ConfiguredObjectRecordConverter.java Wed Jul 27 16:30:42 2016
@@ -34,11 +34,16 @@ import com.fasterxml.jackson.core.JsonPa
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.ContainerType;
+import org.apache.qpid.server.model.DynamicModel;
 import org.apache.qpid.server.model.Model;
+import org.apache.qpid.server.plugin.QpidServiceLoader;
 
 public class ConfiguredObjectRecordConverter
 {
-    private final Model _model;
+    private Model _model;
+    private Class<? extends ConfiguredObject> _rootClass;
+
 
     private static interface NameToIdResolver
     {
@@ -50,8 +55,18 @@ public class ConfiguredObjectRecordConve
         _model = model;
     }
 
-    public Collection<ConfiguredObjectRecord> readFromJson(final Class<? extends ConfiguredObject> rootClass,
-                                                           final ConfiguredObject<?> parent, final Reader reader) throws IOException
+    public Class<? extends ConfiguredObject> getRootClass()
+    {
+        return _rootClass;
+    }
+
+    public Model getModel()
+    {
+        return _model;
+    }
+
+    public Collection<ConfiguredObjectRecord> readFromJson(Class<? extends ConfiguredObject> rootClass,
+                                                           ConfiguredObject<?> parent, Reader reader) throws IOException
     {
         Map<UUID, ConfiguredObjectRecord> objectsById = new HashMap<>();
 
@@ -60,9 +75,31 @@ public class ConfiguredObjectRecordConve
         Map data = objectMapper.readValue(reader, Map.class);
         if(!data.isEmpty())
         {
+            if(rootClass == null && parent instanceof DynamicModel)
+            {
+                String containerTypeName = ((DynamicModel) parent).getDefaultContainerType();
+                if (data.get(ConfiguredObject.TYPE) instanceof String)
+                {
+                    containerTypeName = data.get(ConfiguredObject.TYPE).toString();
+                }
+
+                QpidServiceLoader loader = new QpidServiceLoader();
+                final ContainerType<?> containerType =
+                        loader.getInstancesByType(ContainerType.class).get(containerTypeName);
+
+                if (containerType != null)
+                {
+                    _model = containerType.getModel();
+                    rootClass = containerType.getCategoryClass();
+                }
+            }
+
             Collection<NameToIdResolver> unresolved =
                     loadChild(rootClass, data, parent.getCategoryClass(), parent.getId(), objectsById);
 
+            _rootClass = rootClass;
+
+
             Iterator<NameToIdResolver> iterator = unresolved.iterator();
             while(iterator.hasNext())
             {

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java Wed Jul 27 16:30:42 2016
@@ -58,15 +58,15 @@ public class GenericStoreUpgrader
         return new ArrayList<ConfiguredObjectRecord>(_records.values());
     }
 
-    public boolean upgrade(final ConfiguredObjectRecord... initialRecords)
+    public void upgrade(List<ConfiguredObjectRecord> records)
     {
-        RecordCollectionHandler handler = new RecordCollectionHandler();
-
-        boolean isNewStore = _store.openConfigurationStore(handler, initialRecords);
-
+        _records.clear();
+        for(ConfiguredObjectRecord record : records)
+        {
+            _records.put(record.getId(), record);
+        }
         performUpgrade();
 
-        return isNewStore;
     }
 
     private void performUpgrade()

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java Wed Jul 27 16:30:42 2016
@@ -20,9 +20,11 @@
  */
 package org.apache.qpid.server.store;
 
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
+import java.io.Reader;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -43,7 +45,10 @@ import org.slf4j.LoggerFactory;
 import org.apache.qpid.server.configuration.BrokerProperties;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.ConfiguredObjectJacksonModule;
+import org.apache.qpid.server.model.ContainerType;
+import org.apache.qpid.server.model.DynamicModel;
 import org.apache.qpid.server.model.Model;
+import org.apache.qpid.server.plugin.QpidServiceLoader;
 import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler;
 
 public class JsonFileConfigStore extends AbstractJsonFileStore implements DurableConfigurationStore
@@ -74,9 +79,9 @@ public class JsonFileConfigStore extends
 
     private final Map<UUID, ConfiguredObjectRecord> _objectsById = new HashMap<UUID, ConfiguredObjectRecord>();
     private final Map<String, List<UUID>> _idsByType = new HashMap<String, List<UUID>>();
-    private final Class<? extends ConfiguredObject> _rootClass;
+    private volatile Class<? extends ConfiguredObject> _rootClass;
     private final ObjectMapper _objectMapper;
-    private Map<String,Class<? extends ConfiguredObject>> _classNameMapping;
+    private volatile Map<String,Class<? extends ConfiguredObject>> _classNameMapping;
 
     private ConfiguredObject<?> _parent;
 
@@ -101,13 +106,14 @@ public class JsonFileConfigStore extends
     public void init(ConfiguredObject<?> parent)
     {
         assertState(State.CLOSED);
-            _parent = parent;
-            _classNameMapping = generateClassNameMap(_parent.getModel(), _rootClass);
-            FileBasedSettings fileBasedSettings = (FileBasedSettings) _parent;
-            setup(parent.getName(),
-                  fileBasedSettings.getStorePath(),
-                  parent.getContextValue(String.class, BrokerProperties.POSIX_FILE_PERMISSIONS),
-                  Collections.emptyMap());
+        _parent = parent;
+        _classNameMapping = generateClassNameMap(_parent.getModel(), _rootClass);
+
+        FileBasedSettings fileBasedSettings = (FileBasedSettings) _parent;
+        setup(parent.getName(),
+              fileBasedSettings.getStorePath(),
+              parent.getContextValue(String.class, BrokerProperties.POSIX_FILE_PERMISSIONS),
+              Collections.emptyMap());
         changeState(State.CLOSED, State.CONFIGURED);
 
     }
@@ -155,11 +161,45 @@ public class JsonFileConfigStore extends
 
             records = configuredObjectRecordConverter.readFromJson(_rootClass, _parent, new FileReader(configFile));
 
+            if(_rootClass == null)
+            {
+                _rootClass = configuredObjectRecordConverter.getRootClass();
+                _classNameMapping = generateClassNameMap(configuredObjectRecordConverter.getModel(), _rootClass);
+            }
+
             if(records.isEmpty())
             {
                 LOGGER.debug("File contains no records - using initial configuration");
                 records = Arrays.asList(initialRecords);
                 updated = true;
+                if (_rootClass == null)
+                {
+                    String containerTypeName = ((DynamicModel) _parent).getDefaultContainerType();
+                    ConfiguredObjectRecord rootRecord = null;
+                    for(ConfiguredObjectRecord record : records)
+                    {
+                        if(record.getParents() == null || record.getParents().isEmpty())
+                        {
+                            rootRecord = record;
+                            break;
+                        }
+                    }
+                    if (rootRecord != null && rootRecord.getAttributes().get(ConfiguredObject.TYPE) instanceof String)
+                    {
+                        containerTypeName = rootRecord.getAttributes().get(ConfiguredObject.TYPE).toString();
+                    }
+
+                    QpidServiceLoader loader = new QpidServiceLoader();
+                    final ContainerType<?> containerType =
+                            loader.getInstancesByType(ContainerType.class).get(containerTypeName);
+
+                    if (containerType != null)
+                    {
+                        _rootClass = containerType.getCategoryClass();
+                        _classNameMapping = generateClassNameMap(containerType.getModel(), containerType.getCategoryClass());
+                    }
+
+                }
             }
 
             for(ConfiguredObjectRecord record : records)
@@ -459,13 +499,16 @@ public class JsonFileConfigStore extends
                                                                                       final Class<? extends ConfiguredObject> clazz)
     {
         Map<String,Class<? extends ConfiguredObject>>map = new HashMap<String, Class<? extends ConfiguredObject>>();
-        map.put(clazz.getSimpleName(), clazz);
-        Collection<Class<? extends ConfiguredObject>> childClasses = model.getChildTypes(clazz);
-        if(childClasses != null)
+        if(clazz != null)
         {
-            for(Class<? extends ConfiguredObject> childClass : childClasses)
+            map.put(clazz.getSimpleName(), clazz);
+            Collection<Class<? extends ConfiguredObject>> childClasses = model.getChildTypes(clazz);
+            if (childClasses != null)
             {
-                map.putAll(generateClassNameMap(model, childClass));
+                for (Class<? extends ConfiguredObject> childClass : childClasses)
+                {
+                    map.putAll(generateClassNameMap(model, childClass));
+                }
             }
         }
         return map;

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java Wed Jul 27 16:30:42 2016
@@ -577,11 +577,21 @@ public class VirtualHostStoreUpgraderAnd
                                      final ConfiguredObjectRecord... initialRecords)
     {
         String virtualHostCategory = VirtualHost.class.getSimpleName();
+        final List<ConfiguredObjectRecord> records = new ArrayList<>();
+        boolean isNew = durableConfigurationStore.openConfigurationStore(new ConfiguredObjectRecordHandler()
+        {
+            @Override
+            public void handle(final ConfiguredObjectRecord record)
+            {
+                records.add(record);
+            }
+        }, initialRecords);
+
         GenericStoreUpgrader upgraderHandler = new GenericStoreUpgrader(virtualHostCategory, VirtualHost.MODEL_VERSION, durableConfigurationStore, _upgraders);
-        boolean isNew = upgraderHandler.upgrade(initialRecords);
+        upgraderHandler.upgrade(records);
 
-        List<ConfiguredObjectRecord> records = upgraderHandler.getRecords();
-        recover(durableConfigurationStore, records, isNew);
+        List<ConfiguredObjectRecord> upgradedRecords = upgraderHandler.getRecords();
+        recover(durableConfigurationStore, upgradedRecords, isNew);
         return isNew;
     }
 

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/BrokerTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/BrokerTest.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/BrokerTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/BrokerTest.java Wed Jul 27 16:30:42 2016
@@ -106,7 +106,8 @@ public class BrokerTest extends QpidTest
     {
         String startupConsoleAppenderLogPrefix = getTestName() + "__$$ ";
         byte[] outputBytes = startBrokerAndCollectSystemOutput(startupConsoleAppenderLogPrefix);
-        assertFalse("Detected unexpected startup console appender prefix", new String(outputBytes).contains(startupConsoleAppenderLogPrefix));
+        String outputString = new String(outputBytes);
+        assertFalse("Detected unexpected startup console appender prefix", outputString.contains(startupConsoleAppenderLogPrefix));
     }
 
     public void testConsoleLogsOnUnsuccessfulStartup() throws Exception

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java Wed Jul 27 16:30:42 2016
@@ -36,6 +36,8 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.UUID;
 
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
 import org.mockito.ArgumentCaptor;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
@@ -52,6 +54,7 @@ import org.apache.qpid.server.model.Json
 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.StateTransition;
 import org.apache.qpid.server.model.SystemConfig;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.store.ConfiguredObjectRecord;
@@ -141,6 +144,12 @@ public class ManagementModeStoreHandlerT
             protected void onClose()
             {
             }
+
+            @StateTransition(currentState = State.UNINITIALIZED, desiredState = State.QUIESCED)
+            protected ListenableFuture<Void> startQuiesced()
+            {
+                return Futures.immediateFuture(null);
+            }
         };
         _systemConfig.open();
         return new ManagementModeStoreHandler(_store, _systemConfig);

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/BrokerMemoryLoggerTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/BrokerMemoryLoggerTest.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/BrokerMemoryLoggerTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/BrokerMemoryLoggerTest.java Wed Jul 27 16:30:42 2016
@@ -38,6 +38,7 @@ import org.apache.qpid.server.model.Brok
 import org.apache.qpid.server.model.BrokerModel;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.JsonSystemConfigImpl;
+import org.apache.qpid.server.model.Model;
 import org.apache.qpid.server.model.SystemConfig;
 import org.apache.qpid.server.store.ConfiguredObjectRecord;
 import org.apache.qpid.server.store.GenericRecoverer;
@@ -60,7 +61,13 @@ public class BrokerMemoryLoggerTest exte
         _taskExecutor.start();
         _systemConfig = new JsonSystemConfigImpl(_taskExecutor,
                                                  mock(EventLogger.class),
-                                                 null, new BrokerOptions().convertToSystemConfigAttributes());
+                                                 null, new BrokerOptions().convertToSystemConfigAttributes())
+                        {
+                            {
+                                updateModel(BrokerModel.getInstance());
+                            }
+                        };
+
 
         when(_brokerEntry.getId()).thenReturn(_brokerId);
         when(_brokerEntry.getType()).thenReturn(Broker.class.getSimpleName());
@@ -79,7 +86,7 @@ public class BrokerMemoryLoggerTest exte
         final String brokerLoggerName = "TestBrokerLogger";
         ch.qos.logback.classic.Logger rootLogger =
                 (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
-        Broker broker = _systemConfig.getBroker();
+        Broker broker = _systemConfig.getChild(Broker.class);
         Map<String, Object> attributes = new HashMap<>();
         attributes.put(ConfiguredObject.NAME, brokerLoggerName);
         attributes.put(ConfiguredObject.TYPE, BrokerMemoryLogger.TYPE);
@@ -107,7 +114,7 @@ public class BrokerMemoryLoggerTest exte
     {
         final String brokerLoggerName = "TestBrokerLogger";
 
-        Broker broker = _systemConfig.getBroker();
+        Broker broker = _systemConfig.getChild(Broker.class);
         Map<String, Object> attributes = new HashMap<>();
         attributes.put(ConfiguredObject.NAME, brokerLoggerName);
         attributes.put(ConfiguredObject.TYPE, BrokerMemoryLogger.TYPE);

Copied: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/adapter/BrokerImplTest.java (from r1754310, qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/adapter/BrokerAdapterTest.java)
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/adapter/BrokerImplTest.java?p2=qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/adapter/BrokerImplTest.java&p1=qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/adapter/BrokerAdapterTest.java&r1=1754310&r2=1754311&rev=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/adapter/BrokerAdapterTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/adapter/BrokerImplTest.java Wed Jul 27 16:30:42 2016
@@ -44,11 +44,11 @@ import org.apache.qpid.server.virtualhos
 import org.apache.qpid.test.utils.QpidTestCase;
 
 
-public class BrokerAdapterTest extends QpidTestCase
+public class BrokerImplTest extends QpidTestCase
 {
     private TaskExecutorImpl _taskExecutor;
     private SystemConfig _systemConfig;
-    private BrokerAdapter _brokerAdapter;
+    private BrokerImpl _brokerImpl;
 
     @Override
     public void setUp() throws Exception
@@ -72,9 +72,9 @@ public class BrokerAdapterTest extends Q
     {
         try
         {
-            if (_brokerAdapter != null)
+            if (_brokerImpl != null)
             {
-                _brokerAdapter.close();
+                _brokerImpl.close();
             }
 
             if (_taskExecutor != null)
@@ -122,14 +122,14 @@ public class BrokerAdapterTest extends Q
 
         // testing unsuccessful case
         attributes.put(Broker.CONTEXT, Collections.singletonMap(Broker.NETWORK_BUFFER_SIZE, Broker.MINIMUM_NETWORK_BUFFER_SIZE - 1));
-        _brokerAdapter = new BrokerAdapter(attributes, _systemConfig);
-        _brokerAdapter.open();
+        _brokerImpl = new BrokerImpl(attributes, _systemConfig);
+        _brokerImpl.open();
         assertEquals("Broker open should fail with network buffer size less then minimum",
                      State.ERRORED,
-                     _brokerAdapter.getState());
+                     _brokerImpl.getState());
         assertEquals("Unexpected buffer size",
                      Broker.DEFAULT_NETWORK_BUFFER_SIZE,
-                     _brokerAdapter.getNetworkBufferSize());
+                     _brokerImpl.getNetworkBufferSize());
     }
 
     private void doAssignTargetSizeTest(final long[] virtualHostQueueSizes, final long flowToDiskThreshold)
@@ -139,17 +139,17 @@ public class BrokerAdapterTest extends Q
         attributes.put(Broker.MODEL_VERSION, BrokerModel.MODEL_VERSION);
         attributes.put(Broker.DURABLE, true);
         attributes.put("context", Collections.singletonMap(Broker.BROKER_FLOW_TO_DISK_THRESHOLD, flowToDiskThreshold));
-        _brokerAdapter = new BrokerAdapter(attributes, _systemConfig);
-        _brokerAdapter.open();
-        assertEquals("Unexpected broker state", State.ACTIVE, _brokerAdapter.getState());
+        _brokerImpl = new BrokerImpl(attributes, _systemConfig);
+        _brokerImpl.open();
+        assertEquals("Unexpected broker state", State.ACTIVE, _brokerImpl.getState());
 
         for(int i=0; i < virtualHostQueueSizes.length; i++)
         {
-            createVhnWithVh(_brokerAdapter, i, virtualHostQueueSizes[i]);
+            createVhnWithVh(_brokerImpl, i, virtualHostQueueSizes[i]);
         }
 
         long totalAssignedTargetSize = 0;
-        for(VirtualHostNode<?> vhn : _brokerAdapter.getVirtualHostNodes())
+        for(VirtualHostNode<?> vhn : _brokerImpl.getVirtualHostNodes())
         {
             long targetSize = vhn.getVirtualHost().getTargetSize();
             assertTrue("A virtualhost's target size cannot be zero", targetSize > 0);
@@ -157,18 +157,18 @@ public class BrokerAdapterTest extends Q
         }
 
         long diff = Math.abs(flowToDiskThreshold - totalAssignedTargetSize);
-        long tolerance = _brokerAdapter.getVirtualHostNodes().size() * 2;
+        long tolerance = _brokerImpl.getVirtualHostNodes().size() * 2;
         assertTrue(String.format("Assigned target size not within expected tolerance. Diff %d Tolerance %d", diff, tolerance), diff < tolerance);
     }
 
-    private void createVhnWithVh(final BrokerAdapter brokerAdapter, int nameSuffix, final long totalQueueSize)
+    private void createVhnWithVh(final BrokerImpl brokerImpl, int nameSuffix, final long totalQueueSize)
     {
         final Map<String, Object> vhnAttributes = new HashMap<>();
         vhnAttributes.put(VirtualHostNode.TYPE, TestVirtualHostNode.VIRTUAL_HOST_NODE_TYPE);
         vhnAttributes.put(VirtualHostNode.NAME, "testVhn" + nameSuffix);
 
         final DurableConfigurationStore store = mock(DurableConfigurationStore.class);
-        TestVirtualHostNode vhn = new TestVirtualHostNode(brokerAdapter, vhnAttributes, store);
+        TestVirtualHostNode vhn = new TestVirtualHostNode(brokerImpl, vhnAttributes, store);
         vhn.create();
 
 

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java?rev=1754311&r1=1754310&r2=1754311&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java Wed Jul 27 16:30:42 2016
@@ -39,6 +39,7 @@ import org.apache.qpid.server.model.Brok
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.GroupProvider;
 import org.apache.qpid.server.model.JsonSystemConfigImpl;
+import org.apache.qpid.server.model.Model;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.model.SystemConfig;
@@ -63,7 +64,13 @@ public class BrokerRecovererTest extends
         _taskExecutor.start();
         _systemConfig = new JsonSystemConfigImpl(_taskExecutor,
                                                  mock(EventLogger.class),
-                                                 null, new BrokerOptions().convertToSystemConfigAttributes());
+                                                 null, new BrokerOptions().convertToSystemConfigAttributes())
+        {
+
+            {
+                updateModel(BrokerModel.getInstance());
+            }
+        };
 
         when(_brokerEntry.getId()).thenReturn(_brokerId);
         when(_brokerEntry.getType()).thenReturn(Broker.class.getSimpleName());
@@ -114,7 +121,7 @@ public class BrokerRecovererTest extends
         when(_brokerEntry.getAttributes()).thenReturn(entryAttributes);
 
         resolveObjects(_brokerEntry);
-        Broker<?> broker = _systemConfig.getBroker();
+        Broker<?> broker = _systemConfig.getChild(Broker.class);
 
         assertNotNull(broker);
 
@@ -173,7 +180,7 @@ public class BrokerRecovererTest extends
                 portId,
                 5672,
                 "authProvider"));
-        Broker<?> broker = _systemConfig.getBroker();
+        Broker<?> broker = _systemConfig.getChild(Broker.class);
 
 
         assertNotNull(broker);
@@ -187,7 +194,7 @@ public class BrokerRecovererTest extends
         UUID authProviderId = UUID.randomUUID();
 
         resolveObjects(_brokerEntry, createAuthProviderRecord(authProviderId, "authProvider"));
-        Broker<?> broker = _systemConfig.getBroker();
+        Broker<?> broker = _systemConfig.getChild(Broker.class);
 
 
         assertNotNull(broker);
@@ -209,7 +216,7 @@ public class BrokerRecovererTest extends
                                       createPortRecord(portId, 5672, "authProvider"),
                                       createAuthProviderRecord(authProvider2Id, "authProvider2"),
                                       createPortRecord(port2Id, 5673, "authProvider2"));
-        Broker<?> broker = _systemConfig.getBroker();
+        Broker<?> broker = _systemConfig.getChild(Broker.class);
 
 
         assertNotNull(broker);
@@ -227,7 +234,7 @@ public class BrokerRecovererTest extends
         UUID authProviderId = UUID.randomUUID();
 
         resolveObjects(_brokerEntry, createGroupProviderRecord(authProviderId, "groupProvider"));
-        Broker<?> broker = _systemConfig.getBroker();
+        Broker<?> broker = _systemConfig.getChild(Broker.class);
 
 
         assertNotNull(broker);
@@ -250,7 +257,7 @@ public class BrokerRecovererTest extends
             when(_brokerEntry.getAttributes()).thenReturn(brokerAttributes);
 
             resolveObjects(_brokerEntry);
-            Broker<?> broker = _systemConfig.getBroker();
+            Broker<?> broker = _systemConfig.getChild(Broker.class);
             broker.open();
             assertEquals("Unexpected broker state", State.ERRORED, broker.getState());
         }



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