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 2014/04/21 16:28:32 UTC

svn commit: r1588886 [2/6] - in /qpid/trunk/qpid/java: bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/ bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/jmx/ bdbstore/src/main/java/org/apache/qpid/server/store/b...

Added: qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java?rev=1588886&view=auto
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java (added)
+++ qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java Mon Apr 21 14:28:29 2014
@@ -0,0 +1,193 @@
+/*
+ *
+ * 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.store.berkeleydb;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ConfigurationChangeListener;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.VirtualHostNode;
+import org.apache.qpid.server.plugin.ConfiguredObjectTypeFactory;
+import org.apache.qpid.server.store.DurableConfigurationStore;
+import org.apache.qpid.server.util.BrokerTestHelper;
+import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode;
+import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNodeFactory;
+import org.apache.qpid.test.utils.QpidTestCase;
+import org.apache.qpid.util.FileUtils;
+
+import com.sleepycat.je.rep.ReplicatedEnvironment;
+import com.sleepycat.je.rep.ReplicationConfig;
+
+public class BDBHAVirtualHostNodeTest extends QpidTestCase
+{
+
+    private Broker<?> _broker;
+    private File _bdbStorePath;
+    private VirtualHostNode<?> _virtualHostNode;
+    private TaskExecutor _taskExecutor;
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+
+        _broker = BrokerTestHelper.createBrokerMock();
+
+        _taskExecutor = new TaskExecutor();
+        _taskExecutor.start();
+        when(_broker.getTaskExecutor()).thenReturn(_taskExecutor);
+
+        _bdbStorePath = new File(TMP_FOLDER, getTestName() + "." + System.currentTimeMillis());
+        _bdbStorePath.deleteOnExit();
+    }
+
+    @Override
+    protected void tearDown() throws Exception
+    {
+        try
+        {
+            if (_virtualHostNode != null)
+            {
+                _virtualHostNode.setDesiredState(_virtualHostNode.getState(), State.STOPPED);
+            }
+        }
+        finally
+        {
+            if (_taskExecutor != null)
+            {
+                _taskExecutor.stopImmediately();
+            }
+            if (_bdbStorePath != null)
+            {
+                FileUtils.delete(_bdbStorePath, true);
+            }
+            super.tearDown();
+        }
+    }
+
+    public void testCreateAndActivateVirtualHostNode() throws Exception
+    {
+        String repStreamTimeout = "2 h";
+        String nodeName = "node";
+        String groupName = "group";
+        String nodeHostPort = "localhost:" + findFreePort();
+        String helperHostPort = nodeHostPort;
+        String durability = "NO_SYNC,SYNC,NONE";
+        UUID id = UUID.randomUUID();
+
+        Map<String, Object> attributes = new HashMap<String, Object>();
+        attributes.put(BDBHAVirtualHostNode.TYPE, "BDB_HA");
+        attributes.put(BDBHAVirtualHostNode.ID, id);
+        attributes.put(BDBHAVirtualHostNode.NAME, nodeName);
+        attributes.put(BDBHAVirtualHostNode.GROUP_NAME, groupName);
+        attributes.put(BDBHAVirtualHostNode.ADDRESS, nodeHostPort);
+        attributes.put(BDBHAVirtualHostNode.HELPER_ADDRESS, helperHostPort);
+        attributes.put(BDBHAVirtualHostNode.DURABILITY, durability);
+        attributes.put(BDBHAVirtualHostNode.STORE_PATH, _bdbStorePath);
+        attributes.put(BDBHAVirtualHostNode.REPLICATED_ENVIRONMENT_CONFIGURATION,
+                Collections.singletonMap(ReplicationConfig.REP_STREAM_TIMEOUT, repStreamTimeout));
+
+        ConfiguredObjectTypeFactory<?> factory = new BDBHAVirtualHostNodeFactory();
+
+        BDBHAVirtualHostNode<?> node = (BDBHAVirtualHostNode<?>) factory.create(null, attributes, _broker);
+
+        final CountDownLatch virtualHostAddedLatch = new CountDownLatch(1);
+        final CountDownLatch virtualHostStateChangeLatch = new CountDownLatch(1);
+        node.addChangeListener(new ConfigurationChangeListener()
+        {
+            @Override
+            public void stateChanged(ConfiguredObject object, State oldState, State newState)
+            {
+                if (object instanceof VirtualHost)
+                {
+                    virtualHostStateChangeLatch.countDown();
+                }
+            }
+
+            @Override
+            public void childRemoved(ConfiguredObject object, ConfiguredObject child)
+            {
+            }
+
+            @Override
+            public void childAdded(ConfiguredObject object, ConfiguredObject child)
+            {
+                child.addChangeListener(this);
+                virtualHostAddedLatch.countDown();
+            }
+
+            @Override
+            public void attributeSet(ConfiguredObject object, String attributeName, Object oldAttributeValue, Object newAttributeValue)
+            {
+            }
+        });
+        assertEquals(State.ACTIVE, node.setDesiredState(node.getState(), State.ACTIVE));
+
+        DurableConfigurationStore store = node.getConfigurationStore();
+        assertNotNull(store);
+
+        BDBMessageStore bdbMessageStore = (BDBMessageStore) store;
+        ReplicatedEnvironment environment = (ReplicatedEnvironment) bdbMessageStore.getEnvironmentFacade().getEnvironment();
+        ReplicationConfig replicationConfig = environment.getRepConfig();
+
+        assertEquals(nodeName, environment.getNodeName());
+        assertEquals(groupName, environment.getGroup().getName());
+        assertEquals(nodeHostPort, replicationConfig.getNodeHostPort());
+        assertEquals(helperHostPort, replicationConfig.getHelperHosts());
+        assertEquals(durability, environment.getConfig().getDurability().toString());
+        assertEquals("Unexpected JE replication stream timeout", repStreamTimeout, replicationConfig.getConfigParam(ReplicationConfig.REP_STREAM_TIMEOUT));
+
+        assertTrue("Virtual host child has not been added", virtualHostAddedLatch.await(30, TimeUnit.SECONDS));
+        assertTrue("Virtual host child has not had a state change", virtualHostStateChangeLatch.await(30, TimeUnit.SECONDS));
+        VirtualHost<?, ?, ?> virtualHost = node.getVirtualHost();
+        assertNotNull("Virtual host child was not added", virtualHost);
+        assertEquals("Unexpected virtual host name", groupName, virtualHost.getName());
+        assertEquals("Unexpected virtual host store", store, virtualHost.getMessageStore());
+        assertEquals("Unexpected virtual host state", State.ACTIVE, virtualHost.getState());
+
+        State currentState = node.setDesiredState(State.ACTIVE, State.STOPPED);
+        assertEquals("Unexpected state returned after stop", State.STOPPED, currentState);
+        assertEquals("Unexpected state", State.STOPPED, node.getState());
+
+        assertNull("Virtual host is not destroyed", node.getVirtualHost());
+
+        currentState = node.setDesiredState(State.STOPPED, State.DELETED);
+        assertEquals("Unexpected state returned after delete", State.DELETED, currentState);
+        assertEquals("Unexpected state", State.DELETED, node.getState());
+        assertFalse("Store still exists", _bdbStorePath.exists());
+    }
+
+}
+
+

Modified: qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom7To8Test.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom7To8Test.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom7To8Test.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom7To8Test.java Mon Apr 21 14:28:29 2014
@@ -160,6 +160,7 @@ public class UpgradeFrom7To8Test extends
     {
         Map<String, Object> expectedVirtualHostEntry = new HashMap<String, Object>();
         expectedVirtualHostEntry.put("modelVersion", modelVersion);
+        expectedVirtualHostEntry.put(VirtualHost.NAME, getVirtualHost().getName());
 
         UUID expectedUUID = UUIDGenerator.generateVhostUUID(getVirtualHost().getName());
         return Collections.singletonMap(expectedUUID, expectedVirtualHostEntry);

Modified: qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBBackupTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBBackupTest.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBBackupTest.java (original)
+++ qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBBackupTest.java Mon Apr 21 14:28:29 2014
@@ -31,9 +31,8 @@ import javax.jms.MessageConsumer;
 import javax.jms.Session;
 
 import org.apache.log4j.Logger;
-
-import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.store.MessageStore;
+import org.apache.qpid.server.model.VirtualHostNode;
+import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBVirtualHostNode;
 import org.apache.qpid.test.utils.Piper;
 import org.apache.qpid.test.utils.QpidBrokerTestCase;
 import org.apache.qpid.util.FileUtils;
@@ -63,9 +62,9 @@ public class BDBBackupTest extends QpidB
         super.setUp();
         _backupToDir = new File(SYSTEM_TMP_DIR + File.separator + getTestName());
         _backupToDir.mkdirs();
-        Map<String, Object> virtualHostAttributes = getBrokerConfiguration().getObjectAttributes(VirtualHost.class,TEST_VHOST);
-        Map<String, Object> messageStoreSettings = (Map<String, Object>) virtualHostAttributes.get(VirtualHost.MESSAGE_STORE_SETTINGS);
-        _backupFromDir = new File(Strings.expand((String) messageStoreSettings.get(MessageStore.STORE_PATH)));
+
+        Map<String, Object> virtualHostNodeAttributes = getBrokerConfiguration().getObjectAttributes(VirtualHostNode.class, TEST_VHOST);
+        _backupFromDir = new File(Strings.expand((String) virtualHostNodeAttributes.get(BDBVirtualHostNode.STORE_PATH)));
         boolean fromDirExistsAndIsDir = _backupFromDir.isDirectory();
         assertTrue("backupFromDir " + _backupFromDir + " should already exist", fromDirExistsAndIsDir);
     }

Modified: qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBUpgradeTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBUpgradeTest.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBUpgradeTest.java (original)
+++ qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBUpgradeTest.java Mon Apr 21 14:28:29 2014
@@ -42,18 +42,17 @@ import javax.jms.TopicSubscriber;
 import javax.management.openmbean.CompositeData;
 import javax.management.openmbean.TabularDataSupport;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.qpid.management.common.mbeans.ManagedExchange;
 import org.apache.qpid.management.common.mbeans.ManagedQueue;
-import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.store.MessageStore;
+import org.apache.qpid.server.model.VirtualHostNode;
+import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBVirtualHostNode;
 import org.apache.qpid.test.utils.JMXTestUtils;
 import org.apache.qpid.test.utils.QpidBrokerTestCase;
 import org.apache.qpid.test.utils.TestBrokerConfiguration;
 import org.apache.qpid.util.FileUtils;
 import org.apache.qpid.util.Strings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Tests upgrading a BDB store on broker startup.
@@ -86,10 +85,8 @@ public class BDBUpgradeTest extends Qpid
     public void setUp() throws Exception
     {
         assertNotNull("QPID_WORK must be set", QPID_WORK_ORIG);
-        Map<String, Object> virtualHostAttributes = getBrokerConfiguration().getObjectAttributes(VirtualHost.class,TestBrokerConfiguration.ENTRY_NAME_VIRTUAL_HOST);
-        @SuppressWarnings("unchecked")
-        Map<String, Object> messageStoreSettings = (Map<String, Object>) virtualHostAttributes.get(VirtualHost.MESSAGE_STORE_SETTINGS);
-        _storeLocation = Strings.expand((String)messageStoreSettings.get(MessageStore.STORE_PATH));
+        Map<String, Object> virtualHostNodeAttributes = getBrokerConfiguration().getObjectAttributes(VirtualHostNode.class, TestBrokerConfiguration.ENTRY_NAME_VIRTUAL_HOST);
+        _storeLocation = Strings.expand((String)virtualHostNodeAttributes.get(BDBVirtualHostNode.STORE_PATH));
 
         //Clear the two target directories if they exist.
         File directory = new File(_storeLocation);

Modified: qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HAClusterBlackboxTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HAClusterBlackboxTest.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HAClusterBlackboxTest.java (original)
+++ qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HAClusterBlackboxTest.java Mon Apr 21 14:28:29 2014
@@ -146,7 +146,6 @@ public class HAClusterBlackboxTest exten
             assertEquals("Failover occurred unexpectedly", 1L, _failoverLatch.getCount());
         }
 
-
         @Override
         public void failoverComplete()
         {

Modified: qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HAClusterTwoNodeTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HAClusterTwoNodeTest.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HAClusterTwoNodeTest.java (original)
+++ qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HAClusterTwoNodeTest.java Mon Apr 21 14:28:29 2014
@@ -169,8 +169,8 @@ public class HAClusterTwoNodeTest extend
     public void testSecondaryDesignatedAsPrimaryAfterOrginalPrimaryStopped() throws Exception
     {
         startCluster(true);
-        _clusterCreator.stopNode(_clusterCreator.getBrokerPortNumberOfPrimary());
         final ManagedBDBHAMessageStore storeBean = getStoreBeanForNodeAtBrokerPort(_clusterCreator.getBrokerPortNumberOfSecondaryNode());
+        _clusterCreator.stopNode(_clusterCreator.getBrokerPortNumberOfPrimary());
 
         assertFalse("Expected node to NOT be set as designated primary", storeBean.getDesignatedPrimary());
         storeBean.setDesignatedPrimary(true);

Modified: qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HATestClusterCreator.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HATestClusterCreator.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HATestClusterCreator.java (original)
+++ qpid/trunk/qpid/java/bdbstore/systests/src/main/java/org/apache/qpid/server/store/berkeleydb/HATestClusterCreator.java Mon Apr 21 14:28:29 2014
@@ -38,19 +38,18 @@ import java.util.concurrent.TimeUnit;
 
 import javax.jms.Connection;
 
-import com.sleepycat.je.rep.ReplicationConfig;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
-
 import org.apache.qpid.client.AMQConnection;
 import org.apache.qpid.client.AMQConnectionURL;
-import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.store.MessageStore;
-import org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacadeFactory;
+import org.apache.qpid.server.model.VirtualHostNode;
+import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode;
 import org.apache.qpid.test.utils.QpidBrokerTestCase;
 import org.apache.qpid.test.utils.TestBrokerConfiguration;
 import org.apache.qpid.url.URLSyntaxException;
 
+import com.sleepycat.je.rep.ReplicationConfig;
+
 public class HATestClusterCreator
 {
     protected static final Logger LOGGER = Logger.getLogger(HATestClusterCreator.class);
@@ -82,7 +81,7 @@ public class HATestClusterCreator
     {
         _testcase = testcase;
         _virtualHostName = virtualHostName;
-        _groupName = "group" + _testcase.getName();
+        _groupName = virtualHostName;
         _ipAddressOfBroker = getIpAddressOfBrokerHost();
         _numberOfNodes = numberOfNodes;
         _bdbHelperPort = 0;
@@ -104,21 +103,23 @@ public class HATestClusterCreator
             }
 
             String nodeName = getNodeNameForNodeAt(bdbPort);
-            Map<String, Object> messageStoreSettings = new HashMap<String, Object>();
-            messageStoreSettings.put(MessageStore.STORE_PATH, System.getProperty("QPID_WORK") + File.separator + brokerPort);
-            messageStoreSettings.put(ReplicatedEnvironmentFacadeFactory.GROUP_NAME, _groupName);
-            messageStoreSettings.put(ReplicatedEnvironmentFacadeFactory.NODE_NAME, nodeName);
-            messageStoreSettings.put(ReplicatedEnvironmentFacadeFactory.NODE_ADDRESS, getNodeHostPortForNodeAt(bdbPort));
-            messageStoreSettings.put(ReplicatedEnvironmentFacadeFactory.HELPER_ADDRESS, getHelperHostPort());
+
+            Map<String, Object> virtualHostNodeAttributes = new HashMap<String, Object>();
+            virtualHostNodeAttributes.put(BDBHAVirtualHostNode.STORE_PATH, System.getProperty("QPID_WORK") + File.separator + brokerPort);
+            virtualHostNodeAttributes.put(BDBHAVirtualHostNode.GROUP_NAME, _groupName);
+            virtualHostNodeAttributes.put(BDBHAVirtualHostNode.NAME, nodeName);
+            virtualHostNodeAttributes.put(BDBHAVirtualHostNode.ADDRESS, getNodeHostPortForNodeAt(bdbPort));
+            virtualHostNodeAttributes.put(BDBHAVirtualHostNode.HELPER_ADDRESS, getHelperHostPort());
+            virtualHostNodeAttributes.put(BDBHAVirtualHostNode.TYPE, "BDB_HA");
+
             Map<String, String> repSettings = new HashMap<String, String>();
             repSettings.put(ReplicationConfig.INSUFFICIENT_REPLICAS_TIMEOUT, "2 s");
             repSettings.put(ReplicationConfig.ELECTIONS_PRIMARY_RETRIES, "0");
-            messageStoreSettings.put(ReplicatedEnvironmentFacadeFactory.REPLICATION_CONFIG, repSettings );
+            virtualHostNodeAttributes.put(BDBHAVirtualHostNode.REPLICATED_ENVIRONMENT_CONFIGURATION, repSettings);
 
             TestBrokerConfiguration brokerConfiguration = _testcase.getBrokerConfiguration(brokerPort);
             brokerConfiguration.addJmxManagementConfiguration();
-            brokerConfiguration.setObjectAttribute(VirtualHost.class, _virtualHostName, VirtualHost.TYPE, BDBHAVirtualHost.TYPE);
-            brokerConfiguration.setObjectAttribute(VirtualHost.class, _virtualHostName, VirtualHost.MESSAGE_STORE_SETTINGS, messageStoreSettings);
+            brokerConfiguration.setObjectAttributes(VirtualHostNode.class, _virtualHostName, virtualHostNodeAttributes);
 
             brokerPort = _testcase.getNextAvailable(bdbPort + 1);
         }
@@ -132,10 +133,8 @@ public class HATestClusterCreator
             throw new IllegalArgumentException("Only two nodes groups have the concept of primary");
         }
         TestBrokerConfiguration config = _testcase.getBrokerConfiguration(_primaryBrokerPort);
-        @SuppressWarnings("unchecked")
-        Map<String, Object> storeSetting = (Map<String, Object>) config.getObjectAttributes(VirtualHost.class, _virtualHostName).get(VirtualHost.MESSAGE_STORE_SETTINGS);
-        storeSetting.put(ReplicatedEnvironmentFacadeFactory.DESIGNATED_PRIMARY, designatedPrimary);
-        config.setObjectAttribute(VirtualHost.class, _virtualHostName, VirtualHost.MESSAGE_STORE_SETTINGS, storeSetting);
+        String nodeName = getNodeNameForNodeAt(_brokerPortToBdbPortMap.get(_primaryBrokerPort));
+        config.setObjectAttribute(VirtualHostNode.class, nodeName, BDBHAVirtualHostNode.DESIGNATED_PRIMARY, designatedPrimary);
         config.setSaved(false);
     }
 
@@ -369,15 +368,15 @@ public class HATestClusterCreator
     public void modifyClusterNodeBdbAddress(int brokerPortNumberToBeMoved, int newBdbPort)
     {
         TestBrokerConfiguration config = _testcase.getBrokerConfiguration(brokerPortNumberToBeMoved);
+        String nodeName = getNodeNameForNodeAt(_brokerPortToBdbPortMap.get(brokerPortNumberToBeMoved));
+
+        Map<String, Object> objectAttributes = config.getObjectAttributes(VirtualHostNode.class, nodeName);
 
-        @SuppressWarnings("unchecked")
-        Map<String, Object> storeSetting = (Map<String, Object>) config.getObjectAttributes(VirtualHost.class, _virtualHostName).get(VirtualHost.MESSAGE_STORE_SETTINGS);
-        String oldBdbHostPort = (String) storeSetting.get(ReplicatedEnvironmentFacadeFactory.NODE_ADDRESS);
+        String oldBdbHostPort = (String)objectAttributes.get(BDBHAVirtualHostNode.ADDRESS);
         String[] oldHostAndPort = StringUtils.split(oldBdbHostPort, ":");
         String oldHost = oldHostAndPort[0];
         String newBdbHostPort = oldHost + ":" + newBdbPort;
-        storeSetting.put(ReplicatedEnvironmentFacadeFactory.NODE_ADDRESS, newBdbHostPort);
-        config.setObjectAttribute(VirtualHost.class, _virtualHostName, VirtualHost.MESSAGE_STORE_SETTINGS, storeSetting);
+        config.setObjectAttribute(VirtualHostNode.class, nodeName, BDBHAVirtualHostNode.ADDRESS, newBdbHostPort);
         config.setSaved(false);
     }
 

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/BrokerStoreUpgrader.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/BrokerStoreUpgrader.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/BrokerStoreUpgrader.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/BrokerStoreUpgrader.java Mon Apr 21 14:28:29 2014
@@ -1,4 +1,4 @@
-package org.apache.qpid.server.configuration.startup;/*
+/*
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -18,7 +18,7 @@ package org.apache.qpid.server.configura
  * under the License.
  *
  */
