Repository: james-project
Updated Branches:
  refs/heads/master 9aff85c34 -> 52316f64b


JAMES-1890 reuse JMS connection as it's a thread-safe object


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/52316f64
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/52316f64
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/52316f64

Branch: refs/heads/master
Commit: 52316f64b21b6caa49e86d32e3a8b582474ccbd7
Parents: 9aff85c
Author: Matthieu Baechler <[email protected]>
Authored: Fri Dec 16 17:03:21 2016 +0100
Committer: Matthieu Baechler <[email protected]>
Committed: Mon Dec 19 22:03:51 2016 +0100

----------------------------------------------------------------------
 .../james/queue/activemq/ActiveMQMailQueue.java | 11 ---
 .../apache/james/queue/jms/JMSMailQueue.java    | 92 ++++----------------
 .../james/queue/jms/JMSMailQueueItem.java       |  7 --
 3 files changed, 19 insertions(+), 91 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/52316f64/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
 
b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
index d45a89e..8a80ad3 100644
--- 
a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
+++ 
b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
@@ -288,7 +288,6 @@ public class ActiveMQMailQueue extends JMSMailQueue 
implements ActiveMQSupport {
     @Override
     public long getSize() throws MailQueueException {
 
-        Connection connection = null;
         Session session = null;
         MessageConsumer consumer = null;
         MessageProducer producer = null;
@@ -296,9 +295,6 @@ public class ActiveMQMailQueue extends JMSMailQueue 
implements ActiveMQSupport {
         long size;
 
         try {
-            connection = connectionFactory.createConnection();
-            connection.start();
-
             session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
             replyTo = session.createTemporaryQueue();
             consumer = session.createConsumer(replyTo);
@@ -364,13 +360,6 @@ public class ActiveMQMailQueue extends JMSMailQueue 
implements ActiveMQSupport {
             } catch (JMSException e1) {
                 // ignore here
             }
-
-            try {
-                if (connection != null)
-                    connection.close();
-            } catch (JMSException e1) {
-                // ignore here
-            }
         }
 
         // if we came to this point we should just fallback to super method

http://git-wip-us.apache.org/repos/asf/james-project/blob/52316f64/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
 
b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
index f3ce680..a14b362 100644
--- 
a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
+++ 
b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
@@ -49,6 +49,7 @@ import javax.mail.internet.MimeMessage;
 
 import org.apache.james.core.MailImpl;
 import org.apache.james.core.MimeMessageCopyOnWriteProxy;
+import org.apache.james.lifecycle.api.Disposable;
 import org.apache.james.metrics.api.Metric;
 import org.apache.james.queue.api.MailPrioritySupport;
 import org.apache.james.queue.api.MailQueue;
@@ -58,6 +59,8 @@ import org.apache.mailet.Mail;
 import org.apache.mailet.MailAddress;
 import org.slf4j.Logger;
 
+import com.google.common.base.Throwables;
+
 /**
  * <p>
  * {@link MailQueue} implementation which use a JMS Queue for the<br>
@@ -69,17 +72,22 @@ import org.slf4j.Logger;
  * {@link Mail} objects.
  * </p>
  */
-public class JMSMailQueue implements ManageableMailQueue, JMSSupport, 
MailPrioritySupport {
+public class JMSMailQueue implements ManageableMailQueue, JMSSupport, 
MailPrioritySupport, Disposable {
 
     protected final String queueName;
-    protected final ConnectionFactory connectionFactory;
+    protected final Connection connection;
     protected final MailQueueItemDecoratorFactory 
mailQueueItemDecoratorFactory;
     protected final Metric enqueuedMailsMetric;
     protected final Logger logger;
     public final static String FORCE_DELIVERY = "FORCE_DELIVERY";
 
     public JMSMailQueue(ConnectionFactory connectionFactory, 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queueName, 
Metric enqueuedMailsMetric, Logger logger) {
-        this.connectionFactory = connectionFactory;
+        try {
+            connection = connectionFactory.createConnection();
+            connection.start();
+        } catch (JMSException e) {
+            throw Throwables.propagate(e);
+        }
         this.mailQueueItemDecoratorFactory = mailQueueItemDecoratorFactory;
         this.queueName = queueName;
         this.enqueuedMailsMetric = enqueuedMailsMetric;
@@ -100,16 +108,12 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
      */
     @Override
     public MailQueueItem deQueue() throws MailQueueException {
-        Connection connection = null;
         Session session = null;
         Message message;
         MessageConsumer consumer = null;
 
         while (true) {
             try {
-                connection = connectionFactory.createConnection();
-                connection.start();
-
                 session = connection.createSession(true, 
Session.SESSION_TRANSACTED);
                 Queue queue = session.createQueue(queueName);
                 consumer = session.createConsumer(queue, getMessageSelector());
@@ -135,13 +139,6 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
                     } catch (JMSException e1) {
                         // ignore here
                     }
-
-                    try {
-                        if (connection != null)
-                            connection.close();
-                    } catch (JMSException e1) {
-                        // ignore here
-                    }
                 }
 
             } catch (Exception e) {
@@ -168,12 +165,6 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
                     // ignore here
                 }
 
-                try {
-                    if (connection != null)
-                        connection.close();
-                } catch (JMSException e1) {
-                    // ignore here
-                }
                 throw new MailQueueException("Unable to dequeue next message", 
e);
             }
         }
@@ -182,7 +173,6 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
 
     @Override
     public void enQueue(Mail mail, long delay, TimeUnit unit) throws 
MailQueueException {
-        Connection connection = null;
         Session session = null;
 
         long mydelay = 0;
@@ -193,8 +183,6 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
 
         try {
 
-            connection = connectionFactory.createConnection();
-            connection.start();
             session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
 
             int msgPrio = NORMAL_PRIORITY;
@@ -226,12 +214,6 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
                 // ignore here
             }
 
-            try {
-                if (connection != null)
-                    connection.close();
-            } catch (JMSException e) {
-                // ignore here
-            }
         }
     }
 
@@ -491,13 +473,10 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
     @SuppressWarnings("unchecked")
     @Override
     public long getSize() throws MailQueueException {
-        Connection connection = null;
         Session session = null;
         QueueBrowser browser = null;
         int size = 0;
         try {
-            connection = connectionFactory.createConnection();
-            connection.start();
             session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
             Queue queue = session.createQueue(queueName);
 
@@ -528,18 +507,11 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
                 // ignore here
             }
 
-            try {
-                if (connection != null)
-                    connection.close();
-            } catch (JMSException e1) {
-                // ignore here
-            }
         }
     }
 
     @Override
     public long flush() throws MailQueueException {
-        Connection connection = null;
         Session session = null;
         Message message = null;
         MessageConsumer consumer = null;
@@ -547,8 +519,6 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
         boolean first = true;
         long count = 0;
         try {
-            connection = connectionFactory.createConnection();
-            connection.start();
 
             session = connection.createSession(true, 
Session.SESSION_TRANSACTED);
             Queue queue = session.createQueue(queueName);
@@ -606,12 +576,6 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
                 // ignore here
             }
 
-            try {
-                if (connection != null)
-                    connection.close();
-            } catch (JMSException e1) {
-                // ignore here
-            }
         }
     }
 
@@ -635,7 +599,6 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
      * @return messages
      */
     public List<Message> removeWithSelector(String selector) throws 
MailQueueException {
-        Connection connection = null;
         Session session = null;
         Message message = null;
         MessageConsumer consumer = null;
@@ -643,9 +606,6 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
         List<Message> messages = new ArrayList<Message>();
 
         try {
-            connection = connectionFactory.createConnection();
-            connection.start();
-
             session = connection.createSession(true, 
Session.SESSION_TRANSACTED);
             Queue queue = session.createQueue(queueName);
             consumer = session.createConsumer(queue, selector);
@@ -688,12 +648,6 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
                 // ignore here
             }
 
-            try {
-                if (connection != null)
-                    connection.close();
-            } catch (JMSException e1) {
-                // ignore here
-            }
         }
     }
 
