summaryrefslogtreecommitdiff
path: root/qpid/java/broker-core/src
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2014-06-07 19:01:03 +0000
committerKeith Wall <kwall@apache.org>2014-06-07 19:01:03 +0000
commit2a511e6a3b5f278f9c8b572a306b96490f180805 (patch)
treea6c30ce39a23aeeb86844fb6434a21c669fba854 /qpid/java/broker-core/src
parent21aceae395ef19dca56dc603ed3f2af744b620a7 (diff)
downloadqpid-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')
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java58
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java4
-rw-r--r--qpid/java/broker-core/src/main/resources/initial-config.json5
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNodeTest.java6
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostnode/TestVirtualHostNode.java12
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);
- }
}