diff options
author | Keith Wall <kwall@apache.org> | 2014-03-17 17:04:05 +0000 |
---|---|---|
committer | Keith Wall <kwall@apache.org> | 2014-03-17 17:04:05 +0000 |
commit | 8ad99bd6b07efe9f91ed9cde2b2121028005c317 (patch) | |
tree | 8a9b33c0294fe1745b617ca1399fccd654de1759 | |
parent | ec486999608568e37a55dc9c81d9be133d95ebc3 (diff) | |
download | qpid-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
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); |