You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2015/02/10 12:58:58 UTC

svn commit: r1658689 - in /qpid/trunk/qpid/java/client/src: main/java/org/apache/qpid/client/AMQConnection.java main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java test/java/org/apache/qpid/client/MockAMQConnection.java

Author: rgodfrey
Date: Tue Feb 10 11:58:57 2015
New Revision: 1658689

URL: http://svn.apache.org/r1658689
Log:
QPID-6374 : Always call exception listener from connection task pool, rather than from within the failover mutex

Modified:
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
    qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
    qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/MockAMQConnection.java

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java?rev=1658689&r1=1658688&r2=1658689&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java Tue Feb 10 11:58:57 2015
@@ -1349,16 +1349,25 @@ public class AMQConnection extends Close
 
     private void deliverJMSExceptionToExceptionListenerOrLog(final JMSException je, final Throwable cause)
     {
-        // deliver the exception if there is a listener
-        ExceptionListener exceptionListener = getExceptionListenerNoCheck();
+        final ExceptionListener exceptionListener = getExceptionListenerNoCheck();
         if (exceptionListener != null)
         {
-            exceptionListener.onException(je);
+            performConnectionTask(new Runnable()
+                                    {
+                                        @Override
+                                        public void run()
+                                        {
+                                            // deliver the exception if there is a listener
+                                                exceptionListener.onException(je);
+                                        }
+                                    });
         }
         else
         {
             _logger.error("Throwable Received but no listener set: " + cause);
         }
+
+
     }
 
     private boolean hardError(Throwable cause)

Modified: qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java?rev=1658689&r1=1658688&r2=1658689&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java (original)
+++ qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java Tue Feb 10 11:58:57 2015
@@ -291,7 +291,7 @@ public class AMQConnectionDelegate_0_10
 
     public void closed(Connection conn)
     {
-        ConnectionException exc = exception;
+        final ConnectionException exc = exception;
         exception = null;
 
         if (exc == null)
@@ -299,7 +299,7 @@ public class AMQConnectionDelegate_0_10
             return;
         }
 
-        ConnectionClose close = exc.getClose();
+        final ConnectionClose close = exc.getClose();
         if (close == null || close.getReplyCode() == ConnectionCloseCode.CONNECTION_FORCED)
         {
             _conn.getProtocolHandler().setFailoverLatch(new CountDownLatch(1));
@@ -332,23 +332,31 @@ public class AMQConnectionDelegate_0_10
 
         _conn.setClosed();
 
-        ExceptionListener listener = _conn.getExceptionListenerNoCheck();
+        final ExceptionListener listener = _conn.getExceptionListenerNoCheck();
         if (listener == null)
         {
             _logger.error("connection exception: " + conn, exc);
         }
         else
         {
-            String code = null;
-            if (close != null)
+            _conn.performConnectionTask(new Runnable()
             {
-                code = close.getReplyCode().toString();
-            }
+                @Override
+                public void run()
+                {
+                    String code = null;
+                    if (close != null)
+                    {
+                        code = close.getReplyCode().toString();
+                    }
+
+                    JMSException ex = new JMSException(exc.getMessage(), code);
+                    ex.setLinkedException(exc);
+                    ex.initCause(exc);
+                    listener.onException(ex);
+                }
+            });
 
-            JMSException ex = new JMSException(exc.getMessage(), code);
-            ex.setLinkedException(exc);
-            ex.initCause(exc);
-            listener.onException(ex);
         }
     }
 

Modified: qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/MockAMQConnection.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/MockAMQConnection.java?rev=1658689&r1=1658688&r2=1658689&view=diff
==============================================================================
--- qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/MockAMQConnection.java (original)
+++ qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/MockAMQConnection.java Tue Feb 10 11:58:57 2015
@@ -20,14 +20,14 @@
  */
 package org.apache.qpid.client;
 
+import java.io.IOException;
+
 import org.apache.qpid.AMQException;
 import org.apache.qpid.client.state.AMQState;
 import org.apache.qpid.framing.ProtocolVersion;
 import org.apache.qpid.jms.BrokerDetails;
 import org.apache.qpid.url.URLSyntaxException;
 
-import java.io.IOException;
-
 public class MockAMQConnection extends AMQConnection
 {
     public MockAMQConnection(String broker, String username, String password, String clientName, String virtualHost)
@@ -60,4 +60,10 @@ public class MockAMQConnection extends A
     {
         return super.getDelegate();
     }
+
+    @Override
+    public void performConnectionTask(final Runnable task)
+    {
+        task.run();
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org