-
+package org.apache.qpid.server.configuration.startup;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -30,7 +30,6 @@ import java.util.Set;
 import java.util.UUID;
 
 import org.apache.log4j.Logger;
-
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.qpid.server.configuration.store.StoreConfigurationChangeListener;
 import org.apache.qpid.server.model.Broker;
@@ -41,82 +40,58 @@ import org.apache.qpid.server.store.Conf
 import org.apache.qpid.server.store.ConfiguredObjectRecordImpl;
 import org.apache.qpid.server.store.DurableConfigurationStore;
 import org.apache.qpid.server.store.DurableConfigurationStoreUpgrader;
-import org.apache.qpid.server.store.NonNullUpgrader;
+import org.apache.qpid.server.store.NullUpgrader;
 import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler;
 import org.apache.qpid.server.util.Action;
 
 public class BrokerStoreUpgrader
 {
-    private static Logger LOGGER = Logger.getLogger(BrokerStoreUpgrader.class);
-
-    private static Map<String, UpgraderPhaseFactory> _upgraders = new HashMap<String, UpgraderPhaseFactory>();
     private final SystemContext _systemContext;
+    private Map<String, UpgraderPhaseFactory> _upgraders = new HashMap<String, UpgraderPhaseFactory>();
+
+
+    // Note: don't use externally defined constants in upgraders in case they change, the values here MUST stay the same
+    // no matter what changes are made to the code in the future
 
     public BrokerStoreUpgrader(SystemContext systemContext)
     {
         _systemContext = systemContext;
+
+        register(new Upgrader_1_0_to_1_1());
+        register(new Upgrader_1_1_to_1_2());
+        register(new Upgrader_1_2_to_1_3());
+        register(new Upgrader_1_3_to_1_4());
     }
 
-    private static abstract class UpgraderPhaseFactory
+    private void register(UpgraderPhaseFactory factory)
     {
-        private final String _toVersion;
-
-        protected UpgraderPhaseFactory(String fromVersion, String toVersion)
-        {
-            _upgraders.put(fromVersion, this);
-            _toVersion = toVersion;
-        }
-
-        public String getToVersion()
-        {
-            return _toVersion;
-        }
-
-        public abstract BrokerStoreUpgraderPhase newInstance();
+        _upgraders.put(factory.getFromVersion(), factory);
     }
 
-    private static abstract class BrokerStoreUpgraderPhase extends NonNullUpgrader
+    private final class Upgrader_1_0_to_1_1 extends UpgraderPhaseFactory
     {
-        private final String _toVersion;
-
-        protected BrokerStoreUpgraderPhase(String toVersion)
+        private Upgrader_1_0_to_1_1()
         {
-            _toVersion = toVersion;
+            super("1.0", "1.1");
         }
 
-
-        protected ConfiguredObjectRecord upgradeBrokerRecord(ConfiguredObjectRecord record)
-        {
-            Map<String, Object> updatedAttributes = new HashMap<String, Object>(record.getAttributes());
-            updatedAttributes.put(Broker.MODEL_VERSION, _toVersion);
-            record = createModifiedRecord(record, updatedAttributes);
-            getUpdateMap().put(record.getId(), record);
-            return record;
-        }
-    }
-
-    // Note: don't use externally defined constants in upgraders in case they change, the values here MUST stay the same
-    // no matter what changes are made to the code in the future
-
-    private final static UpgraderPhaseFactory UPGRADE_1_0 = new UpgraderPhaseFactory("1.0", "1.1")
-    {
         @Override
-        public BrokerStoreUpgraderPhase newInstance()
+        public StoreUpgraderPhase newInstance()
         {
-            return new BrokerStoreUpgraderPhase(getToVersion())
+            return new StoreUpgraderPhase(Broker.MODEL_VERSION, getToVersion())
             {
                 @Override
                 public void configuredObject(ConfiguredObjectRecord record)
                 {
                     if (record.getType().equals("Broker"))
                     {
-                        record = upgradeBrokerRecord(record);
+                        record = upgradeRootRecord(record);
                     }
                     else if (record.getType().equals("VirtualHost") && record.getAttributes().containsKey("storeType"))
                     {
                         Map<String, Object> updatedAttributes = new HashMap<String, Object>(record.getAttributes());
                         updatedAttributes.put("type", "STANDARD");
-                        record = createModifiedRecord(record, updatedAttributes);
+                        record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
                         getUpdateMap().put(record.getId(), record);
                     }
 
@@ -131,24 +106,19 @@ public class BrokerStoreUpgrader
                 }
             };
         }
-
-
-    };
-
-
-    protected static ConfiguredObjectRecordImpl createModifiedRecord(final ConfiguredObjectRecord record,
-                                                                     final Map<String, Object> updatedAttributes)
-    {
-
-        return new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
     }
 
-    private final static UpgraderPhaseFactory UPGRADE_1_1 = new UpgraderPhaseFactory("1.1", "1.2")
+    private static final class Upgrader_1_1_to_1_2 extends UpgraderPhaseFactory
     {
+        private Upgrader_1_1_to_1_2()
+        {
+            super("1.1", "1.2");
+        }
+
         @Override
-        public BrokerStoreUpgraderPhase newInstance()
+        public StoreUpgraderPhase newInstance()
         {
-            return new BrokerStoreUpgraderPhase(getToVersion())
+            return new StoreUpgraderPhase(Broker.MODEL_VERSION, getToVersion())
             {
 
                 @Override
@@ -156,7 +126,7 @@ public class BrokerStoreUpgrader
                 {
                     if (record.getType().equals("Broker"))
                     {
-                        record = upgradeBrokerRecord(record);
+                        record = upgradeRootRecord(record);
                     }
 
                     getNextUpgrader().configuredObject(record);
@@ -170,15 +140,19 @@ public class BrokerStoreUpgrader
                 }
             };
         }
-    };
-
+    }
 
