summaryrefslogtreecommitdiff
path: root/qpid/java
diff options
context:
space:
mode:
authorAndrew MacBean <macbean@apache.org>2014-06-26 13:59:36 +0000
committerAndrew MacBean <macbean@apache.org>2014-06-26 13:59:36 +0000
commitebf13e02e7371a262d96a96a40ff34bbe9f47816 (patch)
tree8357c77b840137dbd6bc89f0151cdd469c06b9cc /qpid/java
parentcb2ad01319b3b812fb1438c2363ba0485b3d1c4f (diff)
downloadqpid-python-ebf13e02e7371a262d96a96a40ff34bbe9f47816.tar.gz
QPID-5821: [Java Broker] Make JDBC username and password separate attributes within the model
Work done by Keith Wall <kwall@apache.org> and me. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1605787 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/JDBCConnectionProviderFactory.java23
-rw-r--r--qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProvider.java27
-rw-r--r--qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/org/apache/qpid/server/store/jdbc/bonecp/BoneCPConnectionProviderFactory.java25
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProvider.java15
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java16
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java29
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java30
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCSettings.java4
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHost.java7
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostImpl.java27
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java7
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java26
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCMessageStoreTest.java2
13 files changed, 187 insertions, 51 deletions
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 f2ab47bfbb..14acd59928 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
@@ -26,6 +26,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.store.jdbc.ConnectionProvider;
@@ -34,28 +35,10 @@ public interface JDBCConnectionProviderFactory extends Pluggable
{
String getType();
- ConnectionProvider getConnectionProvider(ConfiguredObject<?> parent, String connectionUrl)
+ ConnectionProvider getConnectionProvider(String connectionUrl, String username, String password, Map<String, String> providerAttributes)
throws SQLException;
- static final class TYPES
- {
- private TYPES()
- {
- }
-
- public static Collection<String> get()
- {
- QpidServiceLoader<JDBCConnectionProviderFactory> qpidServiceLoader = new QpidServiceLoader<JDBCConnectionProviderFactory>();
- Iterable<JDBCConnectionProviderFactory> factories = qpidServiceLoader.atLeastOneInstanceOf(JDBCConnectionProviderFactory.class);
- List<String> names = new ArrayList<String>();
- for(JDBCConnectionProviderFactory factory : factories)
- {
- names.add(factory.getType());
- }
- return Collections.unmodifiableCollection(names);
- }
- }
-
+ Set<String> getProviderAttributeNames();
static final class FACTORIES
{
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 75efababc0..2687a32bf9 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
@@ -20,9 +20,12 @@
*/
package org.apache.qpid.server.store.jdbc.bonecp;
+import static org.apache.qpid.server.store.jdbc.bonecp.BoneCPConnectionProviderFactory.MAX_CONNECTIONS_PER_PARTITION;
+import static org.apache.qpid.server.store.jdbc.bonecp.BoneCPConnectionProviderFactory.MIN_CONNECTIONS_PER_PARTITION;
+import static org.apache.qpid.server.store.jdbc.bonecp.BoneCPConnectionProviderFactory.PARTITION_COUNT;
+
import com.jolbox.bonecp.BoneCP;
import com.jolbox.bonecp.BoneCPConfig;
-import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.store.jdbc.ConnectionProvider;
import java.sql.Connection;
@@ -31,32 +34,30 @@ import java.util.Map;
public class BoneCPConnectionProvider implements ConnectionProvider
{
- 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;
public static final int DEFAULT_PARTITION_COUNT = 4;
private final BoneCP _connectionPool;
- public BoneCPConnectionProvider(String connectionUrl, ConfiguredObject<?> storeSettings) throws SQLException
+ public BoneCPConnectionProvider(String connectionUrl, String username, String password, Map<String, String> providerAttributes) throws SQLException
{
- // TODO change interface to pass through username and password
BoneCPConfig config = new BoneCPConfig();
config.setJdbcUrl(connectionUrl);
- Map<String, String> context = storeSettings.getContext();
+ if (username != null)
+ {
+ config.setUsername(username);
+ config.setPassword(password);
+ }
- config.setMinConnectionsPerPartition(getContextValueAsInt(MIN_CONNECTIONS_PER_PARTITION, context, DEFAULT_MIN_CONNECTIONS_PER_PARTITION));
- config.setMaxConnectionsPerPartition(getContextValueAsInt(MAX_CONNECTIONS_PER_PARTITION, context, DEFAULT_MAX_CONNECTIONS_PER_PARTITION));
- config.setPartitionCount(getContextValueAsInt(PARTITION_COUNT, context, DEFAULT_PARTITION_COUNT));
+ config.setMinConnectionsPerPartition(convertToIntWithDefault(MIN_CONNECTIONS_PER_PARTITION, providerAttributes, DEFAULT_MIN_CONNECTIONS_PER_PARTITION));
+ config.setMaxConnectionsPerPartition(convertToIntWithDefault(MAX_CONNECTIONS_PER_PARTITION, providerAttributes, DEFAULT_MAX_CONNECTIONS_PER_PARTITION));
+ config.setPartitionCount(convertToIntWithDefault(PARTITION_COUNT, providerAttributes, DEFAULT_PARTITION_COUNT));
_connectionPool = new BoneCP(config);
}
- private int getContextValueAsInt(String key, Map<String, String> context, int defaultValue)
+ private int convertToIntWithDefault(String key, Map<String, String> context, int defaultValue)
{
if (context.containsKey(key))
{
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 e7dc8bd16c..f894a6a27a 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
@@ -20,25 +20,42 @@
*/
package org.apache.qpid.server.store.jdbc.bonecp;
-import java.sql.SQLException;
+import static java.util.Arrays.asList;
+import static java.util.Collections.unmodifiableSet;
-import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.plugin.JDBCConnectionProviderFactory;
import org.apache.qpid.server.plugin.PluggableService;
import org.apache.qpid.server.store.jdbc.ConnectionProvider;
+import java.sql.SQLException;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
@PluggableService
public class BoneCPConnectionProviderFactory implements JDBCConnectionProviderFactory
{
+ 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";
+
+ private final Set<String> _supportedAttributes = unmodifiableSet(new HashSet<String>(asList(PARTITION_COUNT, MAX_CONNECTIONS_PER_PARTITION, MIN_CONNECTIONS_PER_PARTITION)));
+
@Override
public String getType()
{
return "BONECP";
}
- public ConnectionProvider getConnectionProvider(ConfiguredObject<?> parent, String connectionUrl)
+ public ConnectionProvider getConnectionProvider(String connectionUrl, String username, String password, Map<String, String> providerAttributes)
throws SQLException
{
- return new BoneCPConnectionProvider(connectionUrl, parent);
+ return new BoneCPConnectionProvider(connectionUrl, username, password, providerAttributes);
+ }
+
+ @Override
+ public Set<String> getProviderAttributeNames()
+ {
+ return _supportedAttributes;
}
}
diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProvider.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProvider.java
index 7945ae3b46..a96d46af18 100644
--- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProvider.java
+++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProvider.java
@@ -27,16 +27,27 @@ import java.sql.SQLException;
class DefaultConnectionProvider implements ConnectionProvider
{
private final String _connectionUrl;
+ private final String _username;
+ private final String _password;
- public DefaultConnectionProvider(String connectionUrl)
+ public DefaultConnectionProvider(String connectionUrl, String username, String password)
{
_connectionUrl = connectionUrl;
+ _username = username;
+ _password = password;
}
@Override
public Connection getConnection() throws SQLException
{
- return DriverManager.getConnection(_connectionUrl);
+ if (_username == null)
+ {
+ return DriverManager.getConnection(_connectionUrl);
+ }
+ else
+ {
+ return DriverManager.getConnection(_connectionUrl, _username, _password);
+ }
}
@Override
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 2d8eec2021..9e10c54f7e 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,14 +20,16 @@
*/
package org.apache.qpid.server.store.jdbc;
-import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.plugin.JDBCConnectionProviderFactory;
import org.apache.qpid.server.plugin.PluggableService;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
@PluggableService
public class DefaultConnectionProviderFactory implements JDBCConnectionProviderFactory
{
-
public static final String TYPE = "DEFAULT";
@Override
@@ -37,9 +39,15 @@ public class DefaultConnectionProviderFactory implements JDBCConnectionProviderF
}
@Override
- public ConnectionProvider getConnectionProvider(ConfiguredObject<?> parent, String connectionUrl)
+ public ConnectionProvider getConnectionProvider(String connectionUrl, String username, String password, Map<String, String> providerAttributes)
+ {
+ return new DefaultConnectionProvider(connectionUrl, username, password);
+ }
+
+ @Override
+ public Set<String> getProviderAttributeNames()
{
- return new DefaultConnectionProvider(connectionUrl);
+ return Collections.emptySet();
}
}
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 479ebd953b..ed25d97af0 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
@@ -20,18 +20,24 @@ package org.apache.qpid.server.store.jdbc;
import java.nio.charset.Charset;
+import java.security.PrivilegedAction;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.log4j.Logger;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.plugin.JDBCConnectionProviderFactory;
+import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.store.*;
+import javax.security.auth.Subject;
+
/**
* Implementation of a DurableConfigurationStore backed by Generic JDBC Database
* that also provides a MessageStore.
@@ -93,11 +99,18 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor
try
{
- _connectionProvider = connectionProviderFactory.getConnectionProvider(parent, _connectionURL);
+ Map<String, String> providerAttributes = new HashMap(_parent.getContext());
+ providerAttributes.keySet().retainAll(connectionProviderFactory.getProviderAttributeNames());
+
+ _connectionProvider = connectionProviderFactory.getConnectionProvider(_connectionURL,
+ settings.getUsername(),
+ getPlainTextPassword(settings),
+ providerAttributes);
}
catch (SQLException e)
{
- throw new StoreException("Failed to create connection provider for " + _connectionURL);
+ throw new StoreException("Failed to create connection provider for connectionUrl: " + _connectionURL +
+ " and username: " + settings.getUsername());
}
_blobType = details.getBlobType();
_varBinaryType = details.getVarBinaryType();
@@ -212,6 +225,18 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor
return _providedMessageStore;
}
+ protected String getPlainTextPassword(final JDBCSettings settings)
+ {
+ return Subject.doAs(SecurityManager.getSubjectWithAddedSystemRights(), new PrivilegedAction<String>()
+ {
+ @Override
+ public String run()
+ {
+ return settings.getPassword();
+ }
+ });
+ }
+
private class ProvidedMessageStore extends GenericAbstractJDBCMessageStore
{
@Override
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 aa8964f84f..4fde0a44c7 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
@@ -21,17 +21,23 @@
package org.apache.qpid.server.store.jdbc;
+import java.security.PrivilegedAction;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
import org.apache.log4j.Logger;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.plugin.JDBCConnectionProviderFactory;
+import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.store.StoreException;
+import javax.security.auth.Subject;
+
/**
* Implementation of a MessageStore backed by a Generic JDBC Database.
*/
@@ -84,12 +90,19 @@ public class GenericJDBCMessageStore extends GenericAbstractJDBCMessageStore
try
{
- // TODO: Pass parent to the connenction provider?
- _connectionProvider = connectionProviderFactory.getConnectionProvider(parent, _connectionURL);
+ Map<String, String> providerAttributes = new HashMap(parent.getContext());
+ providerAttributes.keySet().retainAll(connectionProviderFactory.getProviderAttributeNames());
+
+
+ _connectionProvider = connectionProviderFactory.getConnectionProvider(_connectionURL,
+ settings.getUsername(),
+ getPlainTextPassword(settings),
+ providerAttributes);
}
catch (SQLException e)
{
- throw new StoreException("Failed to create connection provider for " + _connectionURL);
+ throw new StoreException("Failed to create connection provider for connectionUrl: " + _connectionURL +
+ " and username: " + settings.getUsername());
}
}
@@ -158,4 +171,15 @@ public class GenericJDBCMessageStore extends GenericAbstractJDBCMessageStore
return _connectionURL;
}
+ protected String getPlainTextPassword(final JDBCSettings settings)
+ {
+ return Subject.doAs(SecurityManager.getSubjectWithAddedSystemRights(), new PrivilegedAction<String>()
+ {
+ @Override
+ public String run()
+ {
+ return settings.getPassword();
+ }
+ });
+ }
}
diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCSettings.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCSettings.java
index 3f3b53eb06..d784ece0e4 100644
--- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCSettings.java
+++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCSettings.java
@@ -26,4 +26,8 @@ public interface JDBCSettings extends Settings
String getConnectionUrl();
String getConnectionPoolType();
+
+ String getUsername();
+
+ String getPassword();
}
diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHost.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHost.java
index 9f794ac707..8608848d98 100644
--- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHost.java
+++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHost.java
@@ -32,7 +32,12 @@ public interface JDBCVirtualHost<X extends JDBCVirtualHost<X>> extends VirtualHo
@ManagedAttribute(mandatory=true)
String getConnectionUrl();
- @ManagedAttribute(defaultValue= DefaultConnectionProviderFactory.TYPE)
+ @ManagedAttribute(defaultValue=DefaultConnectionProviderFactory.TYPE)
String getConnectionPoolType();
+ @ManagedAttribute
+ String getUsername();
+
+ @ManagedAttribute(secure=true)
+ String getPassword();
}
diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostImpl.java b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostImpl.java
index f4e597c6a1..434e887596 100644
--- a/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostImpl.java
+++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHostImpl.java
@@ -41,6 +41,12 @@ public class JDBCVirtualHostImpl extends AbstractVirtualHost<JDBCVirtualHostImpl
@ManagedAttributeField
private String _connectionPoolType;
+ @ManagedAttributeField
+ private String _username;
+
+ @ManagedAttributeField
+ private String _password;
+
@ManagedObjectFactoryConstructor
public JDBCVirtualHostImpl(final Map<String, Object> attributes,
final VirtualHostNode<?> virtualHostNode)
@@ -65,4 +71,25 @@ public class JDBCVirtualHostImpl extends AbstractVirtualHost<JDBCVirtualHostImpl
{
return _connectionPoolType;
}
+
+ @Override
+ public String getUsername()
+ {
+ return _username;
+ }
+
+ @Override
+ public String getPassword()
+ {
+ return _password;
+ }
+
+ @Override
+ public String toString()
+ {
+ return getClass().getSimpleName() + " [id=" + getId() + ", name=" + getName() +
+ ", connectionUrl=" + getConnectionUrl() +
+ ", connectionPoolType=" + getConnectionPoolType() +
+ ", username=" + getUsername() + "]";
+ }
}
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 a649dc1048..0ac75b3877 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
@@ -27,12 +27,15 @@ import org.apache.qpid.server.store.jdbc.JDBCSettings;
public interface JDBCVirtualHostNode<X extends JDBCVirtualHostNode<X>> extends VirtualHostNode<X>, JDBCSettings
{
- //TODO: Split this attribute into connectionUrl, username and password. Make the password attribute secure.
@ManagedAttribute(mandatory=true)
String getConnectionUrl();
@ManagedAttribute(defaultValue=DefaultConnectionProviderFactory.TYPE)
String getConnectionPoolType();
- //add username and passwd managed attrs
+ @ManagedAttribute
+ String getUsername();
+
+ @ManagedAttribute(secure=true)
+ String getPassword();
}
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 0c51d397bf..01acb9e0b5 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,6 +41,12 @@ public class JDBCVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<JDB
@ManagedAttributeField
private String _connectionPoolType;
+ @ManagedAttributeField
+ private String _username;
+
+ @ManagedAttributeField
+ private String _password;
+
@ManagedObjectFactoryConstructor
public JDBCVirtualHostNodeImpl(Map<String, Object> attributes, Broker<?> parent)
{
@@ -70,4 +76,24 @@ public class JDBCVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<JDB
return _connectionPoolType;
}
+ @Override
+ public String getUsername()
+ {
+ return _username;
+ }
+
+ @Override
+ public String getPassword()
+ {
+ return _password;
+ }
+
+ @Override
+ public String toString()
+ {
+ return getClass().getSimpleName() + " [id=" + getId() + ", name=" + getName() +
+ ", connectionUrl=" + getConnectionUrl() +
+ ", connectionPoolType=" + getConnectionPoolType() +
+ ", username=" + getUsername() + "]";
+ }
}
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 3f48a8fc5a..207c5a8325 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
@@ -70,6 +70,8 @@ public class JDBCMessageStoreTest extends MessageStoreTestCase
final JDBCVirtualHost jdbcVirtualHost = mock(JDBCVirtualHost.class);
when(jdbcVirtualHost.getConnectionUrl()).thenReturn(_connectionURL);
+ when(jdbcVirtualHost.getUsername()).thenReturn("test");
+ when(jdbcVirtualHost.getPassword()).thenReturn("pass");
return jdbcVirtualHost;
}