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

Reply via email to