summaryrefslogtreecommitdiff
path: root/qpid/java/client/src/main
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2015-02-10 11:58:57 +0000
committerRobert Godfrey <rgodfrey@apache.org>2015-02-10 11:58:57 +0000
commit6bca3754c2b893ae0a27d3c11559f25c9b1e7ea4 (patch)
tree28c674dedb032e32689d91a6c0a0b8171fa4384f /qpid/java/client/src/main
parentda8935e0491a2b8e9edb6671e5874b77516ee2a9 (diff)
downloadqpid-python-6bca3754c2b893ae0a27d3c11559f25c9b1e7ea4.tar.gz
QPID-6374 : Always call exception listener from connection task pool, rather than from within the failover mutex
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1658689 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/client/src/main')
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java15
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java30
2 files changed, 31 insertions, 14 deletions
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
index c7fcde824a..5518435b94 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
@@ -1349,16 +1349,25 @@ public class AMQConnection extends Closeable implements Connection, QueueConnect
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)
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
index 4e9164c3b0..fdeab7ae70 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
@@ -291,7 +291,7 @@ public class AMQConnectionDelegate_0_10 implements AMQConnectionDelegate, Connec
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 implements AMQConnectionDelegate, Connec
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 implements AMQConnectionDelegate, Connec
_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);
}
}