Author: aidan
Date: Wed Jul  2 07:16:26 2008
New Revision: 673401

URL: http://svn.apache.org/viewvc?rev=673401&view=rev
Log:
Revert "QPID-962 Exception handling was... unpleasing... Fix up of patch from 
rhs"

This reverts commit 673343.

Modified:
    
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
    
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_8_0.java
    
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java
    
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/state/AMQStateManager.java
    
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java

Modified: 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java?rev=673401&r1=673400&r2=673401&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
 Wed Jul  2 07:16:26 2008
@@ -26,7 +26,6 @@
 import org.apache.qpid.AMQUnresolvedAddressException;
 import org.apache.qpid.client.failover.FailoverException;
 import org.apache.qpid.client.protocol.AMQProtocolHandler;
-import org.apache.qpid.client.state.AMQState;
 import org.apache.qpid.client.configuration.ClientProperties;
 import org.apache.qpid.exchange.ExchangeDefaults;
 import org.apache.qpid.framing.*;
@@ -235,7 +234,7 @@
     /*
      * The last error code that occured on the connection. Used to return the 
correct exception to the client
      */
-    protected Exception _lastException = null;
+    protected AMQException _lastAMQException = null;
 
     /*
      * The connection meta data
@@ -379,20 +378,13 @@
             _delegate = new AMQConnectionDelegate_0_10(this);
         }
 
+        final ArrayList<JMSException> exceptions = new 
ArrayList<JMSException>();
+
         class Listener implements ExceptionListener
         {
             public void onException(JMSException e)
             {
-                _lastException = e;
-                try
-                {
-                    
getProtocolHandler().getStateManager().changeState(AMQState.CONNECTION_CLOSED);
-                    
-                }
-                catch (AMQException e1)
-                {
-                    // Wow, badness
-                }
+                exceptions.add(e);
             }
         }
 
@@ -451,6 +443,9 @@
         // We are not currently connected
         _connected = false;
 
+        Exception lastException = new Exception();
+        lastException.initCause(new ConnectException());
+
         // TMG FIXME this seems... wrong...
         boolean retryAllowed = true;
         while (!_connected && retryAllowed )
@@ -458,6 +453,8 @@
             try
             {
                 makeBrokerConnection(brokerDetails);
+                lastException = null;
+                _connected = true;
             }
             catch (AMQProtocolException pe)
             {
@@ -473,14 +470,12 @@
             }
             catch (Exception e)
             {
-                _lastException = e;
-            }
-            if (_lastException != null)
-            {
+                lastException = e;
+
                 if (_logger.isInfoEnabled())
                 {
                     _logger.info("Unable to connect to broker at " + 
_failoverPolicy.getCurrentBrokerDetails(),
-                            _lastException.getCause());
+                            e.getCause());
                 }
                 retryAllowed = _failoverPolicy.failoverAllowed();
                 brokerDetails = _failoverPolicy.getNextBrokerDetails();
@@ -503,16 +498,31 @@
             {
                 // Eat it, we've hopefully got all the exceptions if this 
happened
             }
-            
-            if (_lastException != null)
+            if (exceptions.size() > 0)
+            {
+                JMSException e = exceptions.get(0);
+                int code = -1;
+                try
+                {
+                    code = new Integer(e.getErrorCode()).intValue();
+                }
+                catch (NumberFormatException nfe)
+                {
+                    // Ignore this, we have some error codes and messages 
swapped around
+                }
+
+                throw new 
AMQConnectionFailureException(AMQConstant.getConstant(code),
+                                                        e.getMessage(), e);
+            }
+            else if (lastException != null)
             {
-                if (_lastException.getCause() != null)
+                if (lastException.getCause() != null)
                 {
-                    message = _lastException.getCause().getMessage();
+                    message = lastException.getCause().getMessage();
                 }
                 else
                 {
-                    message = _lastException.getMessage();
+                    message = lastException.getMessage();
                 }
             }
 
@@ -524,19 +534,24 @@
                 }
                 else // can only be "" if getMessage() returned it therfore 
lastException != null
                 {
-                    message = "Unable to Connect:" + _lastException.getClass();
+                    message = "Unable to Connect:" + lastException.getClass();
                 }
             }
 
-            AMQException e = new AMQConnectionFailureException(message, 
_lastException);
+            AMQException e = new AMQConnectionFailureException(message, null);
 
-            if (_lastException != null)
+            if (lastException != null)
             {
-                if (_lastException instanceof UnresolvedAddressException)
+                if (lastException instanceof UnresolvedAddressException)
                 {
                     e = new AMQUnresolvedAddressException(message, 
_failoverPolicy.getCurrentBrokerDetails().toString(),
                                                           null);
                 }
+
+                if (e.getCause() != null)
+                {
+                    e.initCause(lastException);
+               }
             }
 
             throw e;
@@ -1492,14 +1507,4 @@
     {
         return _syncPersistence;
     }
-
-    public Exception getLastException()
-    {
-        return _lastException;
-    }
-
-    public void setLastException(Exception exception)
-    {
-        _lastException = exception;
-    }
 }

Modified: 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_8_0.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_8_0.java?rev=673401&r1=673400&r2=673401&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_8_0.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_8_0.java
 Wed Jul  2 07:16:26 2008
@@ -25,9 +25,7 @@
 import java.nio.channels.UnresolvedAddressException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
-import java.util.EnumSet;
 import java.util.Iterator;
-import java.util.Set;
 
 import javax.jms.JMSException;
 import javax.jms.XASession;
@@ -78,23 +76,24 @@
         return ((cause instanceof ConnectException) || (cause instanceof 
UnresolvedAddressException));
     }
 
-    public void makeBrokerConnection(BrokerDetails brokerDetail) throws 
AMQException, IOException
+    public void makeBrokerConnection(BrokerDetails brokerDetail) throws 
IOException, AMQException
     {
-        final Set<AMQState> openOrClosedStates =
-                EnumSet.of(AMQState.CONNECTION_OPEN, 
AMQState.CONNECTION_CLOSED);
-
-        
TransportConnection.getInstance(brokerDetail).connect(_conn._protocolHandler, 
brokerDetail);
-        // this blocks until the connection has been set up or when an error
-        // has prevented the connection being set up
-
-        AMQState state = 
_conn._protocolHandler.attainState(openOrClosedStates);
-        if(state == AMQState.CONNECTION_OPEN)
+        try
         {
+            
TransportConnection.getInstance(brokerDetail).connect(_conn._protocolHandler, 
brokerDetail);
+            // this blocks until the connection has been set up or when an 
error
+            // has prevented the connection being set up
+            _conn._protocolHandler.attainState(AMQState.CONNECTION_OPEN);
             _conn._failoverPolicy.attainedConnection();
 
             // Again this should be changed to a suitable notify
             _conn._connected = true;
-        } 
+        }
+        catch (AMQException e)
+        {
+            _conn._lastAMQException = e;
+            throw e;
+        }
     }
 
     public org.apache.qpid.jms.Session createSession(final boolean transacted, 
final int acknowledgeMode, final int prefetch)

Modified: 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java?rev=673401&r1=673400&r2=673401&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java
 Wed Jul  2 07:16:26 2008
@@ -559,7 +559,7 @@
           _frameListeners.remove(listener);
       }
      */
