summaryrefslogtreecommitdiff
path: root/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java')
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java48
1 files changed, 34 insertions, 14 deletions
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java b/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java
index ab7061c382..fe9f9f4d00 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java
@@ -21,27 +21,47 @@
package org.apache.qpid.client.message;
+import org.apache.qpid.client.AMQDestination;
+import org.apache.qpid.client.AMQQueue;
+import org.apache.qpid.client.AMQSession;
+import org.apache.qpid.client.AMQSession_0_8;
+import org.apache.qpid.client.AMQTopic;
+import org.apache.qpid.client.CustomJMSXProperty;
+import org.apache.qpid.client.JMSAMQException;
+import org.apache.qpid.framing.AMQShortString;
+import org.apache.qpid.framing.BasicContentHeaderProperties;
+import org.apache.qpid.framing.ContentHeaderProperties;
+import org.apache.qpid.url.AMQBindingURL;
+import org.apache.qpid.url.BindingURL;
+
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.MessageNotWriteableException;
import java.net.URISyntaxException;
import java.util.Collections;
import java.util.Enumeration;
+import java.util.LinkedHashMap;
import java.util.Map;
import java.util.UUID;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.MessageNotWriteableException;
-
-import org.apache.qpid.client.*;
-import org.apache.qpid.collections.ReferenceMap;
-import org.apache.qpid.framing.AMQShortString;
-import org.apache.qpid.framing.BasicContentHeaderProperties;
-import org.apache.qpid.framing.ContentHeaderProperties;
-import org.apache.qpid.url.AMQBindingURL;
-import org.apache.qpid.url.BindingURL;
public class AMQMessageDelegate_0_8 extends AbstractAMQMessageDelegate
{
- private static final Map _destinationCache = Collections.synchronizedMap(new ReferenceMap());
+ private static final float DESTINATION_CACHE_LOAD_FACTOR = 0.75f;
+ private static final int DESTINATION_CACHE_SIZE = 500;
+ private static final int DESTINATION_CACHE_CAPACITY = (int) (DESTINATION_CACHE_SIZE / DESTINATION_CACHE_LOAD_FACTOR);
+
+ private static final Map<String, Destination> _destinationCache =
+ Collections.synchronizedMap(new LinkedHashMap<String,Destination>(DESTINATION_CACHE_CAPACITY,
+ DESTINATION_CACHE_LOAD_FACTOR,
+ true)
+ {
+ @Override
+ protected boolean removeEldestEntry(Map.Entry<String, Destination> eldest)
+ {
+ return size() >= DESTINATION_CACHE_SIZE;
+ }
+ });
public static final String JMS_TYPE = "x-jms-type";
@@ -229,7 +249,7 @@ public class AMQMessageDelegate_0_8 extends AbstractAMQMessageDelegate
}
else
{
- Destination dest = (Destination) _destinationCache.get(replyToEncoding);
+ Destination dest = _destinationCache.get(replyToEncoding);
if (dest == null)
{
try
@@ -266,7 +286,7 @@ public class AMQMessageDelegate_0_8 extends AbstractAMQMessageDelegate
final AMQDestination amqd = (AMQDestination) destination;
final AMQShortString encodedDestination = amqd.getEncodedName();
- _destinationCache.put(encodedDestination, destination);
+ _destinationCache.put(encodedDestination.asString(), destination);
getContentHeaderProperties().setReplyTo(encodedDestination);
}