diff options
| author | Robert Godfrey <rgodfrey@apache.org> | 2014-07-28 10:41:14 +0000 |
|---|---|---|
| committer | Robert Godfrey <rgodfrey@apache.org> | 2014-07-28 10:41:14 +0000 |
| commit | b877fef68695499fc63c1d0aef19cd1415981052 (patch) | |
| tree | d3cf766e3c9641c3cc0e1841d95e9686b2ce81ed /qpid/java/broker-plugins/jdbc-store | |
| parent | b71bbd227dfacaedaba411e908853b05e8fbd243 (diff) | |
| download | qpid-python-b877fef68695499fc63c1d0aef19cd1415981052.tar.gz | |
QPID-5930 : [Java Broker] Minimize memory footprint for persistent messages
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1613950 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-plugins/jdbc-store')
3 files changed, 95 insertions, 10 deletions
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 4f88e011fb..9453c135e9 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 @@ -27,6 +27,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; import javax.security.auth.Subject; @@ -84,7 +85,7 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor JDBCSettings settings = (JDBCSettings)parent; _connectionURL = settings.getConnectionUrl(); - JDBCDetails details = JDBCDetails.getDetailsForJdbcUrl(_connectionURL, parent.getContext()); + JDBCDetails details = JDBCDetails.getDetailsForJdbcUrl(_connectionURL, parent); if (!details.isKnownVendor() && getLogger().isInfoEnabled()) { @@ -111,8 +112,13 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor try { - Map<String, String> providerAttributes = new HashMap(_parent.getContext()); - providerAttributes.keySet().retainAll(connectionProviderFactory.getProviderAttributeNames()); + Map<String, String> providerAttributes = new HashMap<>(); + Set<String> providerAttributeNames = connectionProviderFactory.getProviderAttributeNames(); + providerAttributeNames.retainAll(parent.getContextKeys()); + for(String attr : providerAttributeNames) + { + providerAttributes.put(attr, parent.getContextValue(String.class, attr)); + } _connectionProvider = connectionProviderFactory.getConnectionProvider(_connectionURL, settings.getUsername(), 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 4fde0a44c7..3304d01d86 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 @@ -28,6 +28,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; +import java.util.Set; + +import javax.security.auth.Subject; import org.apache.log4j.Logger; @@ -36,8 +39,6 @@ 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. */ @@ -60,7 +61,7 @@ public class GenericJDBCMessageStore extends GenericAbstractJDBCMessageStore JDBCSettings settings = (JDBCSettings)parent; _connectionURL = settings.getConnectionUrl(); - JDBCDetails details = JDBCDetails.getDetailsForJdbcUrl(_connectionURL, parent.getContext()); + JDBCDetails details = JDBCDetails.getDetailsForJdbcUrl(_connectionURL, parent); if (!details.isKnownVendor() && getLogger().isInfoEnabled()) { @@ -90,9 +91,13 @@ public class GenericJDBCMessageStore extends GenericAbstractJDBCMessageStore try { - Map<String, String> providerAttributes = new HashMap(parent.getContext()); - providerAttributes.keySet().retainAll(connectionProviderFactory.getProviderAttributeNames()); - + Map<String, String> providerAttributes = new HashMap<>(); + Set<String> providerAttributeNames = connectionProviderFactory.getProviderAttributeNames(); + providerAttributeNames.retainAll(parent.getContextKeys()); + for(String attr : providerAttributeNames) + { + providerAttributes.put(attr, parent.getContextValue(String.class, attr)); + } _connectionProvider = connectionProviderFactory.getConnectionProvider(_connectionURL, settings.getUsername(), 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 a74f852dfa..8cd4996033 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,9 +19,15 @@ package org.apache.qpid.server.store.jdbc; +import java.util.AbstractMap; +import java.util.AbstractSet; import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; +import java.util.Set; + +import org.apache.qpid.server.model.ConfiguredObject; public abstract class JDBCDetails { @@ -216,7 +222,75 @@ public abstract class JDBCDetails return result; } - + public static JDBCDetails getDetailsForJdbcUrl(String jdbcUrl, final ConfiguredObject<?> object) + { + final Set<String> contextKeys = object.getContextKeys(); + Map<String,String> mapConversion = new AbstractMap<String, String>() + { + @Override + public Set<Entry<String, String>> entrySet() + { + return new AbstractSet<Entry<String, String>>() + { + @Override + public Iterator<Entry<String, String>> iterator() + { + final Iterator<String> underlying = contextKeys.iterator(); + return new Iterator<Entry<String, String>>() + { + @Override + public boolean hasNext() + { + return underlying.hasNext(); + } + + @Override + public Entry<String, String> next() + { + final String key = underlying.next(); + final String value = object.getContextValue(String.class, key); + return new Entry<String,String>() + { + + @Override + public String getKey() + { + return key; + } + + @Override + public String getValue() + { + return value; + } + + @Override + public String setValue(final String value) + { + throw new UnsupportedOperationException(); + } + }; + + } + + @Override + public void remove() + { + throw new UnsupportedOperationException(); + } + }; + } + + @Override + public int size() + { + return contextKeys.size(); + } + }; + } + }; + return getDetailsForJdbcUrl(jdbcUrl, mapConversion); + } public static JDBCDetails getDetailsForJdbcUrl(String jdbcUrl, final Map<String, String> contextMap) { String[] components = jdbcUrl.split(":", 3); |