-    private final static UpgraderPhaseFactory UPGRADE_1_2 = new UpgraderPhaseFactory("1.2", "1.3")
+    private static final class Upgrader_1_2_to_1_3 extends UpgraderPhaseFactory
     {
+        private Upgrader_1_2_to_1_3()
+        {
+            super("1.2", "1.3");
+        }
+
         @Override
-        public BrokerStoreUpgraderPhase newInstance()
+        public StoreUpgraderPhase newInstance()
         {
-            return new BrokerStoreUpgraderPhase(getToVersion())
+            return new StoreUpgraderPhase(Broker.MODEL_VERSION, getToVersion())
             {
 
                 @Override
@@ -188,7 +162,7 @@ public class BrokerStoreUpgrader
                     {
                         Map<String, Object> updatedAttributes = new HashMap<String, Object>(record.getAttributes());
                         updatedAttributes.put("trustStoreType", updatedAttributes.remove("type"));
-                        record = createModifiedRecord(record, updatedAttributes);
+                        record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
                         getUpdateMap().put(record.getId(), record);
 
                     }
@@ -196,13 +170,13 @@ public class BrokerStoreUpgrader
                     {
                         Map<String, Object> updatedAttributes = new HashMap<String, Object>(record.getAttributes());
                         updatedAttributes.put("keyStoreType", updatedAttributes.remove("type"));
-                        record = createModifiedRecord(record, updatedAttributes);
+                        record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
                         getUpdateMap().put(record.getId(), record);
 
                     }
                     else if (record.getType().equals("Broker"))
                     {
-                        record = upgradeBrokerRecord(record);
+                        record = upgradeRootRecord(record);
                     }
 
                     getNextUpgrader().configuredObject(record);
@@ -216,17 +190,22 @@ public class BrokerStoreUpgrader
                 }
             };
         }
