Author: norman Date: Tue Nov 16 17:39:46 2010 New Revision: 1035705 URL: http://svn.apache.org/viewvc?rev=1035705&view=rev Log: Now fix memory leak for real (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=1035705&r1=1035704&r2=1035705&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 Tue Nov 16 17:39:46 2010 @@ -294,15 +294,10 @@ public class ActiveMQMailQueue extends J /** * Try to use ActiveMQ StatisticsPlugin to get size and if that fails fallback to {...@link JMSMailQueue#getSize()} * - * TODO: This needs to get enabled again. At the moment we just fallback to super method because of a MemoryLeak in AMQ. - * See: https://issues.apache.org/activemq/browse/AMQ-3041 * */ @Override public long getSize() throws MailQueueException { - - /** - * Connection connection = null; Session session = null; @@ -315,7 +310,7 @@ public class ActiveMQMailQueue extends J connection = connectionFactory.createConnection(); connection.start(); - session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); + session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); replyTo = session.createTemporaryQueue(); consumer = session.createConsumer(replyTo); @@ -324,13 +319,11 @@ public class ActiveMQMailQueue extends J String queueName = "ActiveMQ.Statistics.Destination." + myQueue.getQueueName(); Queue query = session.createQueue(queueName); - + Message msg = session.createMessage(); - - producer.send(myQueue, msg); msg.setJMSReplyTo(replyTo); producer.send(query, msg); - MapMessage reply = (MapMessage) consumer.receive(); + MapMessage reply = (MapMessage) consumer.receive(2000); if (reply.itemExists("size")) { try { size = reply.getLong("size"); @@ -341,34 +334,20 @@ public class ActiveMQMailQueue extends J } } catch (Exception e) { - try { - session.rollback(); - } catch (JMSException e1) { - // ignore on rollback - } 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 { consumer.close(); } catch (JMSException e1) { + e1.printStackTrace(); // ignore on rollback } } + if (producer != null) { try { @@ -378,6 +357,17 @@ public class ActiveMQMailQueue extends J } } + 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) { + } + } try { if (session != null) session.close(); @@ -394,8 +384,6 @@ public class ActiveMQMailQueue extends J } // if we came to this point we should just fallback to super method - - */ return super.getSize(); } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org