@@ -738,12 +692,9 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
     @Override
     @SuppressWarnings("unchecked")
     public MailQueueIterator browse() throws MailQueueException {
-        Connection connection = null;
         Session session = null;
         QueueBrowser browser = null;
         try {
-            connection = connectionFactory.createConnection();
-            connection.start();
             session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
             Queue queue = session.createQueue(queueName);
 
@@ -751,7 +702,6 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
 
             final Enumeration<Message> messages = browser.getEnumeration();
 
-            final Connection myConnection = connection;
             final Session mySession = session;
             final QueueBrowser myBrowser = browser;
 
@@ -813,12 +763,6 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
                         // ignore here
                     }
 
-                    try {
-                        if (myConnection != null)
-                            myConnection.close();
-                    } catch (JMSException e1) {
-                        // ignore here
-                    }
                 }
             };
 
@@ -838,15 +782,17 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
                 // ignore here
             }
 
-            try {
-                if (connection != null)
-                    connection.close();
-            } catch (JMSException e1) {
-                // ignore here
-            }
             logger.error("Unable to browse queue " + queueName, e);
             throw new MailQueueException("Unable to browse queue " + 
queueName, e);
         }
     }
 
+    @Override
+    public void dispose() {
+        try {
+            connection.close();
+        } catch (JMSException e) {
+        }
+    }
+    
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/52316f64/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueItem.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueItem.java
 
b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueItem.java
index 98d084a..dd13591 100644
--- 
a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueItem.java
+++ 
b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueItem.java
@@ -74,13 +74,6 @@ public class JMSMailQueueItem implements MailQueueItem {
             } catch (JMSException e) {
                 // ignore here
             }
-
-            try {
-                if (connection != null)
-                    connection.close();
-            } catch (JMSException e) {
-                // ignore here
-            }
         }
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to