Author: norman
Date: Mon Nov 15 14:22:56 2010
New Revision: 1035288
URL: http://svn.apache.org/viewvc?rev=1035288&view=rev
Log:
Fix memory leak in ActiveMQMailQueue (JAMES-1133)
Modified:
james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
Modified:
james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java?rev=1035288&r1=1035287&r2=1035288&view=diff
==============================================================================
---
james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
(original)
+++
james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
Mon Nov 15 14:22:56 2010
@@ -36,6 +36,7 @@ import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.Session;
+import javax.jms.TemporaryQueue;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.SharedInputStream;
@@ -301,14 +302,15 @@ public class ActiveMQMailQueue extends J
Session session = null;
MessageConsumer consumer = null;
MessageProducer producer = null;
- int size = -1;
+ TemporaryQueue replyTo = null;
+ long size = -1;
try {
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
- Queue replyTo = session.createTemporaryQueue();
+ replyTo = session.createTemporaryQueue();
consumer = session.createConsumer(replyTo);
Queue myQueue = session.createQueue(queuename);;
@@ -325,9 +327,7 @@ public class ActiveMQMailQueue extends J
MapMessage reply = (MapMessage) consumer.receive();
if (reply.itemExists("size")) {
try {
- // Maybe a bug in activemq as reply.getInt(..) did not work
- // need to check activemq source code to understand why ..
- size =
Integer.parseInt(reply.getObject("size").toString());
+ size = reply.getLong("size");
return size;
} catch (NumberFormatException e) {
// if we hit this we can't calculate the size so just
catch it
@@ -343,6 +343,18 @@ public class ActiveMQMailQueue extends J
throw new MailQueueException("Unable to remove mails" , e);
} finally {
+ if (replyTo != null) {
+ try {
+
+ // we need to delete the temporary queue to be sure we will
+ // free up memory if thats not done and a pool is used
+ // its possible that we will register a new mbean in jmx
for
+ // every TemporaryQueue which will never get unregistered
+ replyTo.delete();
+ } catch (JMSException e) {
+ // ignore on close
+ }
+ }
if (consumer != null) {
try {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]