diff options
author | Rafael H. Schloming <rhs@apache.org> | 2008-10-10 19:09:00 +0000 |
---|---|---|
committer | Rafael H. Schloming <rhs@apache.org> | 2008-10-10 19:09:00 +0000 |
commit | 74e4bdcd985592b1bc786151ce16467dfdc7e471 (patch) | |
tree | d5a9b9dc8626dd1137b996dd750a5149b86d7bc8 | |
parent | 4ec0b24d362c0a8fe8f32a822f9138569e579673 (diff) | |
download | qpid-python-74e4bdcd985592b1bc786151ce16467dfdc7e471.tar.gz |
QPID-1344: modified Connection to preserve the originating stack traces when throwing exceptions
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@703559 13f79535-47bb-0310-9956-ffa450edef68
6 files changed, 49 insertions, 30 deletions
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java index fd55da969a..2c927e21fd 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java @@ -75,7 +75,7 @@ public class Connection private Object lock = new Object(); private long timeout = 60000; private ConnectionListener listener = new DefaultConnectionListener(); - private Throwable error = null; + private ConnectionException error = null; private int channelMax = 1; private String locale; @@ -172,18 +172,10 @@ public class Connection if (error != null) { - Throwable t = error; + ConnectionException t = error; error = null; close(); - - if (t instanceof ProtocolVersionException) - { - throw (ProtocolVersionException) t; - } - else - { - throw new ConnectionException(t); - } + t.rethrow(); } switch (state) @@ -325,20 +317,7 @@ public class Connection public void exception(Throwable t) { - synchronized (lock) - { - switch (state) - { - case OPENING: - case CLOSING: - error = t; - lock.notifyAll(); - break; - default: - listener.exception(this, new ConnectionException(t)); - break; - } - } + exception(new ConnectionException(t)); } void closeCode(ConnectionClose close) diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java index 1bd7d516cf..6d3972eb43 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java @@ -62,4 +62,9 @@ public class ConnectionException extends TransportException return close; } + @Override public void rethrow() + { + throw new ConnectionException(getMessage(), close, this); + } + } diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/ProtocolVersionException.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/ProtocolVersionException.java index 0cca0227a1..db8064268c 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/ProtocolVersionException.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/ProtocolVersionException.java @@ -32,13 +32,18 @@ public final class ProtocolVersionException extends ConnectionException private final byte major; private final byte minor; - public ProtocolVersionException(byte major, byte minor) + public ProtocolVersionException(byte major, byte minor, Throwable cause) { - super(String.format("version missmatch: %s-%s", major, minor)); + super(String.format("version mismatch: %s-%s", major, minor), cause); this.major = major; this.minor = minor; } + public ProtocolVersionException(byte major, byte minor) + { + this(major, minor, null); + } + public byte getMajor() { return this.major; @@ -49,4 +54,9 @@ public final class ProtocolVersionException extends ConnectionException return this.minor; } + @Override public void rethrow() + { + throw new ProtocolVersionException(major, minor, this); + } + } diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java index 354e5c1d15..e4ce7329a9 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java @@ -33,7 +33,17 @@ public class SessionClosedException extends SessionException public SessionClosedException() { - super(null); + this(null); + } + + public SessionClosedException(Throwable cause) + { + super(null, cause); + } + + @Override public void rethrow() + { + throw new SessionClosedException(this); } } diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionException.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionException.java index ae9b4b9cdb..e90ad8caf6 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionException.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionException.java @@ -32,15 +32,25 @@ public class SessionException extends TransportException private ExecutionException exception; - public SessionException(ExecutionException exception) + public SessionException(ExecutionException exception, Throwable cause) { - super(String.valueOf(exception)); + super(String.valueOf(exception), cause); this.exception = exception; } + public SessionException(ExecutionException exception) + { + this(exception, null); + } + public ExecutionException getException() { return exception; } + @Override public void rethrow() + { + throw new SessionException(exception, this); + } + } diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/TransportException.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/TransportException.java index 5ef15154fc..0de190dfad 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/TransportException.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/TransportException.java @@ -43,4 +43,9 @@ public class TransportException extends RuntimeException super(cause); } + public void rethrow() + { + throw new TransportException(getMessage(), this); + } + } |