diff options
| author | Keith Wall <kwall@apache.org> | 2014-06-07 19:01:03 +0000 |
|---|---|---|
| committer | Keith Wall <kwall@apache.org> | 2014-06-07 19:01:03 +0000 |
| commit | 2a511e6a3b5f278f9c8b572a306b96490f180805 (patch) | |
| tree | a6c30ce39a23aeeb86844fb6434a21c669fba854 /qpid/java/broker-core/src | |
| parent | 21aceae395ef19dca56dc603ed3f2af744b620a7 (diff) | |
| download | qpid-python-2a511e6a3b5f278f9c8b572a306b96490f180805.tar.gz | |
QPID-5803: [Java Broker] Add ability for the virtualhostnode to create a virtualhost using a blueprint supplied by context variable
* This commit reenables the SplitStoreTest.
* The UI has not been refactored by this commit, so it will not be possible to create a non-HA virtualhost from the UI
(the UI will create only a virtualhostnode).. REST API is okay.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1601163 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-core/src')
5 files changed, 36 insertions, 49 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java index e37eeb17bf..9ce4779a1c 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java @@ -20,7 +20,6 @@ */ package org.apache.qpid.server.virtualhostnode; -import java.io.File; import java.security.PrivilegedAction; import java.util.Collection; import java.util.Collections; @@ -39,15 +38,13 @@ import org.apache.qpid.server.model.RemoteReplicationNode; import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.model.VirtualHostNode; import org.apache.qpid.server.security.SecurityManager; -import org.apache.qpid.server.store.MessageStore; -import org.apache.qpid.server.store.MessageStoreProvider; import org.apache.qpid.server.store.VirtualHostStoreUpgraderAndRecoverer; -import org.apache.qpid.server.virtualhost.ProvidedStoreVirtualHost; public abstract class AbstractStandardVirtualHostNode<X extends AbstractStandardVirtualHostNode<X>> extends AbstractVirtualHostNode<X> implements VirtualHostNode<X> { private static final Logger LOGGER = Logger.getLogger(AbstractStandardVirtualHostNode.class); + public static final String VIRTUALHOST_BLUEPRINT_CONTEXT_VAR = "virtualhostBlueprint"; public AbstractStandardVirtualHostNode(Map<String, Object> attributes, Broker<?> parent) @@ -100,25 +97,32 @@ public abstract class AbstractStandardVirtualHostNode<X extends AbstractStandard if (host == null) { - // TODO normal case - we should not create VH, - // TODO out if box case - if blueprint vh context variable is set, use it to create a VH - if (LOGGER.isDebugEnabled()) + if (getContext() != null && getContext().containsKey(VIRTUALHOST_BLUEPRINT_CONTEXT_VAR)) { - LOGGER.debug("Creating new virtualhost with name : " + getName()); - } - Map<String, Object> hostAttributes = new HashMap<String, Object>(); - hostAttributes.put(VirtualHost.MODEL_VERSION, BrokerModel.MODEL_VERSION); - hostAttributes.put(VirtualHost.NAME, getName()); - if (getConfigurationStore() instanceof MessageStoreProvider) - { - hostAttributes.put(VirtualHost.TYPE, ProvidedStoreVirtualHost.VIRTUAL_HOST_TYPE); - } - else - { - hostAttributes.put(VirtualHost.TYPE, "DERBY"); - hostAttributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, getDefaultMessageStoreSettings()); + Map<String, Object> virtualhostBlueprint = getContextValue(Map.class, VIRTUALHOST_BLUEPRINT_CONTEXT_VAR); + + if (LOGGER.isDebugEnabled()) + { + LOGGER.debug("Using virtualhost blueprint " + virtualhostBlueprint); + } + + Map<String, Object> virtualhostAttributes = new HashMap<>(); + virtualhostAttributes.put(VirtualHost.MODEL_VERSION, BrokerModel.MODEL_VERSION); + virtualhostAttributes.put(VirtualHost.NAME, getName()); + virtualhostAttributes.putAll(virtualhostBlueprint); + + if (LOGGER.isDebugEnabled()) + { + LOGGER.debug("Creating new virtualhost named " + virtualhostAttributes.get(VirtualHost.NAME)); + } + + host = createChild(VirtualHost.class, virtualhostAttributes); + + if (LOGGER.isDebugEnabled()) + { + LOGGER.debug("Created new virtualhost: " + host); + } } - host = createChild(VirtualHost.class, hostAttributes); } else { @@ -146,16 +150,4 @@ public abstract class AbstractStandardVirtualHostNode<X extends AbstractStandard { return Collections.emptyList(); } - - // protected for unit testing purposes - protected Map<String, Object> getDefaultMessageStoreSettings() - { - // TODO perhaps look for the MS with the default annotation and associated default. - Map<String, Object> settings = new HashMap<String, Object>(); - settings.put(MessageStore.STORE_TYPE, "DERBY"); - settings.put(MessageStore.STORE_PATH, "${qpid.work_dir}" + File.separator + "derbystore" + File.separator + getName()); - return settings; - } - - } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java index 67f690a2b9..6d26decd72 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java @@ -29,9 +29,11 @@ import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.store.JsonFileConfigStore; -@ManagedObject(category=false, type="JSON") +@ManagedObject(type=JsonVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE, category=false) public class JsonVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<JsonVirtualHostNodeImpl> implements FileBasedVirtualHostNode<JsonVirtualHostNodeImpl> { + public static final String VIRTUAL_HOST_NODE_TYPE = "JSON"; + @ManagedAttributeField private String _storePath; diff --git a/qpid/java/broker-core/src/main/resources/initial-config.json b/qpid/java/broker-core/src/main/resources/initial-config.json index 45b02bd550..d220fefa50 100644 --- a/qpid/java/broker-core/src/main/resources/initial-config.json +++ b/qpid/java/broker-core/src/main/resources/initial-config.json @@ -55,7 +55,10 @@ "virtualhostnodes" : [ { "name" : "default", "type" : "JSON", - "storePath" : "${qpid.work_dir}/json/default" + "storePath" : "${qpid.work_dir}/default/config", + "context" : { + "virtualhostBlueprint" : "{ \"type\" : \"DERBY\", \"messageStoreSettings\" : { \"storePath\" : \"${qpid.work_dir}/default/messages\" }}" + } } ], "plugins" : [ { "type" : "MANAGEMENT-HTTP", diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java index e0a56bc39c..397f83b712 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java @@ -136,12 +136,8 @@ public class AbstractStandardVirtualHostNodeTest extends QpidTestCase node.start(); VirtualHost<?, ?, ?> virtualHost = node.getVirtualHost(); - assertNotNull("Virtual host was not created", virtualHost); + assertNull("Virtual host should not be automatically created", virtualHost); - // Virtualhost name taken from VHN and ID is random. - assertEquals("Unexpected virtual host name", TEST_VIRTUAL_HOST_NODE_NAME, virtualHost.getName()); - assertEquals("Unexpected virtual host state", State.ACTIVE, virtualHost.getState()); - assertNotNull("Unexpected virtual host id", virtualHost.getId()); } private ConfiguredObjectRecord createMockVirtualHostCOR(UUID virtualHostId) diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java index 16a9aa5550..18d394d4f7 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java @@ -20,18 +20,17 @@ */ package org.apache.qpid.server.virtualhostnode; -import java.util.Collections; import java.util.Map; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.store.DurableConfigurationStore; -import org.apache.qpid.server.store.MessageStore; -import org.apache.qpid.server.store.TestMemoryMessageStore; -@ManagedObject(type="TestMemory", category=false) +@ManagedObject(type=TestVirtualHostNode.VIRTUAL_HOST_NODE_TYPE, category=false) public class TestVirtualHostNode extends AbstractStandardVirtualHostNode<TestVirtualHostNode> { + public static final String VIRTUAL_HOST_NODE_TYPE = "TestMemory"; + private final DurableConfigurationStore _store; public TestVirtualHostNode(Broker<?> parent, Map<String, Object> attributes) @@ -53,9 +52,4 @@ public class TestVirtualHostNode extends AbstractStandardVirtualHostNode<TestVir return _store; } - @Override - public Map<String, Object> getDefaultMessageStoreSettings() - { - return Collections.<String, Object>singletonMap(MessageStore.STORE_TYPE, TestMemoryMessageStore.TYPE); - } } |
