Author: rhs
Date: Fri Oct 10 12:09:00 2008
New Revision: 703559

URL: http://svn.apache.org/viewvc?rev=703559&view=rev
Log:
QPID-1344: modified Connection to preserve the originating stack traces when 
throwing exceptions

Modified:
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ProtocolVersionException.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionException.java
    
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/TransportException.java

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java?rev=703559&r1=703558&r2=703559&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java
 Fri Oct 10 12:09:00 2008
@@ -75,7 +75,7 @@
     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 @@
 
             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 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)

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java?rev=703559&r1=703558&r2=703559&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java
 Fri Oct 10 12:09:00 2008
@@ -62,4 +62,9 @@
         return close;
     }
 
+    @Override public void rethrow()
+    {
+        throw new ConnectionException(getMessage(), close, this);
+    }
+
 }

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ProtocolVersionException.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ProtocolVersionException.java?rev=703559&r1=703558&r2=703559&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ProtocolVersionException.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ProtocolVersionException.java
 Fri Oct 10 12:09:00 2008
@@ -32,13 +32,18 @@
     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 @@
         return this.minor;
     }
 
+    @Override public void rethrow()
+    {
+        throw new ProtocolVersionException(major, minor, this);
+    }
+
 }

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java?rev=703559&r1=703558&r2=703559&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java
 Fri Oct 10 12:09:00 2008
@@ -33,7 +33,17 @@
 
     public SessionClosedException()
     {
-        super(null);
+        this(null);
+    }
+
+    public SessionClosedException(Throwable cause)
+    {
+        super(null, cause);
+    }
+
+    @Override public void rethrow()
+    {
+        throw new SessionClosedException(this);
     }
 
 }

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionException.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionException.java?rev=703559&r1=703558&r2=703559&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionException.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionException.java
 Fri Oct 10 12:09:00 2008
@@ -32,15 +32,25 @@
 
     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);
+    }
+
 }

Modified: 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/TransportException.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/TransportException.java?rev=703559&r1=703558&r2=703559&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/TransportException.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/TransportException.java
 Fri Oct 10 12:09:00 2008
@@ -43,4 +43,9 @@
         super(cause);
     }
 
+    public void rethrow()
+    {
+        throw new TransportException(getMessage(), this);
+    }
+
 }


Reply via email to