diff options
| author | Keith Wall <kwall@apache.org> | 2014-06-18 22:15:54 +0000 |
|---|---|---|
| committer | Keith Wall <kwall@apache.org> | 2014-06-18 22:15:54 +0000 |
| commit | baa3cc48506e60d86f44577a410fd3683be30014 (patch) | |
| tree | e334e48db83d6f9209b5a71f76e1b657a35b5710 /qpid/java/broker-plugins | |
| parent | 3a95f8c316e8d81a876094409a5952b3f41b5ba3 (diff) | |
| download | qpid-python-baa3cc48506e60d86f44577a410fd3683be30014.tar.gz | |
QPID-5822: [Java Broker] Replace low level BDB/JDBC attributes in fovour of context variables from the model
* BDB attributes environmentConfiguration/replicatedEnvironmentConfiguration removed. User can now specify
context variables with the configuration keys that are understood by JE itself.
* JDBC attributes bigIntType/bytesForBlob/varBinaryType/blobType are now context variables with names begining qpid.jdbcstore.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1603655 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-plugins')
8 files changed, 350 insertions, 214 deletions
diff --git a/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreQuotaEventsTest.java b/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreQuotaEventsTest.java index ba7ae26292..348d81fadd 100644 --- a/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreQuotaEventsTest.java +++ b/qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/store/derby/DerbyMessageStoreQuotaEventsTest.java @@ -20,6 +20,7 @@ */ package org.apache.qpid.server.store.derby; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -65,4 +66,10 @@ public class DerbyMessageStoreQuotaEventsTest extends MessageStoreQuotaEventsTes return messageStoreSettings; } + @Override + protected Map<String, String> createContextSettings() + { + return Collections.emptyMap(); + } + } 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 8bc3a10320..4dfb05ff4f 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 @@ -31,9 +31,10 @@ import java.util.Map; public class BoneCPConnectionProvider implements ConnectionProvider { - public static final String PARTITION_COUNT = "partitionCount"; - public static final String MAX_CONNECTIONS_PER_PARTITION = "maxConnectionsPerPartition"; - public static final String MIN_CONNECTIONS_PER_PARTITION = "minConnectionsPerPartition"; + public static final String PARTITION_COUNT = "qpid.jdbcstore.bonecp.partitionCount"; + public static final String MAX_CONNECTIONS_PER_PARTITION = "qpid.jdbcstore.bonecp.maxConnectionsPerPartition"; + public static final String MIN_CONNECTIONS_PER_PARTITION = "qpid.jdbcstore.bonecp.minConnectionsPerPartition"; + public static final int DEFAULT_MIN_CONNECTIONS_PER_PARTITION = 5; public static final int DEFAULT_MAX_CONNECTIONS_PER_PARTITION = 10; @@ -43,6 +44,7 @@ public class BoneCPConnectionProvider implements ConnectionProvider public BoneCPConnectionProvider(String connectionUrl, Map<String, Object> storeSettings) throws SQLException { + // TODO change interface to pass through username and password BoneCPConfig config = new BoneCPConfig(); config.setJdbcUrl(connectionUrl); config.setMinConnectionsPerPartition(MapValueConverter.getIntegerAttribute(MIN_CONNECTIONS_PER_PARTITION, storeSettings, DEFAULT_MIN_CONNECTIONS_PER_PARTITION)); diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java index 6e707b5f3b..aa8c38cbb0 100644 --- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java @@ -32,7 +32,6 @@ import org.apache.log4j.Logger; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.plugin.JDBCConnectionProviderFactory; import org.apache.qpid.server.store.*; -import org.apache.qpid.server.util.MapValueConverter; /** * Implementation of a DurableConfigurationStore backed by Generic JDBC Database @@ -46,15 +45,11 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor public static final String CONNECTION_URL = "connectionUrl"; public static final String CONNECTION_POOL_TYPE = "connectionPoolType"; - public static final String JDBC_BIG_INT_TYPE = "bigIntType"; - public static final String JDBC_BYTES_FOR_BLOB = "bytesForBlob"; - public static final String JDBC_VARBINARY_TYPE = "varbinaryType"; - public static final String JDBC_BLOB_TYPE = "blobType"; private final AtomicBoolean _configurationStoreOpen = new AtomicBoolean(); private final MessageStore _providedMessageStore = new ProvidedMessageStore(); - protected String _connectionURL; + private String _connectionURL; private ConnectionProvider _connectionProvider; private String _blobType; @@ -74,20 +69,17 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor _connectionURL = String.valueOf(storeSettings.get(CONNECTION_URL)); Object poolAttribute = storeSettings.get(CONNECTION_POOL_TYPE); - JDBCDetails details = null; + JDBCDetails details = JDBCDetails.getDetailsForJdbcUrl(_connectionURL, parent.getContext()); - String[] components = _connectionURL.split(":", 3); - if(components.length >= 2) + if (!details.isKnownVendor() && getLogger().isInfoEnabled()) { - String vendor = components[1]; - details = JDBCDetails.getDetails(vendor); + getLogger().info("Do not recognize vendor from connection URL: " + _connectionURL + + " Using fallback settings " + details); } - - if(details == null) + if (details.isOverridden() && getLogger().isInfoEnabled()) { - getLogger().info("Do not recognize vendor from connection URL: " + _connectionURL); - - details = JDBCDetails.getDefaultDetails(); + getLogger().info("One or more JDBC details were overridden from context. " + + " Using settings : " + details); } String connectionPoolType = poolAttribute == null ? DefaultConnectionProviderFactory.TYPE : String.valueOf(poolAttribute); @@ -110,12 +102,10 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor { throw new StoreException("Failed to create connection provider for " + _connectionURL); } - _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()); + _blobType = details.getBlobType(); + _varBinaryType = details.getVarBinaryType(); + _useBytesMethodsForBlob = details.isUseBytesMethodsForBlob(); + _bigIntType = details.getBigintType(); createOrOpenConfigurationStoreDatabase(); } diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java index dad4432183..680f6b5d10 100644 --- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java @@ -25,6 +25,7 @@ import java.sql.Blob; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Collections; import java.util.Map; import org.apache.log4j.Logger; @@ -42,13 +43,8 @@ public class GenericJDBCMessageStore extends GenericAbstractJDBCMessageStore private static final Logger _logger = Logger.getLogger(GenericJDBCMessageStore.class); - public static final String TYPE = "JDBC"; public static final String CONNECTION_URL = "connectionUrl"; public static final String CONNECTION_POOL_TYPE = "connectionPoolType"; - public static final String JDBC_BIG_INT_TYPE = "bigIntType"; - public static final String JDBC_BYTES_FOR_BLOB = "bytesForBlob"; - public static final String JDBC_VARBINARY_TYPE = "varbinaryType"; - public static final String JDBC_BLOB_TYPE = "blobType"; protected String _connectionURL; private ConnectionProvider _connectionProvider; @@ -58,35 +54,29 @@ public class GenericJDBCMessageStore extends GenericAbstractJDBCMessageStore private String _bigIntType; private boolean _useBytesMethodsForBlob; - @Override protected void doOpen(final ConfiguredObject<?> parent, final Map<String, Object> storeSettings) throws StoreException { _connectionURL = String.valueOf(storeSettings.get(CONNECTION_URL)); - org.apache.qpid.server.store.jdbc.JDBCDetails details = null; + JDBCDetails details = JDBCDetails.getDetailsForJdbcUrl(_connectionURL, parent.getContext()); - String[] components = _connectionURL.split(":", 3); - if(components.length >= 2) + if (!details.isKnownVendor() && getLogger().isInfoEnabled()) { - String vendor = components[1]; - details = org.apache.qpid.server.store.jdbc.JDBCDetails.getDetails(vendor); + getLogger().info("Do not recognize vendor from connection URL: " + _connectionURL + + " Using fallback settings " + details); } - - if(details == null) + if (details.isOverridden() && getLogger().isInfoEnabled()) { - getLogger().info("Do not recognize vendor from connection URL: " + _connectionURL); - - details = org.apache.qpid.server.store.jdbc.JDBCDetails.getDefaultDetails(); + getLogger().info("One or more JDBC details were overridden from context. " + + " Using settings : " + details); } + _blobType = details.getBlobType(); + _varBinaryType = details.getVarBinaryType(); + _useBytesMethodsForBlob = details.isUseBytesMethodsForBlob(); + _bigIntType = details.getBigintType(); - _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()); Object poolAttribute = storeSettings.get(CONNECTION_POOL_TYPE); String connectionPoolType = poolAttribute == null ? DefaultConnectionProviderFactory.TYPE : String.valueOf(poolAttribute); @@ -95,12 +85,13 @@ public class GenericJDBCMessageStore extends GenericAbstractJDBCMessageStore JDBCConnectionProviderFactory.FACTORIES.get(connectionPoolType); if(connectionProviderFactory == null) { - _logger.warn("Unknown connection pool type: " + connectionPoolType + ". no connection pooling will be used"); + _logger.warn("Unknown connection pool type: " + connectionPoolType + ". No connection pooling will be used"); connectionProviderFactory = new DefaultConnectionProviderFactory(); } try { + // TODO: Pass parent to the connenction provider? _connectionProvider = connectionProviderFactory.getConnectionProvider(_connectionURL, storeSettings); } catch (SQLException e) diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCDetails.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCDetails.java index 6cf1413b83..a74f852dfa 100644 --- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCDetails.java +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCDetails.java @@ -19,123 +19,128 @@ package org.apache.qpid.server.store.jdbc; +import java.util.Collections; import java.util.HashMap; import java.util.Map; -public class JDBCDetails +public abstract class JDBCDetails { + public static final String CONTEXT_JDBCSTORE_BIGINTTYPE = "qpid.jdbcstore.bigIntType"; + public static final String CONTEXT_JDBCSTORE_VARBINARYTYPE = "qpid.jdbcstore.varBinaryType"; + public static final String CONTEXT_JDBCSTORE_BLOBTYPE = "qpid.jdbcstore.blobType"; + public static final String CONTEXT_JDBCSTORE_USEBYTESFORBLOB = "qpid.jdbcstore.useBytesForBlob"; - private static Map<String, JDBCDetails> VENDOR_DETAILS = new HashMap<>(); + public abstract String getVendor(); - private static JDBCDetails DERBY_DETAILS = - new JDBCDetails("derby", - "blob", - "varchar(%d) for bit data", - "bigint", - false); + public abstract String getBlobType(); - private static JDBCDetails POSTGRESQL_DETAILS = - new JDBCDetails("postgresql", - "bytea", - "bytea", - "bigint", - true); + public abstract String getVarBinaryType(); - private static JDBCDetails MYSQL_DETAILS = - new JDBCDetails("mysql", - "blob", - "varbinary(%d)", - "bigint", - false); + public abstract String getBigintType(); + public abstract boolean isUseBytesMethodsForBlob(); - private static JDBCDetails SYBASE_DETAILS = - new JDBCDetails("sybase", - "image", - "varbinary(%d)", - "bigint", - false); + public abstract boolean isKnownVendor(); + public abstract boolean isOverridden(); - private static JDBCDetails ORACLE_DETAILS = - new JDBCDetails("oracle", - "blob", - "raw(%d)", - "number", - false); - - - static - { - - addDetails(DERBY_DETAILS); - addDetails(POSTGRESQL_DETAILS); - addDetails(MYSQL_DETAILS); - addDetails(SYBASE_DETAILS); - addDetails(ORACLE_DETAILS); - } - - public static JDBCDetails getDetails(String vendor) + static class KnownJDBCDetails extends JDBCDetails { - return VENDOR_DETAILS.get(vendor); - } + private static final JDBCDetails FALLBACK = new KnownJDBCDetails("fallback", "blob", "varchar(%d) for bit data", "bigint", false, + false); + private static final JDBCDetails ORACLE = new KnownJDBCDetails("oracle", "blob", "raw(%d)", "number", false, + true); + private static final JDBCDetails SYBASE = new KnownJDBCDetails("sybase", "image", "varbinary(%d)", "bigint", false, + true); + private static final JDBCDetails POSTGRES = new KnownJDBCDetails("postgresql", "bytea", "bytea", "bigint", true, + true); + private static final JDBCDetails DERBY = new KnownJDBCDetails("derby", "blob", "varchar(%d) for bit data", "bigint", false, + true); + + static + { + Map<String, JDBCDetails> map = new HashMap<>(); + + try + { + map.put(ORACLE.getVendor(), ORACLE); + map.put(SYBASE.getVendor(), SYBASE); + map.put(POSTGRES.getVendor(), POSTGRES); + map.put(DERBY.getVendor(), DERBY); + map.put(FALLBACK.getVendor(), FALLBACK); + } + finally + { + VENDOR_DETAILS = Collections.unmodifiableMap(map); + } + } - public static JDBCDetails getDefaultDetails() - { - return DERBY_DETAILS; - } + private final static Map<String, JDBCDetails> VENDOR_DETAILS; + + private final String _vendor; + private final String _blobType; + private final String _varBinaryType; + private final String _bigintType; + private final boolean _useBytesMethodsForBlob; + private final boolean _isKnownVendor; + + KnownJDBCDetails(String vendor, + String blobType, + String varBinaryType, + String bigIntType, + boolean useBytesMethodsForBlob, + boolean knownVendor) + { + _vendor = vendor; + _blobType = blobType; + _varBinaryType = varBinaryType; + _bigintType = bigIntType; + _useBytesMethodsForBlob = useBytesMethodsForBlob; + _isKnownVendor = knownVendor; + } - private static void addDetails(JDBCDetails details) - { - VENDOR_DETAILS.put(details.getVendor(), details); - } + @Override + public String getVendor() + { + return _vendor; + } - private final String _vendor; - private String _blobType; - private String _varBinaryType; - private String _bigintType; - private boolean _useBytesMethodsForBlob; - - JDBCDetails(String vendor, - String blobType, - String varBinaryType, - String bigIntType, - boolean useBytesMethodsForBlob) - { - _vendor = vendor; - setBlobType(blobType); - setVarBinaryType(varBinaryType); - setBigintType(bigIntType); - setUseBytesMethodsForBlob(useBytesMethodsForBlob); - } + @Override + public String getBlobType() + { + return _blobType; + } + @Override + public String getVarBinaryType() + { + return _varBinaryType; + } - @Override - public boolean equals(Object o) - { - if (this == o) + @Override + public boolean isUseBytesMethodsForBlob() { - return true; + return _useBytesMethodsForBlob; } - if (o == null || getClass() != o.getClass()) + + @Override + public String getBigintType() { - return false; + return _bigintType; } - JDBCDetails that = (JDBCDetails) o; + @Override + public boolean isKnownVendor() + { + return _isKnownVendor; + } - if (!getVendor().equals(that.getVendor())) + @Override + public boolean isOverridden() { return false; } - return true; - } - - @Override - public int hashCode() - { - return getVendor().hashCode(); } @Override @@ -147,51 +152,145 @@ public class JDBCDetails ", varBinaryType='" + getVarBinaryType() + '\'' + ", bigIntType='" + getBigintType() + '\'' + ", useBytesMethodsForBlob=" + isUseBytesMethodsForBlob() + + ", knownVendor=" + isKnownVendor() + + ", overridden=" + isOverridden() + '}'; } - public String getVendor() + @Override + public boolean equals(final Object o) { - return _vendor; - } + if (this == o) + { + return true; + } + if (o == null || getClass() != o.getClass()) + { + return false; + } - public String getBlobType() - { - return _blobType; - } + final JDBCDetails that = (JDBCDetails) o; - public void setBlobType(String blobType) - { - _blobType = blobType; - } + if (isKnownVendor() != that.isKnownVendor()) + { + return false; + } + if (isOverridden() != that.isOverridden()) + { + return false; + } + if (isUseBytesMethodsForBlob() != that.isUseBytesMethodsForBlob()) + { + return false; + } + if (getBigintType() != null ? !getBigintType().equals(that.getBigintType()) : that.getBigintType() != null) + { + return false; + } + if (getBlobType() != null ? !getBlobType().equals(that.getBlobType()) : that.getBlobType() != null) + { + return false; + } + if (getVarBinaryType() != null ? !getVarBinaryType().equals(that.getVarBinaryType()) : that.getVarBinaryType() != null) + { + return false; + } + if (getVendor() != null ? !getVendor().equals(that.getVendor()) : that.getVendor() != null) + { + return false; + } - public String getVarBinaryType() - { - return _varBinaryType; + return true; } - public void setVarBinaryType(String varBinaryType) + @Override + public int hashCode() { - _varBinaryType = varBinaryType; + int result = getVendor() != null ? getVendor().hashCode() : 0; + result = 31 * result + (getBlobType() != null ? getBlobType().hashCode() : 0); + result = 31 * result + (getVarBinaryType() != null ? getVarBinaryType().hashCode() : 0); + result = 31 * result + (getBigintType() != null ? getBigintType().hashCode() : 0); + result = 31 * result + (isUseBytesMethodsForBlob() ? 1 : 0); + result = 31 * result + (isKnownVendor() ? 1 : 0); + result = 31 * result + (isOverridden() ? 1 : 0); + return result; } - public boolean isUseBytesMethodsForBlob() - { - return _useBytesMethodsForBlob; - } - public void setUseBytesMethodsForBlob(boolean useBytesMethodsForBlob) + public static JDBCDetails getDetailsForJdbcUrl(String jdbcUrl, final Map<String, String> contextMap) { - _useBytesMethodsForBlob = useBytesMethodsForBlob; - } + String[] components = jdbcUrl.split(":", 3); + final JDBCDetails details; + if(components.length >= 2) + { + String vendor = components[1]; + if (KnownJDBCDetails.VENDOR_DETAILS.containsKey(vendor)) + { + details = KnownJDBCDetails.VENDOR_DETAILS.get(vendor); + } + else + { + details = KnownJDBCDetails.FALLBACK; + } + } + else + { + details = KnownJDBCDetails.FALLBACK; + } - public String getBigintType() - { - return _bigintType; - } - public void setBigintType(String bigintType) - { - _bigintType = bigintType; + return new JDBCDetails() + { + @Override + public String getVendor() + { + return details.getVendor(); + } + + @Override + public String getBlobType() + { + return contextMap.containsKey(CONTEXT_JDBCSTORE_BLOBTYPE) + ? String.valueOf(contextMap.get(CONTEXT_JDBCSTORE_BLOBTYPE)) : details.getBlobType(); + } + + @Override + public String getVarBinaryType() + { + return contextMap.containsKey(CONTEXT_JDBCSTORE_VARBINARYTYPE) + ? String.valueOf(contextMap.get(CONTEXT_JDBCSTORE_VARBINARYTYPE)) : details.getVarBinaryType(); + } + + @Override + public String getBigintType() + { + return contextMap.containsKey(CONTEXT_JDBCSTORE_BIGINTTYPE) + ? String.valueOf(contextMap.get(CONTEXT_JDBCSTORE_BIGINTTYPE)) : details.getBigintType(); + } + + @Override + public boolean isUseBytesMethodsForBlob() + { + return contextMap.containsKey(CONTEXT_JDBCSTORE_USEBYTESFORBLOB) + ? Boolean.parseBoolean(contextMap.get(CONTEXT_JDBCSTORE_USEBYTESFORBLOB)) : details.isUseBytesMethodsForBlob(); + } + + @Override + public boolean isKnownVendor() + { + return details.isKnownVendor(); + } + + @Override + public boolean isOverridden() + { + return contextMap.containsKey(CONTEXT_JDBCSTORE_USEBYTESFORBLOB) + || contextMap.containsKey(CONTEXT_JDBCSTORE_BIGINTTYPE) + || contextMap.containsKey(CONTEXT_JDBCSTORE_VARBINARYTYPE) + || contextMap.containsKey(CONTEXT_JDBCSTORE_BLOBTYPE); + } + }; + } + } diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java index 302ec9c59f..f9756fec65 100644 --- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java @@ -33,16 +33,4 @@ public interface JDBCVirtualHostNode<X extends JDBCVirtualHostNode<X>> extends V @ManagedAttribute(defaultValue=DefaultConnectionProviderFactory.TYPE) String getConnectionPoolType(); - @ManagedAttribute - String getBigIntType(); - - @ManagedAttribute - boolean isBytesForBlob(); - - @ManagedAttribute - String getVarBinaryType(); - - @ManagedAttribute - String getBlobType(); - } diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java index ab8f4554cb..9098434b69 100644 --- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java +++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java @@ -41,18 +41,6 @@ public class JDBCVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<JDB @ManagedAttributeField private String _connectionPoolType; - @ManagedAttributeField - private String _bigIntType; - - @ManagedAttributeField - private boolean _bytesForBlob; - - @ManagedAttributeField - private String _varBinaryType; - - @ManagedAttributeField - private String _blobType; - @ManagedObjectFactoryConstructor public JDBCVirtualHostNodeImpl(Map<String, Object> attributes, Broker<?> parent) { @@ -77,27 +65,4 @@ public class JDBCVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<JDB return _connectionPoolType; } - @Override - public String getBigIntType() - { - return _bigIntType; - } - - @Override - public boolean isBytesForBlob() - { - return _bytesForBlob; - } - - @Override - public String getVarBinaryType() - { - return _varBinaryType; - } - - @Override - public String getBlobType() - { - return _blobType; - } } diff --git a/qpid/java/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCDetailsTest.java b/qpid/java/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCDetailsTest.java new file mode 100644 index 0000000000..67e9960ca7 --- /dev/null +++ b/qpid/java/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCDetailsTest.java @@ -0,0 +1,94 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.qpid.server.store.jdbc; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import junit.framework.TestCase; + +public class JDBCDetailsTest extends TestCase +{ + public void testDerby() + { + JDBCDetails derbyDetails = JDBCDetails.getDetailsForJdbcUrl("jdbc:derby:sample", + Collections.<String, String>emptyMap()); + assertEquals("derby", derbyDetails.getVendor()); + assertEquals("varchar(%d) for bit data", derbyDetails.getVarBinaryType()); + assertEquals("bigint", derbyDetails.getBigintType()); + assertEquals("blob", derbyDetails.getBlobType()); + assertFalse(derbyDetails.isUseBytesMethodsForBlob()); + + assertTrue(derbyDetails.isKnownVendor()); + assertFalse(derbyDetails.isOverridden()); + } + + public void testUnknownVendor_UsesFallbackDetails() + { + JDBCDetails details = JDBCDetails.getDetailsForJdbcUrl("jdbc:homedb:", Collections.<String, String>emptyMap()); + assertEquals("fallback", details.getVendor()); + assertEquals("varchar(%d) for bit data", details.getVarBinaryType()); + assertEquals("bigint", details.getBigintType()); + assertEquals("blob", details.getBlobType()); + assertEquals(false, details.isUseBytesMethodsForBlob()); + assertFalse(details.isOverridden()); + assertFalse(details.isKnownVendor()); + } + + public void testDerbyWithOverride() + { + + Map<String, String> contextMap = new HashMap<>(); + contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_VARBINARYTYPE, "myvarbin"); + + JDBCDetails derbyDetails = JDBCDetails.getDetailsForJdbcUrl("jdbc:derby:sample", contextMap); + assertEquals("derby", derbyDetails.getVendor()); + assertEquals("myvarbin", derbyDetails.getVarBinaryType()); + assertEquals("bigint", derbyDetails.getBigintType()); + assertEquals("blob", derbyDetails.getBlobType()); + assertFalse(derbyDetails.isUseBytesMethodsForBlob()); + + assertTrue(derbyDetails.isKnownVendor()); + assertTrue(derbyDetails.isOverridden()); + } + + + + + public void testRecognisedDriver_AllDetailsProvidedByContext() + { + Map<String, String> contextMap = new HashMap<>(); + contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_VARBINARYTYPE, "myvarbin"); + contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_BIGINTTYPE, "mybigint"); + contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_BLOBTYPE, "myblob"); + contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_USEBYTESFORBLOB, "true"); + + JDBCDetails details = JDBCDetails.getDetailsForJdbcUrl("jdbc:sybase:", contextMap); + assertEquals("sybase", details.getVendor()); + assertEquals("myvarbin", details.getVarBinaryType()); + assertEquals("mybigint", details.getBigintType()); + assertEquals("myblob", details.getBlobType()); + assertEquals(true, details.isUseBytesMethodsForBlob()); + assertTrue(details.isKnownVendor()); + assertTrue(details.isOverridden()); + } + +}
\ No newline at end of file |
