Author: kwall
Date: Fri Apr  8 17:49:24 2016
New Revision: 1738271

URL: http://svn.apache.org/viewvc?rev=1738271&view=rev
Log:
QPID-7189: [Java Client] Consistently name the connection delegates

* The previous inconsistency with the naming of 0-91's delegate was caused by 
the fact that
  AMQP 0-10 implementation misinterpreted 0-91 header.
* Also on the 0-8..0-91 path ensure that a AMQProtocolHeaderException is 
promptly reported to the caller (rather than causing a hang).

Added:
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_91.java
      - copied, changed from r1738231, 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_9_1.java
Removed:
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_9_1.java
Modified:
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnection.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQProtocolHandler.java
    
qpid/java/trunk/common/src/main/java/org/apache/qpid/framing/ProtocolInitiation.java

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnection.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnection.java?rev=1738271&r1=1738270&r2=1738271&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnection.java 
(original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnection.java 
Fri Apr  8 17:49:24 2016
@@ -434,7 +434,7 @@ public class AMQConnection extends Close
         }
         else if ("0-91".equals(amqpVersion) || "0-9-1".equals(amqpVersion))
         {
-            _delegate = new AMQConnectionDelegate_9_1(this);
+            _delegate = new AMQConnectionDelegate_0_91(this);
         }
         else
         {
@@ -634,15 +634,14 @@ public class AMQConnection extends Close
             }
 
             // reset state waiter state
-           _protocolHandler.getStateManager().clearLastException();
+            _protocolHandler.getStateManager().clearLastException();
             
_protocolHandler.getStateManager().changeState(AMQState.CONNECTION_NOT_STARTED);
-
         }
         catch (ClassNotFoundException e)
         {
             throw new AMQProtocolException
                 (AMQConstant.UNSUPPORTED_CLIENT_PROTOCOL_ERROR,
-                 String.format("Protocol: %s.%s is rquired by the broker but 
is not " +
+                 String.format("Protocol: %s.%s is required by the broker but 
is not " +
                                "currently supported by this client library 
implementation",
                                pe.getMajorVersion(), pe.getMinorVersion()),
                  e);

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java?rev=1738271&r1=1738270&r2=1738271&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
 Fri Apr  8 17:49:24 2016
@@ -235,7 +235,16 @@ public class AMQConnectionDelegate_0_10
         }
         catch (ProtocolVersionException pe)
         {
-            return ProtocolVersion.get(pe.getMajor(), pe.getMinor());
+            if (pe.getMajor() == 9 && pe.getMinor() == 1)
+            {
+                // 0-10 misinterprets 0-91's header (major/minor/revision) by 
treating minor as the major, and
+                // revision as the minor. Correct this so that we find the 
correct delegate.
+                return ProtocolVersion.v0_91;
+            }
+            else
+            {
+                return ProtocolVersion.get(pe.getMajor(), pe.getMinor());
+            }
         }
         catch (ConnectionException ce)
         {

Copied: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_91.java
 (from r1738231, 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_9_1.java)
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_91.java?p2=qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_91.java&p1=qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_9_1.java&r1=1738231&r2=1738271&rev=1738271&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_9_1.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_91.java
 Fri Apr  8 17:49:24 2016
@@ -23,10 +23,10 @@ package org.apache.qpid.client;
 import org.apache.qpid.framing.ProtocolVersion;
 
 
-public class AMQConnectionDelegate_9_1 extends AMQConnectionDelegate_8_0
+public class AMQConnectionDelegate_0_91 extends AMQConnectionDelegate_8_0
 {
 
-    public AMQConnectionDelegate_9_1(AMQConnection conn)
+    public AMQConnectionDelegate_0_91(AMQConnection conn)
     {
         super(conn);
     }

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQProtocolHandler.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQProtocolHandler.java?rev=1738271&r1=1738270&r2=1738271&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQProtocolHandler.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQProtocolHandler.java
 Fri Apr  8 17:49:24 2016
@@ -52,6 +52,7 @@ import org.apache.qpid.framing.AMQBody;
 import org.apache.qpid.framing.AMQDataBlock;
 import org.apache.qpid.framing.AMQFrame;
 import org.apache.qpid.framing.AMQMethodBody;
+import org.apache.qpid.framing.AMQProtocolHeaderException;
 import org.apache.qpid.framing.AMQShortString;
 import org.apache.qpid.framing.ConnectionCloseBody;
 import org.apache.qpid.framing.ConnectionCloseOkBody;
@@ -478,17 +479,21 @@ public class AMQProtocolHandler implemen
                     // We get here if the server sends a response to our 
initial protocol header
                     // suggesting an alternate ProtocolVersion; the server 
will then close the
                     // connection.
-                    ProtocolInitiation protocolInit = (ProtocolInitiation) 
message;
-                    ProtocolVersion checkedVersion = 
protocolInit.checkVersion();
-                    _logger.info("Broker suggested using protocol version: {} 
", checkedVersion);
-
-                    // Create protocol version from reported major and minor 
versions
-                    // in order to use them on delegate instantiation.
-                    // Currently delegate classes are named based on reported 
major and minor versions.
-                    _suggestedProtocolVersion = 
ProtocolVersion.get(protocolInit.getProtocolMajor(), 
protocolInit.getProtocolMinor());
+                    try
+                    {
+                        ProtocolInitiation protocolInit = (ProtocolInitiation) 
message;
+                        _suggestedProtocolVersion = 
protocolInit.checkVersion();
+                        _logger.debug("Broker suggested using protocol 
version: {} ", _suggestedProtocolVersion);
+
+                        // get round a bug in old versions of qpid whereby the 
connection is not closed
+                        _stateManager.changeState(AMQState.CONNECTION_CLOSED);
 
-                    // get round a bug in old versions of qpid whereby the 
connection is not closed
-                    _stateManager.changeState(AMQState.CONNECTION_CLOSED);
+                    }
+                    catch (AMQProtocolHeaderException e)
+                    {
+                        _stateManager.error(e);
+                        throw e;
+                    }
                 }
             }
         }

Modified: 
qpid/java/trunk/common/src/main/java/org/apache/qpid/framing/ProtocolInitiation.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/common/src/main/java/org/apache/qpid/framing/ProtocolInitiation.java?rev=1738271&r1=1738270&r2=1738271&view=diff
==============================================================================
--- 
qpid/java/trunk/common/src/main/java/org/apache/qpid/framing/ProtocolInitiation.java
 (original)
+++ 
qpid/java/trunk/common/src/main/java/org/apache/qpid/framing/ProtocolInitiation.java
 Fri Apr  8 17:49:24 2016
@@ -204,8 +204,9 @@ public class ProtocolInitiation extends
         if (!pv.isSupported())
         {
             // TODO: add list of available versions in list to msg...
-            throw new AMQProtocolVersionException("Protocol version " +
-                                                  _protocolMajor + "." + 
_protocolMinor + " not suppoerted by this version of the Qpid broker.", null);
+            throw new AMQProtocolVersionException("Protocol version " + 
_protocolMajor + "."
+                                                  + _protocolMinor
+                                                  + " not supported.", null);
         }
         return pv;
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to