summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2008-10-10 19:09:00 +0000
committerRafael H. Schloming <rhs@apache.org>2008-10-10 19:09:00 +0000
commit74e4bdcd985592b1bc786151ce16467dfdc7e471 (patch)
treed5a9b9dc8626dd1137b996dd750a5149b86d7bc8
parent4ec0b24d362c0a8fe8f32a822f9138569e579673 (diff)
downloadqpid-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
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java29
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java5
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/ProtocolVersionException.java14
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java12
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/SessionException.java14
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/TransportException.java5
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);
+ }
+
}