summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2014-03-17 17:04:05 +0000
committerKeith Wall <kwall@apache.org>2014-03-17 17:04:05 +0000
commit8ad99bd6b07efe9f91ed9cde2b2121028005c317 (patch)
tree8a9b33c0294fe1745b617ca1399fccd654de1759
parentec486999608568e37a55dc9c81d9be133d95ebc3 (diff)
downloadqpid-python-8ad99bd6b07efe9f91ed9cde2b2121028005c317.tar.gz
QPID-5624: Introduce configurationStoreSettings VH attributes
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/java-broker-bdb-ha2@1578463 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreFactory.java11
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacadeFactory.java29
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java121
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java14
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java15
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java4
-rwxr-xr-xqpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java7
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStoreFactory.java8
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java9
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/StoreUpgraderTest.java153
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java10
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java14
-rw-r--r--qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java3
-rw-r--r--qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStoreFactory.java9
-rw-r--r--qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProvider.java45
-rw-r--r--qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProviderFactory.java6
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java10
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStore.java77
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreFactory.java17
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.JDBCConnectionProviderFactory (renamed from qpid/java/broker-core/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.JDBCConnectionProviderFactory)0
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java6
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java2
23 files changed, 355 insertions, 217 deletions
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreFactory.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreFactory.java
index e2b30f6740..ef749f2472 100644
--- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreFactory.java
+++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreFactory.java
@@ -54,7 +54,7 @@ public class BDBMessageStoreFactory implements MessageStoreFactory, DurableConfi
{
@SuppressWarnings("unchecked")
Map<String, Object> messageStoreSettings = (Map<String, Object>) attributes.get(VirtualHost.MESSAGE_STORE_SETTINGS);
- if(getType().equals(messageStoreSettings.get(MessageStore.STORE_TYPE)))
+ if(messageStoreSettings != null && getType().equals(messageStoreSettings.get(MessageStore.STORE_TYPE)))
{
Object storePath = messageStoreSettings.get(MessageStore.STORE_PATH);
if(!(storePath instanceof String))
@@ -64,12 +64,15 @@ public class BDBMessageStoreFactory implements MessageStoreFactory, DurableConfi
}
}
- if(getType().equals(attributes.get(VirtualHost.CONFIG_STORE_TYPE)))
+
+ @SuppressWarnings("unchecked")
+ Map<String, Object> configurationStoreSettings = (Map<String, Object>) attributes.get(VirtualHost.CONFIGURATION_STORE_SETTINGS);
+ if(configurationStoreSettings != null && getType().equals(configurationStoreSettings.get(DurableConfigurationStore.STORE_TYPE)))
{
- Object storePath = attributes.get(VirtualHost.CONFIG_STORE_PATH);
+ Object storePath = configurationStoreSettings.get(DurableConfigurationStore.STORE_PATH);
if(!(storePath instanceof String))
{
- throw new IllegalArgumentException("Attribute '"+ VirtualHost.CONFIG_STORE_PATH
+ throw new IllegalArgumentException("Setting '"+ DurableConfigurationStore.STORE_PATH
+"' is required and must be of type String.");
}
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacadeFactory.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacadeFactory.java
index 7fdae6b3ee..75e14a70c7 100644
--- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacadeFactory.java
+++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacadeFactory.java
@@ -26,6 +26,7 @@ import java.util.Map;
import org.apache.qpid.server.configuration.BrokerProperties;
import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.store.DurableConfigurationStore;
import org.apache.qpid.server.store.MessageStore;
public class StandardEnvironmentFacadeFactory implements EnvironmentFacadeFactory
@@ -40,30 +41,34 @@ public class StandardEnvironmentFacadeFactory implements EnvironmentFacadeFactor
Map<String, String> envConfigMap = new HashMap<String, String>();
envConfigMap.putAll(EnvironmentFacade.ENVCONFIG_DEFAULTS);
- Object environmentConfigurationAttributes = messageStoreSettings.get(ENVIRONMENT_CONFIGURATION);
- if (environmentConfigurationAttributes instanceof Map)
- {
- envConfigMap.putAll((Map<String, String>) environmentConfigurationAttributes);
- }
-
final String defaultPath = System.getProperty(BrokerProperties.PROPERTY_QPID_WORK) + File.separator + "bdbstore" + File.separator + name;
String storeLocation;
if(isMessageStore)
{
- storeLocation = (String) messageStoreSettings.get(MessageStore.STORE_PATH);
- if(storeLocation == null)
+ Object environmentConfigurationAttributes = messageStoreSettings.get(ENVIRONMENT_CONFIGURATION);
+ if (environmentConfigurationAttributes instanceof Map)
{
- storeLocation = defaultPath;
+ envConfigMap.putAll((Map<String, String>) environmentConfigurationAttributes);
}
+
+ storeLocation = (String) messageStoreSettings.get(MessageStore.STORE_PATH);
}
else // we are acting only as the durable config store
{
- storeLocation = (String) virtualHost.getAttribute(VirtualHost.CONFIG_STORE_PATH);
- if(storeLocation == null)
+ Map<String, Object> configurationStoreSettings = virtualHost.getConfigurationStoreSettings();
+
+ Object environmentConfigurationAttributes = configurationStoreSettings.get(ENVIRONMENT_CONFIGURATION);
+ if (environmentConfigurationAttributes instanceof Map)
{
- storeLocation = defaultPath;
+ envConfigMap.putAll((Map<String, String>) environmentConfigurationAttributes);
}
+
+ storeLocation = (String) configurationStoreSettings.get(DurableConfigurationStore.STORE_PATH);
+ }
+ if(storeLocation == null)
+ {
+ storeLocation = defaultPath;
}
return new StandardEnvironmentFacade(storeLocation, envConfigMap);
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java
index 16da78c988..1dfd834b4a 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java
@@ -139,8 +139,9 @@ public abstract class StoreUpgrader
final static StoreUpgrader UPGRADE_1_3 = new StoreUpgrader("1.3")
{
private final String[] HA_ATTRIBUTES = {"haNodeName", "haGroupName", "haHelperAddress", "haCoalescingSync", "haNodeAddress","haDurability","haDesignatedPrimary","haReplicationConfig","bdbEnvironmentConfig"};
- private final String[] JDBC_ATTRIBUTES = {"connectionURL", "connectionPool", "jdbcBigIntType", "jdbcBytesForBlob", "jdbcVarbinaryType", "jdbcBlobType", "partitionCount", "maxConnectionsPerPartition", "minConnectionsPerPartition"};
+ private final String[] JDBC_ATTRIBUTES = {"connectionPool", "jdbcBigIntType", "jdbcBytesForBlob", "jdbcVarbinaryType", "jdbcBlobType", "partitionCount", "maxConnectionsPerPartition", "minConnectionsPerPartition"};
private final String[] STORE_TYPES = {"BDB", "BDB-HA", "JDBC", "Memory", "DERBY"};
+ private final String[] CONFIGURATION_STORE_TYPES = {"BDB", "JSON", "JDBC", "Memory", "DERBY"};
@Override
protected void doUpgrade(ConfigurationEntryStore store)
@@ -154,6 +155,7 @@ public abstract class StoreUpgrader
Map<String, Object> attributes = vhost.getAttributes();
Map<String, Object> newAttributes = new HashMap<String, Object>(attributes);
Map<String, Object> messageStoreSettings = new HashMap<String, Object>();
+
String storeType = (String) attributes.get("storeType");
String realStoreType = storeType;
for (String type : STORE_TYPES)
@@ -195,41 +197,64 @@ public abstract class StoreUpgrader
}
else
{
-
if ("JDBC".equalsIgnoreCase(realStoreType))
{
- boolean removeAttribute = !"JDBC".equals(attributes.get("configStoreType"));
- for (String jdbcAttribute : JDBC_ATTRIBUTES)
+ // storePath attribute might contain the connectionURL
+ if (messageStoreSettings.containsKey("storePath"))
{
- if(attributes.containsKey(jdbcAttribute))
- {
- Object value = null;
- if (removeAttribute)
- {
- value = newAttributes.remove(jdbcAttribute);
- }
- else
- {
- value = newAttributes.get(jdbcAttribute);
- }
- messageStoreSettings.put(jdbcAttribute, value);
- }
+ messageStoreSettings.put("connectionURL", messageStoreSettings.remove("storePath"));
}
+
+ if (newAttributes.containsKey("connectionURL"))
+ {
+ messageStoreSettings.put("connectionURL", newAttributes.remove("connectionURL"));
+ }
+
+ copyJdbcStoreSettings(attributes, messageStoreSettings);
}
else if ("BDB".equals(realStoreType))
{
if(attributes.containsKey("bdbEnvironmentConfig"))
{
- messageStoreSettings.put("bdbEnvironmentConfig", newAttributes.remove("bdbEnvironmentConfig"));
+ messageStoreSettings.put("bdbEnvironmentConfig", newAttributes.get("bdbEnvironmentConfig"));
}
}
}
+ //TODO: this might need throwing an exception if message store is not defined
if (!messageStoreSettings.isEmpty())
{
newAttributes.put("messageStoreSettings", messageStoreSettings);
- changed.add(new ConfigurationEntry(vhost.getId(),vhost.getType(), newAttributes, vhost.getChildrenIds(), store));
}
+
+ Map<String, Object> configurationStoreSettings = new HashMap<String, Object>();
+ String realConfigurationStoreType = copyConfigurationStoreSettings(newAttributes, configurationStoreSettings);
+
+ if (!configurationStoreSettings.isEmpty())
+ {
+ newAttributes.put("configurationStoreSettings", configurationStoreSettings);
+ }
+
+ if ("JDBC".equalsIgnoreCase(realStoreType) || "JDBC".equalsIgnoreCase(realConfigurationStoreType))
+ {
+ for (String jdbcAttribute : JDBC_ATTRIBUTES)
+ {
+ if(newAttributes.containsKey(jdbcAttribute))
+ {
+ newAttributes.remove(jdbcAttribute);
+ }
+ }
+ }
+
+ if ("BDB".equalsIgnoreCase(realStoreType) || "BDB".equalsIgnoreCase(realConfigurationStoreType))
+ {
+ if(newAttributes.containsKey("bdbEnvironmentConfig"))
+ {
+ newAttributes.remove("bdbEnvironmentConfig");
+ }
+ }
+
+ changed.add(new ConfigurationEntry(vhost.getId(), vhost.getType(), newAttributes, vhost.getChildrenIds(), store));
}
Map<String, Object> attributes = new HashMap<String, Object>(root.getAttributes());
attributes.put(Broker.MODEL_VERSION, "1.4");
@@ -238,6 +263,64 @@ public abstract class StoreUpgrader
store.save(changed.toArray(new ConfigurationEntry[changed.size()]));
}
+
+ private String copyConfigurationStoreSettings(Map<String, Object> newAttributes,
+ Map<String, Object> configurationStoreSettings)
+ {
+ String realConfigurationStoreType = null;
+ if(newAttributes.containsKey("configStoreType"))
+ {
+ String configurationStoreType = (String) newAttributes.get("configStoreType");
+ realConfigurationStoreType = configurationStoreType;
+ for (String type : CONFIGURATION_STORE_TYPES)
+ {
+ if (type.equalsIgnoreCase(configurationStoreType))
+ {
+ realConfigurationStoreType = type;
+ break;
+ }
+ }
+ newAttributes.remove("configStoreType");
+ configurationStoreSettings.put("storeType", realConfigurationStoreType);
+ if ("JDBC".equalsIgnoreCase(realConfigurationStoreType))
+ {
+ // storePath attribute might contain the connectionURL
+ if (newAttributes.containsKey("configStorePath"))
+ {
+ configurationStoreSettings.put("connectionURL", newAttributes.remove("configStorePath"));
+ }
+ if (newAttributes.containsKey("configConnectionURL"))
+ {
+ configurationStoreSettings.put("connectionURL", newAttributes.remove("configConnectionURL"));
+ }
+ copyJdbcStoreSettings(newAttributes, configurationStoreSettings);
+ }
+ else if ("BDB".equals(realConfigurationStoreType))
+ {
+ if(newAttributes.containsKey("bdbEnvironmentConfig"))
+ {
+ configurationStoreSettings.put("bdbEnvironmentConfig", newAttributes.get("bdbEnvironmentConfig"));
+ }
+ }
+ }
+
+ if (newAttributes.containsKey("configStorePath"))
+ {
+ configurationStoreSettings.put("storePath", newAttributes.remove("configStorePath"));
+ }
+ return realConfigurationStoreType;
+ }
+
+ private void copyJdbcStoreSettings(Map<String, Object> attributes, Map<String, Object> messageStoreSettings)
+ {
+ for (String jdbcAttribute : JDBC_ATTRIBUTES)
+ {
+ if(attributes.containsKey(jdbcAttribute))
+ {
+ messageStoreSettings.put(jdbcAttribute, attributes.get(jdbcAttribute));
+ }
+ }
+ }
};
private StoreUpgrader(String version)
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
index 46aa8dcc8e..f4072277d5 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
@@ -57,12 +57,6 @@ public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject<
String CONFIGURATION_STORE_SETTINGS = "configurationStoreSettings";
String MESSAGE_STORE_SETTINGS = "messageStoreSettings";
- @Deprecated
- String CONFIG_STORE_TYPE = "configStoreType";
- @Deprecated
- String CONFIG_STORE_PATH = "configStorePath";
- // Attributes
-
int CURRENT_CONFIG_VERSION = 4;
@ManagedAttribute
@@ -87,14 +81,6 @@ public interface VirtualHost<X extends VirtualHost<X>> extends ConfiguredObject<
long getQueue_flowResumeSizeBytes();
@ManagedAttribute
- @Deprecated
- String getConfigStoreType();
-
- @ManagedAttribute
- @Deprecated
- String getConfigStorePath();
-
- @ManagedAttribute
long getStoreTransactionIdleTimeoutClose();
@ManagedAttribute
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
index 0060703792..2e86d834bb 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
@@ -88,9 +88,6 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo
put(MESSAGE_STORE_SETTINGS, new ParameterizedTypeImpl(Map.class, String.class, Object.class));
put(CONFIGURATION_STORE_SETTINGS, new ParameterizedTypeImpl(Map.class, String.class, Object.class));
- put(CONFIG_STORE_TYPE, String.class);
- put(CONFIG_STORE_PATH, String.class);
-
}});
@SuppressWarnings("serial")
@@ -808,18 +805,6 @@ public final class VirtualHostAdapter extends AbstractConfiguredObject<VirtualHo
}
@Override
- public String getConfigStoreType()
- {
- return (String) getAttribute(CONFIG_STORE_TYPE);
- }
-
- @Override
- public String getConfigStorePath()
- {
- return (String) getAttribute(CONFIG_STORE_PATH);
- }
-
- @Override
public long getStoreTransactionIdleTimeoutClose()
{
return (Long)getAttribute(VirtualHost.STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE);
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java
index eb981bdd02..c6b350d65b 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java
@@ -25,15 +25,15 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
-import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.store.jdbc.ConnectionProvider;
public interface JDBCConnectionProviderFactory extends Pluggable
{
String getType();
- ConnectionProvider getConnectionProvider(String connectionUrl, VirtualHost virtualHost, boolean configStoreOnly)
+ ConnectionProvider getConnectionProvider(String connectionUrl, Map<String, Object> storeSettings)
throws SQLException;
static final class TYPES
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java
index e552b3e073..472c0661fa 100755
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStore.java
@@ -27,6 +27,8 @@ import org.apache.qpid.server.model.VirtualHost;
public interface DurableConfigurationStore
{
+ String STORE_TYPE = "storeType";
+ String STORE_PATH = "storePath";
public static interface Source
{
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
index ac9bfdcaae..76a4aae2a6 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
@@ -87,9 +87,12 @@ public class JsonFileConfigStore implements DurableConfigurationStore
}
}
- protected void setup(final VirtualHost virtualHost)
+ private void setup(final VirtualHost virtualHost)
{
- Object storePathAttr = virtualHost.getAttribute(VirtualHost.CONFIG_STORE_PATH);
+ @SuppressWarnings("unchecked")
+ Map<String, Object> configurationStoreSettings = virtualHost.getConfigurationStoreSettings();
+
+ Object storePathAttr = configurationStoreSettings.get(DurableConfigurationStore.STORE_PATH);
if(!(storePathAttr instanceof String))
{
throw new StoreException("Cannot determine path for configuration storage");
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStoreFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStoreFactory.java
index 374a35d10d..83c8ec2a21 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStoreFactory.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStoreFactory.java
@@ -21,6 +21,7 @@
package org.apache.qpid.server.store;
import java.util.Map;
+
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.plugin.DurableConfigurationStoreFactory;
@@ -41,10 +42,13 @@ public class JsonFileConfigStoreFactory implements DurableConfigurationStoreFact
@Override
public void validateAttributes(Map<String, Object> attributes)
{
- Object storePath = attributes.get(VirtualHost.CONFIG_STORE_PATH);
+ @SuppressWarnings("unchecked")
+ Map<String, Object> configurationStoreSettings = (Map<String, Object>) attributes.get(VirtualHost.CONFIGURATION_STORE_SETTINGS);
+
+ Object storePath = configurationStoreSettings.get(DurableConfigurationStore.STORE_PATH);
if(!(storePath instanceof String))
{
- throw new IllegalArgumentException("Attribute '"+ VirtualHost.CONFIG_STORE_PATH
+ throw new IllegalArgumentException("Setting '"+ DurableConfigurationStore.STORE_PATH
+"' is required and must be of type String.");
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java
index 47c50115d3..be6cc52981 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/StandardVirtualHost.java
@@ -21,7 +21,6 @@ package org.apache.qpid.server.virtualhost;/*
import java.util.Map;
-import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.logging.subjects.MessageStoreLogSubject;
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.plugin.MessageStoreFactory;
@@ -59,11 +58,9 @@ public class StandardVirtualHost extends AbstractVirtualHost
return messageStore;
}
- private DurableConfigurationStore initialiseConfigurationStore(VirtualHost virtualHost)
+ private DurableConfigurationStore initialiseConfigurationStore(String storeType)
{
DurableConfigurationStore configurationStore;
- final Object storeTypeAttr = virtualHost.getAttribute(VirtualHost.CONFIG_STORE_TYPE);
- String storeType = storeTypeAttr == null ? null : String.valueOf(storeTypeAttr);
if(storeType != null)
{
@@ -88,7 +85,9 @@ public class StandardVirtualHost extends AbstractVirtualHost
String storeType = (String) messageStoreSettings.get(MessageStore.STORE_TYPE);
_messageStore = initialiseMessageStore(storeType);
- _durableConfigurationStore = initialiseConfigurationStore(virtualHost);
+ Map<String, Object> configurationStoreSettings = virtualHost.getConfigurationStoreSettings();
+ String configurationStoreType = configurationStoreSettings == null ? null : (String) configurationStoreSettings.get(DurableConfigurationStore.STORE_TYPE);
+ _durableConfigurationStore = initialiseConfigurationStore(configurationStoreType);
DurableConfigurationRecoverer configRecoverer =
new DurableConfigurationRecoverer(getName(), getDurableConfigurationRecoverers(),
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/StoreUpgraderTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/StoreUpgraderTest.java
index 1f435b502f..16acefc78e 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/StoreUpgraderTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/StoreUpgraderTest.java
@@ -74,6 +74,33 @@ public class StoreUpgraderTest extends TestCase
verify(_store).save(expectedNewVirtualHost, expectNewRoot);
}
+ public void testUpgrade13To14_DerbyConfigurationStore() throws Exception
+ {
+ HashMap<String, Object> virtualHostAttributes = new HashMap<String, Object>();
+ virtualHostAttributes.put("name", "test");
+ virtualHostAttributes.put("type", "STANDARD");
+ virtualHostAttributes.put("configStoreType", "DERBy");
+ virtualHostAttributes.put("configStorePath", "/mystorepath");
+
+ doTest(_store, virtualHostAttributes);
+
+ ConfigurationEntry expectNewRoot = new ConfigurationEntry(_brokerId, Broker.class.getSimpleName(), Collections.<String, Object>singletonMap(Broker.MODEL_VERSION, "1.4"), Collections.singleton(_virtualHostId), _store);
+ ConfigurationEntry expectedNewVirtualHost;
+ {
+ Map<String, Object> expectedNewVirtualHostConfigurationStoreSettings = new HashMap<String, Object>();
+ expectedNewVirtualHostConfigurationStoreSettings.put("storeType", "DERBY");
+ expectedNewVirtualHostConfigurationStoreSettings.put("storePath", "/mystorepath");
+
+ Map<String, Object> expectedNewVirtualHostAttributes = new HashMap<String, Object>();
+ expectedNewVirtualHostAttributes.put(VirtualHost.NAME, "test");
+ expectedNewVirtualHostAttributes.put(VirtualHost.TYPE, "STANDARD");
+ expectedNewVirtualHostAttributes.put(VirtualHost.CONFIGURATION_STORE_SETTINGS, expectedNewVirtualHostConfigurationStoreSettings);
+
+ expectedNewVirtualHost = new ConfigurationEntry(_virtualHostId, VirtualHost.class.getSimpleName(), expectedNewVirtualHostAttributes, Collections.<UUID>emptySet(), _store);
+ }
+ verify(_store).save(expectedNewVirtualHost, expectNewRoot);
+ }
+
public void testUpgrade13To14_BdbHa() throws Exception
{
HashMap<String, Object> virtualHostAttributes = new HashMap<String, Object>();
@@ -155,6 +182,47 @@ public class StoreUpgraderTest extends TestCase
verify(_store).save(expectedNewVirtualHost, expectNewRoot);
}
+ public void testUpgrade13To14_BdbMessageStoreAndConfigurationStore() throws Exception
+ {
+ HashMap<String, Object> virtualHostAttributes = new HashMap<String, Object>();
+ virtualHostAttributes.put("name", "test");
+ virtualHostAttributes.put("type", "STANDARD");
+ virtualHostAttributes.put("storeType", "BdB");
+ virtualHostAttributes.put("storePath", "/mystorepath");
+ virtualHostAttributes.put("storeUnderfullSize", 1000);
+ virtualHostAttributes.put("storeOverfullSize", 2000);
+ virtualHostAttributes.put("bdbEnvironmentConfig", Collections.singletonMap("envsettings", "envvalue"));
+ virtualHostAttributes.put("configStoreType", "BdB");
+ virtualHostAttributes.put("configStorePath", "/mystorepath2");
+
+ doTest(_store, virtualHostAttributes);
+
+ ConfigurationEntry expectNewRoot = new ConfigurationEntry(_brokerId, Broker.class.getSimpleName(), Collections.<String, Object>singletonMap(Broker.MODEL_VERSION, "1.4"), Collections.singleton(_virtualHostId), _store);
+ ConfigurationEntry expectedNewVirtualHost;
+ {
+ Map<String, Object> expectedNewVirtualHostMessageSettings = new HashMap<String, Object>();
+ expectedNewVirtualHostMessageSettings.put("storeType", "BDB");
+ expectedNewVirtualHostMessageSettings.put("storePath", "/mystorepath");
+ expectedNewVirtualHostMessageSettings.put("storeUnderfullSize", 1000);
+ expectedNewVirtualHostMessageSettings.put("storeOverfullSize", 2000);
+ expectedNewVirtualHostMessageSettings.put("bdbEnvironmentConfig", Collections.singletonMap("envsettings", "envvalue"));
+
+ Map<String, Object> expectedNewVirtualHostConfigurationSettings = new HashMap<String, Object>();
+ expectedNewVirtualHostConfigurationSettings.put("storeType", "BDB");
+ expectedNewVirtualHostConfigurationSettings.put("storePath", "/mystorepath2");
+ expectedNewVirtualHostConfigurationSettings.put("bdbEnvironmentConfig", Collections.singletonMap("envsettings", "envvalue"));
+
+ Map<String, Object> expectedNewVirtualHostAttributes = new HashMap<String, Object>();
+ expectedNewVirtualHostAttributes.put(VirtualHost.NAME, "test");
+ expectedNewVirtualHostAttributes.put(VirtualHost.TYPE, "STANDARD");
+ expectedNewVirtualHostAttributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, expectedNewVirtualHostMessageSettings);
+ expectedNewVirtualHostAttributes.put(VirtualHost.CONFIGURATION_STORE_SETTINGS, expectedNewVirtualHostConfigurationSettings);
+
+ expectedNewVirtualHost = new ConfigurationEntry(_virtualHostId, VirtualHost.class.getSimpleName(), expectedNewVirtualHostAttributes, Collections.<UUID>emptySet(), _store);
+ }
+ verify(_store).save(expectedNewVirtualHost, expectNewRoot);
+ }
+
public void testUpgrade13To14_JDBC() throws Exception
{
HashMap<String, Object> virtualHostAttributes = new HashMap<String, Object>();
@@ -198,6 +266,91 @@ public class StoreUpgraderTest extends TestCase
verify(_store).save(expectedNewVirtualHost, expectNewRoot);
}
+ public void testUpgrade13To14_JDBC_withStorePath() throws Exception
+ {
+ HashMap<String, Object> virtualHostAttributes = new HashMap<String, Object>();
+ virtualHostAttributes.put("name", "test");
+ virtualHostAttributes.put("type", "STANDARD");
+ virtualHostAttributes.put("storeType", "JdBC");
+ virtualHostAttributes.put("storePath", "jdbc:test");
+
+ doTest(_store, virtualHostAttributes);
+
+ ConfigurationEntry expectNewRoot = new ConfigurationEntry(_brokerId, Broker.class.getSimpleName(), Collections.<String, Object>singletonMap(Broker.MODEL_VERSION, "1.4"), Collections.singleton(_virtualHostId), _store);
+ ConfigurationEntry expectedNewVirtualHost;
+ {
+ Map<String, Object> expectedNewVirtualHostMessageSettings = new HashMap<String, Object>();
+ expectedNewVirtualHostMessageSettings.put("storeType", "JDBC");
+ expectedNewVirtualHostMessageSettings.put("connectionURL", "jdbc:test");
+
+ Map<String, Object> expectedNewVirtualHostAttributes = new HashMap<String, Object>();
+ expectedNewVirtualHostAttributes.put(VirtualHost.NAME, "test");
+ expectedNewVirtualHostAttributes.put(VirtualHost.TYPE, "STANDARD");
+ expectedNewVirtualHostAttributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, expectedNewVirtualHostMessageSettings);
+
+ expectedNewVirtualHost = new ConfigurationEntry(_virtualHostId, VirtualHost.class.getSimpleName(), expectedNewVirtualHostAttributes, Collections.<UUID>emptySet(), _store);
+ }
+ verify(_store).save(expectedNewVirtualHost, expectNewRoot);
+ }
+
+ public void testUpgrade13To14_JDBCConfigurationStoreAndMessageStore() throws Exception
+ {
+ HashMap<String, Object> virtualHostAttributes = new HashMap<String, Object>();
+ virtualHostAttributes.put("name", "test");
+ virtualHostAttributes.put("type", "STANDARD");
+ virtualHostAttributes.put("storeType", "JdBC");
+ virtualHostAttributes.put("connectionURL", "jdbc:test");
+ virtualHostAttributes.put("connectionPool", "BONECP");
+ virtualHostAttributes.put("jdbcBigIntType", "NUMBER");
+ virtualHostAttributes.put("jdbcBytesForBlob", true);
+ virtualHostAttributes.put("jdbcVarbinaryType", "TEST");
+ virtualHostAttributes.put("jdbcBlobType", "BLOB");
+ virtualHostAttributes.put("partitionCount", 10);
+ virtualHostAttributes.put("maxConnectionsPerPartition", 8);
+ virtualHostAttributes.put("minConnectionsPerPartition", 2);
+ virtualHostAttributes.put("configStoreType", "JdBC");
+ virtualHostAttributes.put("configConnectionURL", "jdbc:test2");
+
+ doTest(_store, virtualHostAttributes);
+
+ ConfigurationEntry expectNewRoot = new ConfigurationEntry(_brokerId, Broker.class.getSimpleName(), Collections.<String, Object>singletonMap(Broker.MODEL_VERSION, "1.4"), Collections.singleton(_virtualHostId), _store);
+ ConfigurationEntry expectedNewVirtualHost;
+ {
+ Map<String, Object> expectedNewVirtualHostMessageSettings = new HashMap<String, Object>();
+ expectedNewVirtualHostMessageSettings.put("storeType", "JDBC");
+ expectedNewVirtualHostMessageSettings.put("connectionURL", "jdbc:test");
+ expectedNewVirtualHostMessageSettings.put("connectionPool", "BONECP");
+ expectedNewVirtualHostMessageSettings.put("jdbcBigIntType", "NUMBER");
+ expectedNewVirtualHostMessageSettings.put("jdbcBytesForBlob", true);
+ expectedNewVirtualHostMessageSettings.put("jdbcVarbinaryType", "TEST");
+ expectedNewVirtualHostMessageSettings.put("jdbcBlobType", "BLOB");
+ expectedNewVirtualHostMessageSettings.put("partitionCount", 10);
+ expectedNewVirtualHostMessageSettings.put("maxConnectionsPerPartition", 8);
+ expectedNewVirtualHostMessageSettings.put("minConnectionsPerPartition", 2);
+
+ Map<String, Object> expectedNewVirtualHostConfigurationSettings = new HashMap<String, Object>();
+ expectedNewVirtualHostConfigurationSettings.put("storeType", "JDBC");
+ expectedNewVirtualHostConfigurationSettings.put("connectionURL", "jdbc:test2");
+ expectedNewVirtualHostConfigurationSettings.put("connectionPool", "BONECP");
+ expectedNewVirtualHostConfigurationSettings.put("jdbcBigIntType", "NUMBER");
+ expectedNewVirtualHostConfigurationSettings.put("jdbcBytesForBlob", true);
+ expectedNewVirtualHostConfigurationSettings.put("jdbcVarbinaryType", "TEST");
+ expectedNewVirtualHostConfigurationSettings.put("jdbcBlobType", "BLOB");
+ expectedNewVirtualHostConfigurationSettings.put("partitionCount", 10);
+ expectedNewVirtualHostConfigurationSettings.put("maxConnectionsPerPartition", 8);
+ expectedNewVirtualHostConfigurationSettings.put("minConnectionsPerPartition", 2);
+
+ Map<String, Object> expectedNewVirtualHostAttributes = new HashMap<String, Object>();
+ expectedNewVirtualHostAttributes.put(VirtualHost.NAME, "test");
+ expectedNewVirtualHostAttributes.put(VirtualHost.TYPE, "STANDARD");
+ expectedNewVirtualHostAttributes.put(VirtualHost.MESSAGE_STORE_SETTINGS, expectedNewVirtualHostMessageSettings);
+ expectedNewVirtualHostAttributes.put(VirtualHost.CONFIGURATION_STORE_SETTINGS, expectedNewVirtualHostConfigurationSettings);
+
+ expectedNewVirtualHost = new ConfigurationEntry(_virtualHostId, VirtualHost.class.getSimpleName(), expectedNewVirtualHostAttributes, Collections.<UUID>emptySet(), _store);
+ }
+ verify(_store).save(expectedNewVirtualHost, expectNewRoot);
+ }
+
private void doTest(ConfigurationEntryStore store, Map<String,Object> virtualHostAttributes)
{
final ConfigurationEntry virtualHostEntry = new ConfigurationEntry(_virtualHostId, VirtualHost.class.getSimpleName(), virtualHostAttributes, Collections.<UUID>emptySet(), store);
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java
index 224a22687f..96609ae992 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/JsonFileConfigStoreTest.java
@@ -48,6 +48,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase
private final ConfigurationRecoveryHandler _recoveryHandler = mock(ConfigurationRecoveryHandler.class);
private VirtualHost _virtualHost;
private JsonFileConfigStore _store;
+ private HashMap<String, Object> _configurationStoreSettings;
@Override
public void setUp() throws Exception
@@ -56,7 +57,10 @@ public class JsonFileConfigStoreTest extends QpidTestCase
removeStoreFile();
_virtualHost = mock(VirtualHost.class);
when(_virtualHost.getName()).thenReturn(getName());
- when(_virtualHost.getAttribute(VirtualHost.CONFIG_STORE_PATH)).thenReturn(TMP_FOLDER);
+ _configurationStoreSettings = new HashMap<String, Object>();
+ _configurationStoreSettings.put(JsonFileConfigStore.STORE_TYPE, JsonFileConfigStore.TYPE);
+ _configurationStoreSettings.put(JsonFileConfigStore.STORE_PATH, TMP_FOLDER);
+ when(_virtualHost.getConfigurationStoreSettings()).thenReturn(_configurationStoreSettings);
_store = new JsonFileConfigStore();
}
@@ -77,7 +81,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase
public void testNoStorePath() throws Exception
{
- when(_virtualHost.getAttribute(VirtualHost.CONFIG_STORE_PATH)).thenReturn(null);
+ _configurationStoreSettings.put(JsonFileConfigStore.STORE_PATH, null);
try
{
_store.configureConfigStore(_virtualHost, _recoveryHandler);
@@ -92,7 +96,7 @@ public class JsonFileConfigStoreTest extends QpidTestCase
public void testInvalidStorePath() throws Exception
{
- when(_virtualHost.getAttribute(VirtualHost.CONFIG_STORE_PATH)).thenReturn(System.getProperty("file.separator"));
+ _configurationStoreSettings.put(JsonFileConfigStore.STORE_PATH, System.getProperty("file.separator"));
try
{
_store.configureConfigStore(_virtualHost, _recoveryHandler);
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java
index 35b4b89bf6..e31cb16d27 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/StandardVirtualHostTest.java
@@ -40,9 +40,9 @@ import org.apache.qpid.server.queue.AMQQueue;
import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.store.ConfigurationRecoveryHandler;
+import org.apache.qpid.server.store.DurableConfigurationStore;
import org.apache.qpid.server.store.JsonFileConfigStore;
import org.apache.qpid.server.store.MessageStore;
-import org.apache.qpid.server.store.TestMemoryMessageStore;
import org.apache.qpid.server.store.TestableMemoryMessageStore;
import org.apache.qpid.server.util.BrokerTestHelper;
import org.apache.qpid.test.utils.QpidTestCase;
@@ -254,8 +254,10 @@ public class StandardVirtualHostTest extends QpidTestCase
_virtualHostRegistry = broker.getVirtualHostRegistry();
org.apache.qpid.server.model.VirtualHost<?> model = mock(org.apache.qpid.server.model.VirtualHost.class);
- when(model.getAttribute(org.apache.qpid.server.model.VirtualHost.CONFIG_STORE_TYPE)).thenReturn(JsonFileConfigStore.TYPE);
- when(model.getAttribute(org.apache.qpid.server.model.VirtualHost.CONFIG_STORE_PATH)).thenReturn(_storeFolder.getAbsolutePath());
+ Map<String, Object> configurationStoreSettings = new HashMap<String, Object>();
+ when(model.getConfigurationStoreSettings()).thenReturn(configurationStoreSettings);
+ configurationStoreSettings.put(DurableConfigurationStore.STORE_TYPE, JsonFileConfigStore.TYPE);
+ configurationStoreSettings.put(DurableConfigurationStore.STORE_PATH, _storeFolder.getAbsolutePath());
Map<String, Object> messageStoreSettings = new HashMap<String, Object>();
messageStoreSettings.put(MessageStore.STORE_TYPE, TestableMemoryMessageStore.TYPE);
@@ -296,7 +298,11 @@ public class StandardVirtualHostTest extends QpidTestCase
JsonFileConfigStore store = new JsonFileConfigStore();
org.apache.qpid.server.model.VirtualHost<?> virtualHost = mock(org.apache.qpid.server.model.VirtualHost.class);
when(virtualHost.getName()).thenReturn(vhostName);
- when(virtualHost.getAttribute(org.apache.qpid.server.model.VirtualHost.CONFIG_STORE_PATH)).thenReturn(_storeFolder.getAbsolutePath());
+ Map<String, Object> configurationStoreSettings = new HashMap<String, Object>();
+ when(virtualHost.getConfigurationStoreSettings()).thenReturn(configurationStoreSettings);
+ configurationStoreSettings.put(DurableConfigurationStore.STORE_TYPE, JsonFileConfigStore.TYPE);
+ configurationStoreSettings.put(DurableConfigurationStore.STORE_PATH, _storeFolder.getAbsolutePath());
+
ConfigurationRecoveryHandler recoveryHandler = mock(ConfigurationRecoveryHandler.class);
when(recoveryHandler.completeConfigurationRecovery()).thenReturn(org.apache.qpid.server.model.VirtualHost.CURRENT_CONFIG_VERSION);
store.configureConfigStore(virtualHost , recoveryHandler );
diff --git a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java
index 25ce3b8adc..f7b65075f7 100644
--- a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java
+++ b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStore.java
@@ -132,12 +132,13 @@ public class DerbyMessageStore extends AbstractJDBCMessageStore implements Messa
//Update to pick up QPID_WORK and use that as the default location not just derbyDB
Map<String, Object> messageStoreSettings = virtualHost.getMessageStoreSettings();
+ Map<String, Object> configurationStoreSettings = virtualHost.getConfigurationStoreSettings();
_driverClass = (Class<Driver>) Class.forName(SQL_DRIVER_NAME);
String databasePath = null;
if (isConfigStoreOnly())
{
- databasePath = (String) virtualHost.getAttribute(VirtualHost.CONFIG_STORE_PATH);
+ databasePath = (String) configurationStoreSettings.get(DurableConfigurationStore.STORE_PATH);
}
else
{
diff --git a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStoreFactory.java b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStoreFactory.java
index 4e81c4e9ba..a3610901c5 100644
--- a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStoreFactory.java
+++ b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyMessageStoreFactory.java
@@ -65,12 +65,15 @@ public class DerbyMessageStoreFactory implements MessageStoreFactory, DurableCon
}
}
- if(getType().equals(attributes.get(VirtualHost.CONFIG_STORE_TYPE)))
+
+ @SuppressWarnings("unchecked")
+ Map<String, Object> configurationStoreSettings = (Map<String, Object>) attributes.get(VirtualHost.CONFIGURATION_STORE_SETTINGS);
+ if(getType().equals(configurationStoreSettings.get(DurableConfigurationStore.STORE_TYPE)))
{
- Object storePath = attributes.get(VirtualHost.CONFIG_STORE_PATH);
+ Object storePath = configurationStoreSettings.get(DurableConfigurationStore.STORE_PATH);
if(!(storePath instanceof String))
{
- throw new IllegalArgumentException("Attribute '"+ VirtualHost.CONFIG_STORE_PATH
+ throw new IllegalArgumentException("Setting '"+ DurableConfigurationStore.STORE_PATH
+"' is required and must be of type String.");
}
diff --git a/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProvider.java b/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProvider.java
index 370f92651c..2b45aad5e5 100644
--- a/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProvider.java
+++ b/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProvider.java
@@ -24,7 +24,6 @@ import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;
-import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.store.jdbc.ConnectionProvider;
import org.apache.qpid.server.util.MapValueConverter;
@@ -43,52 +42,16 @@ public class BoneCPConnectionProvider implements ConnectionProvider
private final BoneCP _connectionPool;
- public BoneCPConnectionProvider(String connectionUrl, VirtualHost virtualHost, boolean configStoreOnly) throws SQLException
+ public BoneCPConnectionProvider(String connectionUrl, Map<String, Object> storeSettings) throws SQLException
{
BoneCPConfig config = new BoneCPConfig();
config.setJdbcUrl(connectionUrl);
-
- if (configStoreOnly)
- {
- config.setMinConnectionsPerPartition(getIntegerAttribute(virtualHost, MIN_CONNECTIONS_PER_PARTITION, DEFAULT_MIN_CONNECTIONS_PER_PARTITION));
- config.setMaxConnectionsPerPartition(getIntegerAttribute(virtualHost, MAX_CONNECTIONS_PER_PARTITION, DEFAULT_MAX_CONNECTIONS_PER_PARTITION));
- config.setPartitionCount(getIntegerAttribute(virtualHost, PARTITION_COUNT,DEFAULT_PARTITION_COUNT));
- }
- else
- {
- Map<String, Object> storeSettings = virtualHost.getMessageStoreSettings();
- config.setMinConnectionsPerPartition(MapValueConverter.getIntegerAttribute(MIN_CONNECTIONS_PER_PARTITION, storeSettings, DEFAULT_MIN_CONNECTIONS_PER_PARTITION));
- config.setMaxConnectionsPerPartition(MapValueConverter.getIntegerAttribute(MAX_CONNECTIONS_PER_PARTITION, storeSettings, DEFAULT_MAX_CONNECTIONS_PER_PARTITION));
- config.setPartitionCount(MapValueConverter.getIntegerAttribute(PARTITION_COUNT, storeSettings,DEFAULT_PARTITION_COUNT));
- }
+ config.setMinConnectionsPerPartition(MapValueConverter.getIntegerAttribute(MIN_CONNECTIONS_PER_PARTITION, storeSettings, DEFAULT_MIN_CONNECTIONS_PER_PARTITION));
+ config.setMaxConnectionsPerPartition(MapValueConverter.getIntegerAttribute(MAX_CONNECTIONS_PER_PARTITION, storeSettings, DEFAULT_MAX_CONNECTIONS_PER_PARTITION));
+ config.setPartitionCount(MapValueConverter.getIntegerAttribute(PARTITION_COUNT, storeSettings, DEFAULT_PARTITION_COUNT));
_connectionPool = new BoneCP(config);
}
- private int getIntegerAttribute(VirtualHost virtualHost, String attributeName, int defaultVal)
- {
- Object attrValue = virtualHost.getAttribute(attributeName);
- if(attrValue != null)
- {
- if(attrValue instanceof Number)
- {
- return ((Number) attrValue).intValue();
- }
- else if(attrValue instanceof String)
- {
- try
- {
- return Integer.parseInt((String)attrValue);
- }
- catch (NumberFormatException e)
- {
- return defaultVal;
- }
- }
-
- }
- return defaultVal;
- }
-
@Override
public Connection getConnection() throws SQLException
{
diff --git a/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProviderFactory.java b/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProviderFactory.java
index f12e7f35e6..58206b270c 100644
--- a/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProviderFactory.java
+++ b/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProviderFactory.java
@@ -21,8 +21,8 @@
package org.apache.qpid.server.store.jdbc.bonecp;
import java.sql.SQLException;
+import java.util.Map;
-import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.plugin.JDBCConnectionProviderFactory;
import org.apache.qpid.server.store.jdbc.ConnectionProvider;
@@ -35,9 +35,9 @@ public class BoneCPConnectionProviderFactory implements JDBCConnectionProviderFa
}
@Override
- public ConnectionProvider getConnectionProvider(String connectionUrl, VirtualHost virtualHost, boolean configStoreOnly)
+ public ConnectionProvider getConnectionProvider(String connectionUrl, Map<String, Object> storeSettings)
throws SQLException
{
- return new BoneCPConnectionProvider(connectionUrl, virtualHost, configStoreOnly);
+ return new BoneCPConnectionProvider(connectionUrl, storeSettings);
}
}
diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java
index cc7fda4c82..191cc2ab7a 100644
--- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java
+++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java
@@ -20,21 +20,23 @@
*/
package org.apache.qpid.server.store.jdbc;
-import org.apache.qpid.server.model.VirtualHost;
+import java.util.Map;
+
import org.apache.qpid.server.plugin.JDBCConnectionProviderFactory;
public class DefaultConnectionProviderFactory implements JDBCConnectionProviderFactory
{
+ public static final String TYPE = "DEFAULT";
+
@Override
public String getType()
{
- return "NONE";
+ return TYPE;
}
@Override
- public ConnectionProvider getConnectionProvider(String connectionUrl,
- VirtualHost virtualHost, boolean configStoreOnly)
+ public ConnectionProvider getConnectionProvider(String connectionUrl, Map<String, Object> settings)
{
return new DefaultConnectionProvider(connectionUrl);
}
diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStore.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStore.java
index d8fb124c69..2c2b701c61 100644
--- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStore.java
+++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStore.java
@@ -52,7 +52,6 @@ public class JDBCMessageStore extends AbstractJDBCMessageStore implements Messag
public static final String TYPE = "JDBC";
public static final String CONNECTION_URL = "connectionURL";
- public static final String CONFIG_CONNECTION_URL = "configConnectionURL";
public static final String CONNECTION_POOL = "connectionPool";
public static final String JDBC_BIG_INT_TYPE = "jdbcBigIntType";
public static final String JDBC_BYTES_FOR_BLOB = "jdbcBytesForBlob";
@@ -286,26 +285,10 @@ public class JDBCMessageStore extends AbstractJDBCMessageStore implements Messag
VirtualHost virtualHost)
throws ClassNotFoundException, SQLException
{
- Map<String, Object> messageStoreSettings = virtualHost.getMessageStoreSettings();
+ Map<String, Object> storeSettings = isConfigStoreOnly() ? virtualHost.getConfigurationStoreSettings() : virtualHost.getMessageStoreSettings();
+ String connectionURL = String.valueOf(storeSettings.get(CONNECTION_URL));
+ Object poolAttribute = storeSettings.get(CONNECTION_POOL);
- String connectionURL;
- Object poolAttribute = null;
- boolean configStoreOnly = isConfigStoreOnly();
- if(!configStoreOnly)
- {
- connectionURL = messageStoreSettings.get(CONNECTION_URL) == null
- ? String.valueOf(messageStoreSettings.get(MessageStore.STORE_PATH))
- : String.valueOf(messageStoreSettings.get(CONNECTION_URL));
- poolAttribute = messageStoreSettings.get(CONNECTION_POOL);
- }
- else
- {
- connectionURL = virtualHost.getAttribute(CONFIG_CONNECTION_URL) == null
- ? String.valueOf(virtualHost.getAttribute(VirtualHost.CONFIG_STORE_PATH))
- : String.valueOf(virtualHost.getAttribute(CONFIG_CONNECTION_URL));
- poolAttribute = virtualHost.getAttribute(CONNECTION_POOL);
-
- }
JDBCDetails details = null;
String[] components = connectionURL.split(":",3);
@@ -323,7 +306,7 @@ public class JDBCMessageStore extends AbstractJDBCMessageStore implements Messag
details = DERBY_DETAILS;
}
- String connectionPoolType = poolAttribute == null ? "DEFAULT" : String.valueOf(poolAttribute);
+ String connectionPoolType = poolAttribute == null ? DefaultConnectionProviderFactory.TYPE : String.valueOf(poolAttribute);
JDBCConnectionProviderFactory connectionProviderFactory =
JDBCConnectionProviderFactory.FACTORIES.get(connectionPoolType);
@@ -333,54 +316,14 @@ public class JDBCMessageStore extends AbstractJDBCMessageStore implements Messag
connectionProviderFactory = new DefaultConnectionProviderFactory();
}
- _connectionProvider = connectionProviderFactory.getConnectionProvider(connectionURL, virtualHost, configStoreOnly);
-
- if(!configStoreOnly)
- {
- _blobType = MapValueConverter.getStringAttribute(JDBC_BLOB_TYPE, messageStoreSettings, details.getBlobType());
- _varBinaryType = MapValueConverter.getStringAttribute(JDBC_VARBINARY_TYPE, messageStoreSettings, details.getVarBinaryType());
- _useBytesMethodsForBlob = MapValueConverter.getBooleanAttribute(JDBC_BYTES_FOR_BLOB, messageStoreSettings, details.isUseBytesMethodsForBlob());
- _bigIntType = MapValueConverter.getStringAttribute(JDBC_BIG_INT_TYPE, messageStoreSettings, details.getBigintType());
- }
- else
- {
- _blobType = getStringAttribute(virtualHost, JDBC_BLOB_TYPE,details.getBlobType());
- _varBinaryType = getStringAttribute(virtualHost, JDBC_VARBINARY_TYPE,details.getVarBinaryType());
- _useBytesMethodsForBlob = getBooleanAttribute(virtualHost, JDBC_BYTES_FOR_BLOB,details.isUseBytesMethodsForBlob());
- _bigIntType = getStringAttribute(virtualHost, JDBC_BIG_INT_TYPE, details.getBigintType());
- }
- }
-
-
- private String getStringAttribute(VirtualHost virtualHost, String attributeName, String defaultVal)
- {
- Object attrValue = virtualHost.getAttribute(attributeName);
- if(attrValue != null)
- {
- return attrValue.toString();
- }
- return defaultVal;
- }
-
- private boolean getBooleanAttribute(VirtualHost virtualHost, String attributeName, boolean defaultVal)
- {
- Object attrValue = virtualHost.getAttribute(attributeName);
- if(attrValue != null)
- {
- if(attrValue instanceof Boolean)
- {
- return ((Boolean) attrValue).booleanValue();
- }
- else if(attrValue instanceof String)
- {
- return Boolean.parseBoolean((String)attrValue);
- }
-
- }
- return defaultVal;
+ _connectionProvider = connectionProviderFactory.getConnectionProvider(connectionURL, storeSettings);
+ _blobType = MapValueConverter.getStringAttribute(JDBC_BLOB_TYPE, storeSettings, details.getBlobType());
+ _varBinaryType = MapValueConverter.getStringAttribute(JDBC_VARBINARY_TYPE, storeSettings, details.getVarBinaryType());
+ _useBytesMethodsForBlob = MapValueConverter.getBooleanAttribute(JDBC_BYTES_FOR_BLOB, storeSettings, details.isUseBytesMethodsForBlob());
+ _bigIntType = MapValueConverter.getStringAttribute(JDBC_BIG_INT_TYPE, storeSettings, details.getBigintType());
}
-
+ @Override
protected void storedSizeChange(int contentSize)
{
}
diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreFactory.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreFactory.java
index 0a8f682f16..acce1b75a2 100644
--- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreFactory.java
+++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreFactory.java
@@ -54,7 +54,6 @@ public class JDBCMessageStoreFactory implements MessageStoreFactory, DurableConf
{
@SuppressWarnings("unchecked")
Map<String, Object> messageStoreSettings = (Map<String, Object>) attributes.get(VirtualHost.MESSAGE_STORE_SETTINGS);
-
if(getType().equals(messageStoreSettings.get(MessageStore.STORE_TYPE)))
{
Object connectionURL = messageStoreSettings.get(JDBCMessageStore.CONNECTION_URL);
@@ -65,18 +64,16 @@ public class JDBCMessageStoreFactory implements MessageStoreFactory, DurableConf
}
}
- if(getType().equals(attributes.get(VirtualHost.CONFIG_STORE_TYPE)))
+
+ @SuppressWarnings("unchecked")
+ Map<String, Object> configurationStoreSettings = (Map<String, Object>) attributes.get(VirtualHost.CONFIGURATION_STORE_SETTINGS);
+ if(configurationStoreSettings != null && getType().equals(configurationStoreSettings.get(DurableConfigurationStore.STORE_TYPE)))
{
- Object connectionURL = attributes.get(JDBCMessageStore.CONFIG_CONNECTION_URL);
+ Object connectionURL = configurationStoreSettings.get(JDBCMessageStore.CONNECTION_URL);
if(!(connectionURL instanceof String))
{
- Object storePath = attributes.get(VirtualHost.CONFIG_STORE_PATH);
- if(!(storePath instanceof String))
- {
- throw new IllegalArgumentException("Attribute '"+ JDBCMessageStore.CONFIG_CONNECTION_URL
- +"' is required and must be of type String.");
-
- }
+ throw new IllegalArgumentException("Setting '"+ JDBCMessageStore.CONNECTION_URL
+ +"' is required and must be of type String.");
}
}
}
diff --git a/qpid/java/broker-core/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.JDBCConnectionProviderFactory b/qpid/java/broker-plugins/jdbc-store/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.JDBCConnectionProviderFactory
index e0ae6e97cc..e0ae6e97cc 100644
--- a/qpid/java/broker-core/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.JDBCConnectionProviderFactory
+++ b/qpid/java/broker-plugins/jdbc-store/src/main/resources/META-INF/services/org.apache.qpid.server.plugin.JDBCConnectionProviderFactory
diff --git a/qpid/java/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java b/qpid/java/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java
index 65bf795045..dc6bb0158d 100644
--- a/qpid/java/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java
+++ b/qpid/java/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java
@@ -20,7 +20,8 @@
*/
package org.apache.qpid.server.store.jdbc;
-import java.io.File;
+import static org.mockito.Mockito.when;
+
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
@@ -35,9 +36,6 @@ import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.store.MessageStore;
import org.apache.qpid.server.store.MessageStoreTestCase;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.when;
-
public class JDBCMessageStoreTest extends MessageStoreTestCase
{
private String _connectionURL;
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java
index 0d76f6c444..9ad08ef331 100644
--- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java
@@ -62,8 +62,6 @@ public class Asserts
ConfiguredObject.DESCRIPTION,
VirtualHost.SUPPORTED_QUEUE_TYPES,
VirtualHost.TYPE,
- VirtualHost.CONFIG_STORE_PATH,
- VirtualHost.CONFIG_STORE_TYPE,
VirtualHost.CONFIGURATION_STORE_SETTINGS,
VirtualHost.SECURITY_ACL);