You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2010/03/30 16:48:30 UTC

svn commit: r929158 - in /qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue: MessageHandleFactory.java SoftReferenceMessageHandle.java WeakReferenceMessageHandle.java

Author: robbie
Date: Tue Mar 30 14:48:30 2010
New Revision: 929158

URL: http://svn.apache.org/viewvc?rev=929158&view=rev
Log:
QPID-2466: Replace usages of WeakReference in the MessageHandles with SoftReference so that they are not purged as aggressively by the Garbage Collector.

Applied patch from Andrew Kennedy <an...@gmail.com>

Added:
    qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SoftReferenceMessageHandle.java
      - copied, changed from r929151, qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/WeakReferenceMessageHandle.java
Removed:
    qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/WeakReferenceMessageHandle.java
Modified:
    qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/MessageHandleFactory.java

Modified: qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/MessageHandleFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/MessageHandleFactory.java?rev=929158&r1=929157&r2=929158&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/MessageHandleFactory.java (original)
+++ qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/MessageHandleFactory.java Tue Mar 30 14:48:30 2010
@@ -36,7 +36,7 @@ public class MessageHandleFactory
         // just hardcoded for now
         if (persistent)
         {
-            return new WeakReferenceMessageHandle(messageId, store);
+            return new SoftReferenceMessageHandle(messageId, store);
         }
         else
         {

Copied: qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SoftReferenceMessageHandle.java (from r929151, qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/WeakReferenceMessageHandle.java)
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SoftReferenceMessageHandle.java?p2=qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SoftReferenceMessageHandle.java&p1=qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/WeakReferenceMessageHandle.java&r1=929151&r2=929158&rev=929158&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/WeakReferenceMessageHandle.java (original)
+++ qpid/branches/0.5.x-dev/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SoftReferenceMessageHandle.java Tue Mar 30 14:48:30 2010
@@ -20,7 +20,7 @@
  */
 package org.apache.qpid.server.queue;
 
-import java.lang.ref.WeakReference;
+import java.lang.ref.SoftReference;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
@@ -35,13 +35,13 @@ import org.apache.qpid.server.store.Stor
 /**
  * @author Robert Greig (robert.j.greig@jpmorgan.com)
  */
-public class WeakReferenceMessageHandle implements AMQMessageHandle
+public class SoftReferenceMessageHandle implements AMQMessageHandle
 {
-    private WeakReference<ContentHeaderBody> _contentHeaderBody;
+    private SoftReference<ContentHeaderBody> _contentHeaderBody;
 
-    private WeakReference<MessagePublishInfo> _messagePublishInfo;
+    private SoftReference<MessagePublishInfo> _messagePublishInfo;
 
-    private List<WeakReference<ContentChunk>> _contentBodies;
+    private List<SoftReference<ContentChunk>> _contentBodies;
 
     private boolean _redelivered;
 
@@ -50,7 +50,7 @@ public class WeakReferenceMessageHandle 
     private final Long _messageId;
     private long _arrivalTime;
 
-    public WeakReferenceMessageHandle(final Long messageId, MessageStore messageStore)
+    public SoftReferenceMessageHandle(final Long messageId, MessageStore messageStore)
     {
         _messageId = messageId;
         _messageStore = messageStore;
@@ -83,8 +83,8 @@ public class WeakReferenceMessageHandle 
     private void populateFromMessageMetaData(MessageMetaData mmd)
     {
         _arrivalTime = mmd.getArrivalTime();
-        _contentHeaderBody = new WeakReference<ContentHeaderBody>(mmd.getContentHeaderBody());
-        _messagePublishInfo = new WeakReference<MessagePublishInfo>(mmd.getMessagePublishInfo());
+        _contentHeaderBody = new SoftReference<ContentHeaderBody>(mmd.getContentHeaderBody());
+        _messagePublishInfo = new SoftReference<MessagePublishInfo>(mmd.getMessagePublishInfo());
     }
 
     public int getBodyCount(StoreContext context) throws AMQException
@@ -93,10 +93,10 @@ public class WeakReferenceMessageHandle 
         {
             MessageMetaData mmd = _messageStore.getMessageMetaData(context, _messageId);
             int chunkCount = mmd.getContentChunkCount();
-            _contentBodies = new ArrayList<WeakReference<ContentChunk>>(chunkCount);
+            _contentBodies = new ArrayList<SoftReference<ContentChunk>>(chunkCount);
             for (int i = 0; i < chunkCount; i++)
             {
-                _contentBodies.add(new WeakReference<ContentChunk>(null));
+                _contentBodies.add(new SoftReference<ContentChunk>(null));
             }
         }
         return _contentBodies.size();
@@ -114,12 +114,12 @@ public class WeakReferenceMessageHandle 
             throw new IllegalArgumentException("Index " + index + " out of valid range 0 to " +
                                                (_contentBodies.size() - 1));
         }
-        WeakReference<ContentChunk> wr = _contentBodies.get(index);
+        SoftReference<ContentChunk> wr = _contentBodies.get(index);
         ContentChunk cb = wr.get();
         if (cb == null)
         {
             cb = _messageStore.getContentBodyChunk(context, _messageId, index);
-            _contentBodies.set(index, new WeakReference<ContentChunk>(cb));
+            _contentBodies.set(index, new SoftReference<ContentChunk>(cb));
         }
         return cb;
     }
@@ -136,16 +136,16 @@ public class WeakReferenceMessageHandle 
     {
         if (_contentBodies == null && isLastContentBody)
         {
-            _contentBodies = new ArrayList<WeakReference<ContentChunk>>(1);
+            _contentBodies = new ArrayList<SoftReference<ContentChunk>>(1);
         }
         else
         {
             if (_contentBodies == null)
             {
-                _contentBodies = new LinkedList<WeakReference<ContentChunk>>();
+                _contentBodies = new LinkedList<SoftReference<ContentChunk>>();
             }
         }
-        _contentBodies.add(new WeakReference<ContentChunk>(contentChunk));
+        _contentBodies.add(new SoftReference<ContentChunk>(contentChunk));
         _messageStore.storeContentBodyChunk(storeContext, _messageId, _contentBodies.size() - 1,
                                             contentChunk, isLastContentBody);
     }
@@ -192,7 +192,7 @@ public class WeakReferenceMessageHandle 
         // create en empty list here
         if (contentHeaderBody.bodySize == 0)
         {
-            _contentBodies = new LinkedList<WeakReference<ContentChunk>>();
+            _contentBodies = new LinkedList<SoftReference<ContentChunk>>();
         }
 
         final long arrivalTime = System.currentTimeMillis();



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org