-    };
-
+    }
 
-    private final static UpgraderPhaseFactory UPGRADE_1_3 = new UpgraderPhaseFactory("1.3", "1.4")
+    private static final class Upgrader_1_3_to_1_4 extends UpgraderPhaseFactory
     {
+        private Upgrader_1_3_to_1_4()
+        {
+            super("1.3", "1.4");
+        }
+
         @Override
-        public BrokerStoreUpgraderPhase newInstance()
+        public StoreUpgraderPhase newInstance()
         {
-            return new BrokerStoreUpgraderPhase(getToVersion())
+            return new StoreUpgraderPhase(Broker.MODEL_VERSION, getToVersion())
             {
 
+                @SuppressWarnings("serial")
                 private Map<String, VirtualHostEntryUpgrader> _vhostUpgraderMap = new HashMap<String, VirtualHostEntryUpgrader>()
                 {{
                     put("BDB_HA", new BdbHaVirtualHostUpgrader());
@@ -257,13 +236,13 @@ public class BrokerStoreUpgrader
                     {
                         Map<String, Object> updatedAttributes = new HashMap<String, Object>(record.getAttributes());
                         updatedAttributes.put("type", updatedAttributes.remove("pluginType"));
-                        record = createModifiedRecord(record, updatedAttributes);
+                        record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
                         getUpdateMap().put(record.getId(), record);
 
                     }
                     else if (record.getType().equals("Broker"))
                     {
-                        record = upgradeBrokerRecord(record);
+                        record = upgradeRootRecord(record);
                     }
 
                     getNextUpgrader().configuredObject(record);
@@ -277,9 +256,7 @@ public class BrokerStoreUpgrader
                 }
             };
         }
-
-
-    };
+    }
 
     private static interface VirtualHostEntryUpgrader
     {
@@ -288,6 +265,7 @@ public class BrokerStoreUpgrader
 
     private static class StandardVirtualHostUpgrader implements VirtualHostEntryUpgrader
     {
+        @SuppressWarnings("serial")
         Map<String, AttributesTransformer> _messageStoreAttributeTransformers = new HashMap<String, AttributesTransformer>()
         {{
                 put("DERBY", new AttributesTransformer().
@@ -317,6 +295,7 @@ public class BrokerStoreUpgrader
                         addAttributeTransformer("storeType", mutateAttributeValue("JDBC")));
             }};
 
+        @SuppressWarnings("serial")
         Map<String, AttributesTransformer> _configurationStoreAttributeTransformers = new HashMap<String, AttributesTransformer>()
         {{
                 put("DERBY", new AttributesTransformer().
@@ -581,12 +560,9 @@ public class BrokerStoreUpgrader
         }
     }
 
-
-
-
-    public Broker upgrade(DurableConfigurationStore store)
+    public Broker<?> upgrade(DurableConfigurationStore store)
     {
-        final BrokerStoreRecoveryHandler recoveryHandler = new BrokerStoreRecoveryHandler(_systemContext, store);
+        final BrokerStoreRecoveryHandler recoveryHandler = new BrokerStoreRecoveryHandler(_systemContext, store, _upgraders);
         store.openConfigurationStore(_systemContext, Collections.<String,Object>emptyMap());
         store.visitConfiguredObjectRecords(recoveryHandler);
 
@@ -602,11 +578,13 @@ public class BrokerStoreUpgrader
         private DurableConfigurationStore _store;
         private final Map<UUID, ConfiguredObjectRecord> _records = new HashMap<UUID, ConfiguredObjectRecord>();
         private final SystemContext _systemContext;
+        private Map<String, UpgraderPhaseFactory> _upgraders;
 
-        private BrokerStoreRecoveryHandler(final SystemContext systemContext, DurableConfigurationStore store)
+        private BrokerStoreRecoveryHandler(final SystemContext systemContext, DurableConfigurationStore store, Map<String, UpgraderPhaseFactory> upgraders)
         {
             _systemContext = systemContext;
             _store = store;
+            _upgraders = upgraders;
         }
 
 
@@ -631,7 +609,7 @@ public class BrokerStoreUpgrader
             {
                 LOGGER.debug("Adding broker store upgrader from model version: " + version);
                 final UpgraderPhaseFactory upgraderPhaseFactory = _upgraders.get(version);
-                BrokerStoreUpgraderPhase upgrader = upgraderPhaseFactory.newInstance();
+                StoreUpgraderPhase upgrader = upgraderPhaseFactory.newInstance();
                 if(_upgrader == null)
                 {
                     _upgrader = upgrader;
@@ -645,69 +623,11 @@ public class BrokerStoreUpgrader
 
             if(_upgrader == null)
             {
-                _upgrader = new DurableConfigurationStoreUpgrader()
-                {
-
-                    @Override
-                    public void configuredObject(final ConfiguredObjectRecord record)
-                    {
-                    }
-
-                    @Override
-                    public void complete()
-                    {
-                    }
-
-                    @Override
-                    public void setNextUpgrader(final DurableConfigurationStoreUpgrader upgrader)
-                    {
-                    }
-
-                    @Override
-                    public Map<UUID, ConfiguredObjectRecord> getUpdatedRecords()
-                    {
-                        return Collections.emptyMap();
-                    }
-
-                    @Override
-                    public Map<UUID, ConfiguredObjectRecord> getDeletedRecords()
-                    {
-                        return Collections.emptyMap();
-                    }
-                };
+                _upgrader = new NullUpgrader();
             }
             else
             {
-                _upgrader.setNextUpgrader(new DurableConfigurationStoreUpgrader()
-                {
-                    @Override
-                    public void configuredObject(final ConfiguredObjectRecord record)
-                    {
-                    }
-
-                    @Override
-                    public void complete()
-                    {
-
-                    }
-
-                    @Override
-                    public void setNextUpgrader(final DurableConfigurationStoreUpgrader upgrader)
-                    {
-                    }
-
-                    @Override
-                    public Map<UUID, ConfiguredObjectRecord> getUpdatedRecords()
-                    {
-                        return Collections.emptyMap();
-                    }
-
-                    @Override
-                    public Map<UUID, ConfiguredObjectRecord> getDeletedRecords()
-                    {
-                        return Collections.emptyMap();
-                    }
-                });
+                _upgrader.setNextUpgrader(new NullUpgrader());
             }
 
             for(ConfiguredObjectRecord record : _records.values())

Added: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgraderPhase.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgraderPhase.java?rev=1588886&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgraderPhase.java (added)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgraderPhase.java Mon Apr 21 14:28:29 2014
@@ -0,0 +1,49 @@
+/*
+ *
+ * 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.configuration.startup;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.qpid.server.store.ConfiguredObjectRecord;
+import org.apache.qpid.server.store.ConfiguredObjectRecordImpl;
+import org.apache.qpid.server.store.NonNullUpgrader;
+
+public abstract class StoreUpgraderPhase extends NonNullUpgrader
+{
+    private final String _toVersion;
+    private final String _versionAttributeName;
+
+    protected StoreUpgraderPhase(String versionAttributeName, String toVersion)
+    {
+        _toVersion = toVersion;
+        _versionAttributeName = versionAttributeName;
+    }
+
+    protected ConfiguredObjectRecord upgradeRootRecord(ConfiguredObjectRecord record)
+    {
+        Map<String, Object> updatedAttributes = new HashMap<String, Object>(record.getAttributes());
+        updatedAttributes.put(_versionAttributeName, _toVersion);
+        record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
+        getUpdateMap().put(record.getId(), record);
+        return record;
+    }
+}
\ No newline at end of file

Copied: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/UpgraderPhaseFactory.java (from r1588885, qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMemoryMessageStoreFactory.java)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/UpgraderPhaseFactory.java?p2=qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/UpgraderPhaseFactory.java&p1=qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMemoryMessageStoreFactory.java&r1=1588885&r2=1588886&rev=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/TestMemoryMessageStoreFactory.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/UpgraderPhaseFactory.java Mon Apr 21 14:28:29 2014
@@ -18,30 +18,28 @@
  * under the License.
  *
  */
+package org.apache.qpid.server.configuration.startup;
 
-package org.apache.qpid.server.store;
-
-import java.util.Map;
-
-import org.apache.qpid.server.plugin.MessageStoreFactory;
-
-public class TestMemoryMessageStoreFactory implements MessageStoreFactory
+public abstract class UpgraderPhaseFactory
 {
+    private final String _toVersion;
+    private final String _fromVersion;
 
-    @Override
-    public String getType()
+    protected UpgraderPhaseFactory(String fromVersion, String toVersion)
     {
-        return TestMemoryMessageStore.TYPE;
+        _toVersion = toVersion;
+        _fromVersion = fromVersion;
     }
 
-    @Override
-    public MessageStore createMessageStore()
+    public String getToVersion()
     {
-        return new TestMemoryMessageStore();
+        return _toVersion;
     }
 
-    @Override
-    public void validateAttributes(Map<String, Object> attributes)
+    public String getFromVersion()
     {
+        return _fromVersion;
     }
-}
+
+    public abstract StoreUpgraderPhase newInstance();
+}
\ No newline at end of file

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListener.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListener.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListener.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListener.java Mon Apr 21 14:28:29 2014
@@ -34,6 +34,7 @@ import org.apache.qpid.server.model.Conf
 import org.apache.qpid.server.model.Model;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.store.DurableConfigurationStore;
 
 public class StoreConfigurationChangeListener implements ConfigurationChangeListener
@@ -59,8 +60,8 @@ public class StoreConfigurationChangeLis
     @Override
     public void childAdded(ConfiguredObject object, ConfiguredObject child)
     {
-        // exclude VirtualHost children from storing in broker store
-        if (!(object instanceof VirtualHost))
+        // exclude VirtualHostNode children from storing in broker store
+        if (!(object instanceof VirtualHostNode))
         {
             child.addChangeListener(this);
             _store.update(true,child.asObjectRecord());

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObjectTypeFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObjectTypeFactory.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObjectTypeFactory.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObjectTypeFactory.java Mon Apr 21 14:28:29 2014
@@ -61,7 +61,7 @@ abstract public class AbstractConfigured
 
     protected abstract X createInstance(Map<String, Object> attributes, ConfiguredObject<?>... parents);
 
-    public final <C extends ConfiguredObject<C>> C getParent(Class<C> parentClass, ConfiguredObject<?>... parents)
+    public final <C extends ConfiguredObject<?>> C getParent(Class<C> parentClass, ConfiguredObject<?>... parents)
     {
 
         if(!parents[0].getModel().getParentTypes((Class<? extends ConfiguredObject>) getCategoryClass()).contains(

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java Mon Apr 21 14:28:29 2014
@@ -136,7 +136,7 @@ public interface Broker<X extends Broker
 
 
     //children
-    Collection < VirtualHost<?,?,?> > getVirtualHosts();
+    Collection<VirtualHostNode<?>> getVirtualHostNodes();
 
     Collection<Port<?>> getPorts();
 

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java Mon Apr 21 14:28:29 2014
@@ -38,9 +38,10 @@ public final class BrokerModel extends M
      * 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
      */
-    public static final int MODEL_MAJOR_VERSION = 1;
-    public static final int MODEL_MINOR_VERSION = 4;
+    public static final int MODEL_MAJOR_VERSION = 2;
+    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 =
@@ -60,7 +61,7 @@ public final class BrokerModel extends M
 
         addRelationship(SystemContext.class, Broker.class);
 
-        addRelationship(Broker.class, VirtualHost.class);
+        addRelationship(Broker.class, VirtualHostNode.class);
         addRelationship(Broker.class, Port.class);
         addRelationship(Broker.class, AccessControlProvider.class);
         addRelationship(Broker.class, AuthenticationProvider.class);
@@ -69,6 +70,8 @@ public final class BrokerModel extends M
         addRelationship(Broker.class, KeyStore.class);
         addRelationship(Broker.class, Plugin.class);
 
+        addRelationship(VirtualHostNode.class, VirtualHost.class);
+
         addRelationship(VirtualHost.class, Exchange.class);
         addRelationship(VirtualHost.class, Queue.class);
         addRelationship(VirtualHost.class, Connection.class);

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java Mon Apr 21 14:28:29 2014
@@ -44,8 +44,8 @@ public interface VirtualHost<X extends V
     String SUPPORTED_QUEUE_TYPES                = "supportedQueueTypes";
     String SECURITY_ACL                         = "securityAcl";
     String HOUSE_KEEPING_THREAD_COUNT           = "houseKeepingThreadCount";
-    String CONFIGURATION_STORE_SETTINGS         = "configurationStoreSettings";
     String MESSAGE_STORE_SETTINGS               = "messageStoreSettings";
+    String MODEL_VERSION                        = "modelVersion";
 
     // TODO - this isn't really an attribute
     @ManagedAttribute( derived = true )
@@ -111,8 +111,8 @@ public interface VirtualHost<X extends V
     @ManagedAttribute( automate = true )
     Map<String, Object> getMessageStoreSettings();
 
-    @ManagedAttribute( automate = true )
-    Map<String, Object> getConfigurationStoreSettings();
+    @ManagedAttribute( derived = true )
+    String getModelVersion();
 
     @ManagedStatistic
     long getQueueCount();
@@ -135,7 +135,6 @@ public interface VirtualHost<X extends V
     @ManagedStatistic
     long getMessagesOut();
 
-
     //children
     Collection<VirtualHostAlias> getAliases();
     Collection<Connection> getConnections();

Copied: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java (from r1588885, qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/DurableConfigurationStoreFactory.java)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java?p2=qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java&p1=qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/DurableConfigurationStoreFactory.java&r1=1588885&r2=1588886&rev=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/DurableConfigurationStoreFactory.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostNode.java Mon Apr 21 14:28:29 2014
@@ -18,16 +18,19 @@
  * under the License.
  *
  */
-package org.apache.qpid.server.plugin;
+package org.apache.qpid.server.model;
 
-import java.util.Map;
 import org.apache.qpid.server.store.DurableConfigurationStore;
 
-public interface DurableConfigurationStoreFactory extends Pluggable
+@ManagedObject(category=true, managesChildren=false)
+public interface VirtualHostNode<X extends VirtualHostNode<X>> extends ConfiguredObject<X>
 {
-    String getType();
+    public static final String IS_MESSAGE_STORE_PROVIDER = "messageStoreProvider";
 
-    DurableConfigurationStore createDurableConfigurationStore();
+    @ManagedAttribute (automate = true, defaultValue = "false")
+    boolean isMessageStoreProvider();
 
-    void validateAttributes(Map<String, Object> attributes);
+    VirtualHost<?,?,?> getVirtualHost();
+
+    DurableConfigurationStore getConfigurationStore();
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java Mon Apr 21 14:28:29 2014
@@ -36,7 +36,6 @@ import java.util.regex.Pattern;
 import javax.security.auth.Subject;
 
 import org.apache.log4j.Logger;
-
 import org.apache.qpid.common.QpidProperties;
 import org.apache.qpid.server.BrokerOptions;
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
@@ -108,8 +107,6 @@ public class BrokerAdapter extends Abstr
               attributes,
               parent.getTaskExecutor());
 
-        //_virtualHostRegistry = new VirtualHostRegistry(parent.getEventLogger());
-
         _logRecorder = parent.getLogRecorder();
         _eventLogger = parent.getEventLogger();
         _brokerOptions = parent.getBrokerOptions();
@@ -235,9 +232,9 @@ public class BrokerAdapter extends Abstr
         {
             addAccessControlProvider(accessControlProvider);
         }
-        for(VirtualHost<?,?,?> virtualHost : getChildren(VirtualHost.class))
+        for(VirtualHostNode<?> virtualHostNode : getChildren(VirtualHostNode.class))
         {
-            addVirtualHost(virtualHost);
+            addVirtualHostNode(virtualHostNode);
         }
 
 
@@ -358,9 +355,10 @@ public class BrokerAdapter extends Abstr
         return BrokerModel.MODEL_VERSION;
     }
 
-    public Collection<VirtualHost<?,?,?>> getVirtualHosts()
+    @Override
+    public Collection<VirtualHostNode<?>> getVirtualHostNodes()
     {
-        Collection children = getChildren(VirtualHost.class);
+        Collection children = getChildren(VirtualHostNode.class);
         return children;
     }
 
@@ -402,11 +400,11 @@ public class BrokerAdapter extends Abstr
         return children;
     }
 
-    private VirtualHost createVirtualHost(final Map<String, Object> attributes)
+    private VirtualHostNode<?> createVirtualHostNode(Map<String, Object> attributes)
             throws AccessControlException, IllegalArgumentException
     {
 
-        final VirtualHost virtualHost = getObjectFactory().create(VirtualHost.class,attributes,this);
+        final VirtualHostNode virtualHostNode = getObjectFactory().create(VirtualHostNode.class,attributes, this);
 
         // permission has already been granted to create the virtual host
         // disable further access check on other operations, e.g. create exchange
@@ -415,20 +413,13 @@ public class BrokerAdapter extends Abstr
                                 @Override
                                 public Object run()
                                 {
-                                    virtualHost.setDesiredState(State.INITIALISING, State.ACTIVE);
+                                    virtualHostNode.setDesiredState(State.INITIALISING, State.ACTIVE);
                                     return null;
                                 }
                             });
-        return virtualHost;
+        return virtualHostNode;
     }
 
-    private boolean deleteVirtualHost(final VirtualHost vhost) throws AccessControlException, IllegalStateException
-    {
-        vhost.removeChangeListener(this);
-        return true;
-    }
-
-
     public State getState()
     {
         return null;  //TODO
@@ -467,9 +458,9 @@ public class BrokerAdapter extends Abstr
             @Override
             public C execute()
             {
-                if (childClass == VirtualHost.class)
+                if (childClass == VirtualHostNode.class)
                 {
-                    return (C) createVirtualHost(attributes);
+                    return (C) createVirtualHostNode(attributes);
                 }
                 else if (childClass == Port.class)
                 {
@@ -720,10 +711,16 @@ public class BrokerAdapter extends Abstr
         return true;
     }
 
-    private void addVirtualHost(VirtualHost<?,?,?> virtualHost)
+    private void addVirtualHostNode(VirtualHostNode<?> virtualHostNode)
     {
+        virtualHostNode.addChangeListener(this);
+    }
 
-        virtualHost.addChangeListener(this);
+
+    private boolean deleteVirtualHostNode(final VirtualHostNode virtualHostNode) throws AccessControlException, IllegalStateException
+    {
+        virtualHostNode.removeChangeListener(this);
+        return true;
     }
 
     @Override
@@ -815,9 +812,9 @@ public class BrokerAdapter extends Abstr
             {
                 childDeleted = deletePort(oldState, (Port)object);
             }
-            else if(object instanceof VirtualHost)
+            else if(object instanceof VirtualHostNode)
             {
-                childDeleted = deleteVirtualHost((VirtualHost)object);
+                childDeleted = deleteVirtualHostNode((VirtualHostNode)object);
             }
             else if(object instanceof GroupProvider)
             {
@@ -890,9 +887,17 @@ public class BrokerAdapter extends Abstr
     }
 
     @Override
-    public VirtualHost findVirtualHostByName(String name)
+    public VirtualHost<?,?,?> findVirtualHostByName(String name)
     {
-        return getChildByName(VirtualHost.class, name);
+        for (VirtualHostNode<?> virtualHostNode : getChildren(VirtualHostNode.class))
+        {
+            VirtualHost<?, ?, ?> virtualHost = virtualHostNode.getVirtualHost();
+            if (virtualHost != null && virtualHost.getName().equals(name))
+            {
+                return virtualHost;
+            }
+        }
+        return null;
     }
 
     @Override
@@ -1042,11 +1047,12 @@ public class BrokerAdapter extends Abstr
         _messagesReceived.reset();
         _dataReceived.reset();
 
-        for (VirtualHost vhost : getVirtualHosts())
+        for (VirtualHostNode<?> virtualHostNode : getChildren(VirtualHostNode.class))
         {
-            if(vhost instanceof VirtualHostImpl)
+            VirtualHost<?, ?, ?> virtualHost = virtualHostNode.getVirtualHost();
+            if (virtualHost instanceof VirtualHostImpl)
             {
-                ((VirtualHostImpl) vhost).resetStatistics();
+                ((VirtualHostImpl) virtualHost).resetStatistics();
             }
         }
     }
@@ -1098,37 +1104,38 @@ public class BrokerAdapter extends Abstr
                 _eventLogger.message(BrokerMessages.STATS_MSGS(RECEIVED,
                                                                _messagesReceived.getPeak(),
                                                                _messagesReceived.getTotal()));
-                Collection<VirtualHost<?,?,?>> hosts = getVirtualHosts();
 
-                    for (VirtualHost vhost : hosts)
+                for (VirtualHostNode<?> virtualHostNode : getChildren(VirtualHostNode.class))
+                {
+                    VirtualHost<?, ?, ?> virtualHost = virtualHostNode.getVirtualHost();
+                    if (virtualHost instanceof VirtualHostImpl)
                     {
-                        if(vhost instanceof VirtualHostImpl)
-                        {
-                            VirtualHostImpl vhostImpl = (VirtualHostImpl) vhost;
-                            String name = vhost.getName();
-                            StatisticsCounter dataDelivered = vhostImpl.getDataDeliveryStatistics();
-                            StatisticsCounter messagesDelivered = vhostImpl.getMessageDeliveryStatistics();
-                            StatisticsCounter dataReceived = vhostImpl.getDataReceiptStatistics();
-                            StatisticsCounter messagesReceived = vhostImpl.getMessageReceiptStatistics();
-                            EventLogger logger = vhostImpl.getEventLogger();
-                            logger.message(VirtualHostMessages.STATS_DATA(name,
-                                                                          DELIVERED,
-                                                                          dataDelivered.getPeak() / 1024.0,
-                                                                          dataDelivered.getTotal()));
-                            logger.message(VirtualHostMessages.STATS_MSGS(name,
-                                                                          DELIVERED,
-                                                                          messagesDelivered.getPeak(),
-                                                                          messagesDelivered.getTotal()));
-                            logger.message(VirtualHostMessages.STATS_DATA(name,
-                                                                          RECEIVED,
-                                                                          dataReceived.getPeak() / 1024.0,
-                                                                          dataReceived.getTotal()));
-                            logger.message(VirtualHostMessages.STATS_MSGS(name,
-                                                                          RECEIVED,
-                                                                          messagesReceived.getPeak(),
-                                                                          messagesReceived.getTotal()));
-                        }
+                        VirtualHostImpl vhostImpl = (VirtualHostImpl) virtualHost;
+                        String name = virtualHost.getName();
+                        StatisticsCounter dataDelivered = vhostImpl.getDataDeliveryStatistics();
+                        StatisticsCounter messagesDelivered = vhostImpl.getMessageDeliveryStatistics();
+                        StatisticsCounter dataReceived = vhostImpl.getDataReceiptStatistics();
+                        StatisticsCounter messagesReceived = vhostImpl.getMessageReceiptStatistics();
+                        EventLogger logger = vhostImpl.getEventLogger();
+                        logger.message(VirtualHostMessages.STATS_DATA(name,
+                                                                      DELIVERED,
+                                                                      dataDelivered.getPeak() / 1024.0,
+                                                                      dataDelivered.getTotal()));
+                        logger.message(VirtualHostMessages.STATS_MSGS(name,
+                                                                      DELIVERED,
+                                                                      messagesDelivered.getPeak(),
+                                                                      messagesDelivered.getTotal()));
+                        logger.message(VirtualHostMessages.STATS_DATA(name,
+                                                                      RECEIVED,
+                                                                      dataReceived.getPeak() / 1024.0,
+                                                                      dataReceived.getTotal()));
+                        logger.message(VirtualHostMessages.STATS_MSGS(name,
+                                                                      RECEIVED,
+                                                                      messagesReceived.getPeak(),
+                                                                      messagesReceived.getTotal()));
+
                     }
+                }
 
                 if (_reset)
                 {

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StandardVirtualHostFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StandardVirtualHostFactory.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StandardVirtualHostFactory.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/StandardVirtualHostFactory.java Mon Apr 21 14:28:29 2014
@@ -23,8 +23,8 @@ package org.apache.qpid.server.model.ada
 import java.util.Map;
 
 import org.apache.qpid.server.model.AbstractConfiguredObjectTypeFactory;
-import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.virtualhost.StandardVirtualHost;
 
 public class StandardVirtualHostFactory extends AbstractConfiguredObjectTypeFactory<StandardVirtualHost>
@@ -39,8 +39,8 @@ public class StandardVirtualHostFactory 
     public StandardVirtualHost createInstance(final Map<String, Object> attributes,
                                                  final ConfiguredObject<?>... parents)
     {
-        final Broker broker = getParent(Broker.class, parents);
-        return new StandardVirtualHost(attributes, broker);
+        final VirtualHostNode<?> virtualHostNode = getParent(VirtualHostNode.class, parents);
+        return new StandardVirtualHost(attributes, virtualHostNode);
     }
 
 

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java Mon Apr 21 14:28:29 2014
@@ -47,6 +47,7 @@ import org.apache.qpid.server.model.Tran
 import org.apache.qpid.server.model.TrustStore;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.model.VirtualHostAlias;
+import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.security.access.Operation;
 import org.apache.qpid.server.util.MapValueConverter;
 import org.apache.qpid.server.util.ParameterizedTypeImpl;
@@ -238,13 +239,17 @@ abstract public class AbstractPort<X ext
     public Collection<VirtualHostAlias> getVirtualHostBindings()
     {
         List<VirtualHostAlias> aliases = new ArrayList<VirtualHostAlias>();
-        for(VirtualHost<?,?,?> vh : _broker.getVirtualHosts())
+        for(VirtualHostNode<?> vhn : _broker.getVirtualHostNodes())
         {
-            for(VirtualHostAlias<?> alias : vh.getAliases())
+            VirtualHost<?, ?, ?> vh = vhn.getVirtualHost();
+            if (vh != null)
             {
-                if(alias.getPort().equals(this))
+                for(VirtualHostAlias<?> alias : vh.getAliases())
                 {
-                    aliases.add(alias);
+                    if(alias.getPort().equals(this))
+                    {
+                        aliases.add(alias);
+                    }
                 }
             }
         }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java Mon Apr 21 14:28:29 2014
@@ -99,7 +99,8 @@ public class AmqpPortImpl extends Abstra
         {
             name = _broker.getDefaultVirtualHost();
         }
-        return (VirtualHostImpl) _broker.getChildByName(VirtualHost.class, name);
+
+        return (VirtualHostImpl) _broker.findVirtualHostByName(name);
     }
 
     protected Set<Protocol> getDefaultProtocols()

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/DurableConfigurationStoreFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/DurableConfigurationStoreFactory.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/DurableConfigurationStoreFactory.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/DurableConfigurationStoreFactory.java Mon Apr 21 14:28:29 2014
@@ -21,13 +21,16 @@
 package org.apache.qpid.server.plugin;
 
 import java.util.Map;
+
 import org.apache.qpid.server.store.DurableConfigurationStore;
 
 public interface DurableConfigurationStoreFactory extends Pluggable
 {
+    PluggableFactoryLoader<DurableConfigurationStoreFactory> FACTORY_LOADER = new PluggableFactoryLoader<DurableConfigurationStoreFactory>(DurableConfigurationStoreFactory.class);
+
     String getType();
 
     DurableConfigurationStore createDurableConfigurationStore();
 
-    void validateAttributes(Map<String, Object> attributes);
+    void validateConfigurationStoreSettings(Map<String, Object> attributes);
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java Mon Apr 21 14:28:29 2014
@@ -2495,5 +2495,12 @@ abstract public class AbstractJDBCMessag
         {
             return Collections.unmodifiableMap(_parents);
         }
+
+        @Override
+        public String toString()
+        {
+            return "ConfiguredObjectRecordImpl [_id=" + _id + ", _type=" + _type + ", _attributes=" + _attributes + ", _parents="
+                    + _parents + "]";
+        }
     }
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryMessageStore.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryMessageStore.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/AbstractMemoryMessageStore.java Mon Apr 21 14:28:29 2014
@@ -32,7 +32,6 @@ import java.util.concurrent.atomic.Atomi
 
 import org.apache.qpid.server.message.EnqueueableMessage;
 import org.apache.qpid.server.model.ConfiguredObject;
-import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.store.Transaction.Record;
 import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler;
 import org.apache.qpid.server.store.handler.DistributedTransactionHandler;

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java Mon Apr 21 14:28:29 2014
@@ -30,8 +30,6 @@ public interface DurableConfigurationSto
 {
     String STORE_TYPE                    = "storeType";
     String STORE_PATH                    = "storePath";
-    String IS_MESSAGE_STORE_TOO          = "isMessageStoreToo";
-
 
     public static interface Source
     {

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java Mon Apr 21 14:28:29 2014
@@ -48,7 +48,6 @@ import org.codehaus.jackson.map.Serializ
 import org.codehaus.jackson.map.SerializerProvider;
 import org.codehaus.jackson.map.module.SimpleModule;
 
-import org.apache.qpid.server.model.BrokerModel;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.Model;
 import org.apache.qpid.server.model.VirtualHost;
@@ -57,19 +56,19 @@ import org.apache.qpid.server.store.hand
 public class JsonFileConfigStore implements DurableConfigurationStore
 {
 
-    private Map<String,Class<? extends ConfiguredObject>> _classNameMapping;
     public static final String TYPE = "JSON";
 
     private final Map<UUID, ConfiguredObjectRecord> _objectsById = new HashMap<UUID, ConfiguredObjectRecord>();
     private final Map<String, List<UUID>> _idsByType = new HashMap<String, List<UUID>>();
     private final ObjectMapper _objectMapper = new ObjectMapper();
+    private final Class<? extends ConfiguredObject> _rootClass;
 
+    private Map<String,Class<? extends ConfiguredObject>> _classNameMapping;
     private String _directoryName;
     private String _name;
     private FileLock _fileLock;
     private String _configFileName;
     private String _backupFileName;
-    private int _configVersion;
 
     private static final Module _module;
     static
@@ -96,8 +95,14 @@ public class JsonFileConfigStore impleme
 
     public JsonFileConfigStore()
     {
+        this(VirtualHost.class);
+    }
+
+    public JsonFileConfigStore(Class<? extends ConfiguredObject> rootClass)
+    {
         _objectMapper.registerModule(_module);
         _objectMapper.enable(SerializationConfig.Feature.INDENT_OUTPUT);
+        _rootClass = rootClass;
     }
 
     @Override
@@ -105,7 +110,7 @@ public class JsonFileConfigStore impleme
     {
         _parent = parent;
         _name = parent.getName();
-        _classNameMapping = generateClassNameMap(_parent.getModel(), VirtualHost.class);
+        _classNameMapping = generateClassNameMap(_parent.getModel(), _rootClass);
         setup(storeSettings);
         load();
     }
@@ -260,48 +265,26 @@ public class JsonFileConfigStore impleme
 
     }
 
-    protected void loadFromMap(final Map data)
+    protected void loadFromMap(final Map<String,Object> data)
     {
-        Collection<Class<? extends ConfiguredObject>> childClasses =
-                _parent.getModel().getChildTypes(VirtualHost.class);
-        data.remove("modelVersion");
-        Object configVersion;
-        if((configVersion = data.remove("configVersion")) instanceof Integer)
+        if (!data.isEmpty())
         {
-            _configVersion = (Integer) configVersion;
-        }
-        for(Class<? extends ConfiguredObject> childClass : childClasses)
-        {
-            final String type = childClass.getSimpleName();
-            String attrName = type.toLowerCase() + "s";
-            Object children = data.remove(attrName);
-            if(children != null)
-            {
-                if(children instanceof Collection)
-                {
-                    for(Object child : (Collection)children)
-                    {
-                        if(child instanceof Map)
-                        {
-                            loadChild(childClass, (Map)child, VirtualHost.class, null);
-                        }
-                    }
-                }
-            }
+            loadChild(_rootClass, data, null, null);
         }
     }
 
+
     private void loadChild(final Class<? extends ConfiguredObject> clazz,
                            final Map<String,Object> data,
                            final Class<? extends ConfiguredObject> parentClass,
                            final UUID parentId)
     {
-        Collection<Class<? extends ConfiguredObject>> childClasses =
-                _parent.getModel().getChildTypes(clazz);
         String idStr = (String) data.remove("id");
         final UUID id = UUID.fromString(idStr);
         final String type = clazz.getSimpleName();
+        Map<String,UUID> parentMap = new HashMap<String, UUID>();
 
+        Collection<Class<? extends ConfiguredObject>> childClasses = _parent.getModel().getChildTypes(clazz);
         for(Class<? extends ConfiguredObject> childClass : childClasses)
         {
             final String childType = childClass.getSimpleName();
@@ -322,7 +305,6 @@ public class JsonFileConfigStore impleme
             }
 
         }
-        Map<String,UUID> parentMap = new HashMap<String, UUID>();
         if(parentId != null)
         {
             parentMap.put(parentClass.getSimpleName(),parentId);
@@ -356,7 +338,6 @@ public class JsonFileConfigStore impleme
             _idsByType.put(type, idsForType);
         }
         idsForType.add(id);
-
     }
 
     @Override
@@ -380,42 +361,38 @@ public class JsonFileConfigStore impleme
                 idsForType = new ArrayList<UUID>();
                 _idsByType.put(record.getType(), idsForType);
             }
+
+            if (_rootClass.getSimpleName().equals(record.getType()) && idsForType.size() > 0)
+            {
+                throw new IllegalStateException("Only a single root entry of type " + _rootClass.getSimpleName() + " can exist in the store.");
+            }
+
             idsForType.add(record.getId());
+
             save();
         }
     }
 
-    private void save()
+    private UUID getRootId()
     {
-        Collection<Class<? extends ConfiguredObject>> childClasses =
-                _parent.getModel().getChildTypes(VirtualHost.class);
-
-        Map<String, Object> virtualHostMap = new LinkedHashMap<String, Object>();
-        virtualHostMap.put("modelVersion", BrokerModel.MODEL_VERSION);
-        virtualHostMap.put("configVersion", _configVersion);
-
-        for(Class<? extends ConfiguredObject> childClass : childClasses)
+        List<UUID> ids = _idsByType.get(_rootClass.getSimpleName());
+        if (ids == null)
         {
-            final String type = childClass.getSimpleName();
-            String attrName = type.toLowerCase() + "s";
-            List<UUID> childIds = _idsByType.get(type);
-            if(childIds != null && !childIds.isEmpty())
-            {
-                List<Map<String,Object>> entities = new ArrayList<Map<String, Object>>();
-                for(UUID id : childIds)
-                {
-                    entities.add(build(childClass,id));
-                }
-                virtualHostMap.put(attrName, entities);
-            }
+            throw new IllegalStateException("Root entry of type " + _rootClass.getSimpleName() + " does not exist in the store.");
         }
+        return ids.get(0);
+    }
+
+    private void save()
+    {
+        UUID rootId = getRootId();
+        Map<String, Object> data = build(_rootClass, rootId);
 
         try
         {
-
             File tmpFile = File.createTempFile("cfg","tmp", new File(_directoryName));
             tmpFile.deleteOnExit();
-            _objectMapper.writeValue(tmpFile,virtualHostMap);
+            _objectMapper.writeValue(tmpFile,data);
             renameFile(_configFileName,_backupFileName);
             renameFile(tmpFile.getName(),_configFileName);
             tmpFile.delete();
@@ -489,6 +466,11 @@ public class JsonFileConfigStore impleme
     @Override
     public synchronized UUID[] remove(final ConfiguredObjectRecord... objects) throws StoreException
     {
+        if (objects.length == 0)
+        {
+            return new UUID[0];
+        }
+
         List<UUID> removedIds = new ArrayList<UUID>();
         for(ConfiguredObjectRecord requestedRecord : objects)
         {
@@ -508,6 +490,11 @@ public class JsonFileConfigStore impleme
     public void update(final boolean createIfNecessary, final ConfiguredObjectRecord... records)
             throws StoreException
     {
+        if (records.length == 0)
+        {
+            return;
+        }
+
         for(ConfiguredObjectRecord record : records)
         {
             final UUID id = record.getId();
@@ -647,6 +634,15 @@ public class JsonFileConfigStore impleme
             }
             return parents;
         }
+
+        @Override
+        public String toString()
+        {
+            return "ConfiguredObjectRecordImpl [_id=" + _id + ", _type=" + _type + ", _attributes=" + _attributes + ", _parents="
+                    + _parents + "]";
+        }
+
     }
 
+
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStoreFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStoreFactory.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStoreFactory.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStoreFactory.java Mon Apr 21 14:28:29 2014
@@ -40,12 +40,9 @@ public class JsonFileConfigStoreFactory 
     }
 
     @Override
-    public void validateAttributes(Map<String, Object> attributes)
+    public void validateConfigurationStoreSettings(Map<String, Object> attributes)
     {
-        @SuppressWarnings("unchecked")
-        Map<String, Object> configurationStoreSettings = (Map<String, Object>) attributes.get(VirtualHost.CONFIGURATION_STORE_SETTINGS);
-
-        Object storePath = configurationStoreSettings.get(DurableConfigurationStore.STORE_PATH);
+        Object storePath = attributes.get(DurableConfigurationStore.STORE_PATH);
         if(!(storePath instanceof String))
         {
             throw new IllegalArgumentException("Setting '"+ DurableConfigurationStore.STORE_PATH
@@ -53,4 +50,5 @@ public class JsonFileConfigStoreFactory 
 
         }
     }
+
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/MessageStore.java Mon Apr 21 14:28:29 2014
@@ -67,6 +67,7 @@ public interface MessageStore
 
     String getStoreLocation();
 
+    // TODO change to have separate delete methods for configuration and message store.
     void onDelete();
 
     void visitMessages(MessageHandler handler) throws StoreException;

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/NullUpgrader.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/NullUpgrader.java?rev=1588886&r1=1588885&r2=1588886&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/NullUpgrader.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/NullUpgrader.java Mon Apr 21 14:28:29 2014
@@ -26,17 +26,10 @@ import java.util.UUID;
 
 public final class NullUpgrader implements DurableConfigurationStoreUpgrader
 {
-    private DurableConfigurationRecoverer _durableConfigurationRecoverer;
-
-    public NullUpgrader(final DurableConfigurationRecoverer durableConfigurationRecoverer)
-    {
-        _durableConfigurationRecoverer = durableConfigurationRecoverer;
-    }
 
     @Override
     public void configuredObject(final ConfiguredObjectRecord record)
     {
-        _durableConfigurationRecoverer.onConfiguredObject(record);
     }
 
     @Override



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