-    public void attainState(AMQState s) throws Exception
+    public void attainState(AMQState s) throws AMQException
     {
         getStateManager().attainState(s);
     }

Modified: 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/state/AMQStateManager.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/state/AMQStateManager.java?rev=673401&r1=673400&r2=673401&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/state/AMQStateManager.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/state/AMQStateManager.java
 Wed Jul  2 07:16:26 2008
@@ -102,7 +102,7 @@
     }
 
 
-    public void attainState(final AMQState s) throws Exception
+    public void attainState(final AMQState s) throws AMQException
     {
         synchronized (_stateLock)
         {
@@ -118,11 +118,6 @@
                 catch (InterruptedException e)
                 {
                     _logger.warn("Thread interrupted");
-                    if (_protocolSession.getAMQConnection().getLastException() 
!= null)
-                    {
-                        throw 
_protocolSession.getAMQConnection().getLastException();
-                    }
-
                 }
 
                 if (_currentState != s)
@@ -174,11 +169,6 @@
                 catch (InterruptedException e)
                 {
                     _logger.warn("Thread interrupted");
-                    if (_protocolSession.getAMQConnection().getLastException() 
!= null)
-                    {
-                        throw new AMQException(null, "Could not attain state 
due to exception",
-                                
_protocolSession.getAMQConnection().getLastException());
-                    }
                 }
 
                 if (!stateSet.contains(_currentState))

Modified: 
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java?rev=673401&r1=673400&r2=673401&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java
 Wed Jul  2 07:16:26 2008
@@ -134,7 +134,6 @@
         }
         catch (AMQException amqe)
         {
-            assertNotNull("No cause set", amqe.getCause());
             if (amqe.getCause().getClass() == Exception.class)
             {
                 System.err.println("QPID-594 : WARNING RACE CONDITION. Unable 
to determine cause of Connection Failure.");


Reply via email to