diff options
author | Andrew Donald Kennedy <grkvlt@apache.org> | 2011-02-17 00:50:21 +0000 |
---|---|---|
committer | Andrew Donald Kennedy <grkvlt@apache.org> | 2011-02-17 00:50:21 +0000 |
commit | 6768c7ba59f2d857db4af0bda6de949b73ca90e7 (patch) | |
tree | b8cab3007ed646fc0fb98cb183fa07f0855af763 /java/client | |
parent | 59864976b7bfacbf4a75652a4007b24e5c56b596 (diff) | |
download | qpid-python-6768c7ba59f2d857db4af0bda6de949b73ca90e7.tar.gz |
QPID-3016: Store soft references to ReplyTo destinations
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1071462 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/client')
-rw-r--r-- | java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java b/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java index ed2e96e83b..92e61984d2 100644 --- a/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java +++ b/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java @@ -21,6 +21,7 @@ package org.apache.qpid.client.message; +import java.lang.ref.SoftReference; import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; @@ -38,7 +39,6 @@ import javax.jms.Session; import org.apache.qpid.AMQException; import org.apache.qpid.AMQPInvalidClassException; -import org.apache.qpid.collections.ReferenceMap; import org.apache.qpid.client.AMQDestination; import org.apache.qpid.client.AMQSession; import org.apache.qpid.client.AMQSession_0_10; @@ -61,7 +61,7 @@ import org.apache.qpid.transport.ReplyTo; */ public class AMQMessageDelegate_0_10 extends AbstractAMQMessageDelegate { - private static final Map<ReplyTo, Destination> _destinationCache = Collections.synchronizedMap(new ReferenceMap()); + private static final Map<ReplyTo, SoftReference<Destination>> _destinationCache = Collections.synchronizedMap(new HashMap<ReplyTo, SoftReference<Destination>>()); public static final String JMS_TYPE = "x-jms-type"; @@ -229,22 +229,19 @@ public class AMQMessageDelegate_0_10 extends AbstractAMQMessageDelegate } else { - Destination dest = _destinationCache.get(replyTo); + Destination dest = null; + SoftReference<Destination> ref = _destinationCache.get(replyTo); + if (ref != null) + { + dest = ref.get(); + } if (dest == null) { String exchange = replyTo.getExchange(); String routingKey = replyTo.getRoutingKey(); - dest = generateDestination(exchange == null ? new AMQShortString("") : - new AMQShortString(exchange), - routingKey == null ? new AMQShortString(""): - new AMQShortString(routingKey)); - - - - - - _destinationCache.put(replyTo, dest); + dest = generateDestination(new AMQShortString(exchange), new AMQShortString(routingKey)); + _destinationCache.put(replyTo, new SoftReference<Destination>(dest)); } return dest; @@ -291,7 +288,7 @@ public class AMQMessageDelegate_0_10 extends AbstractAMQMessageDelegate } final ReplyTo replyTo = new ReplyTo(amqd.getExchangeName().toString(), amqd.getRoutingKey().toString()); - _destinationCache.put(replyTo, destination); + _destinationCache.put(replyTo, new SoftReference<Destination>(destination)); _messageProps.setReplyTo(replyTo); } |