summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAidan Skinner <aidan@apache.org>2008-04-21 17:03:43 +0000
committerAidan Skinner <aidan@apache.org>2008-04-21 17:03:43 +0000
commite3814aea54313a807ff935d7a333dc6d03bdbb6c (patch)
tree7c9c387a2de535ca7969da3f725c02a5fb6c7a97
parentac031667f966d301887c5c77b59c8db8d74ec0a0 (diff)
downloadqpid-python-e3814aea54313a807ff935d7a333dc6d03bdbb6c.tar.gz
QPID-832 handle multiple brokers properly
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/thegreatmerge@650205 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java20
1 files changed, 11 insertions, 9 deletions
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
index 69ddf7b08f..f6537e0375 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
@@ -369,7 +369,8 @@ public class AMQConnection extends Closeable implements Connection, QueueConnect
}
_failoverPolicy = new FailoverPolicy(connectionURL);
- if (_failoverPolicy.getNextBrokerDetails().getTransport().equals(BrokerDetails.VM))
+ BrokerDetails brokerDetails = _failoverPolicy.getNextBrokerDetails();
+ if (brokerDetails.getTransport().equals(BrokerDetails.VM))
{
_delegate = new AMQConnectionDelegate_0_8(this);
}
@@ -450,11 +451,15 @@ public class AMQConnection extends Closeable implements Connection, QueueConnect
Exception lastException = new Exception();
lastException.initCause(new ConnectException());
- while (!_connected && _failoverPolicy.failoverAllowed())
+ // TMG FIXME this seems... wrong...
+ boolean retryAllowed = true;
+ while (!_connected && retryAllowed )
{
try
{
- makeBrokerConnection(_failoverPolicy.getNextBrokerDetails());
+ makeBrokerConnection(brokerDetails);
+ lastException = null;
+ _connected = true;
}
catch (AMQProtocolException pe)
{
@@ -472,16 +477,13 @@ public class AMQConnection extends Closeable implements Connection, QueueConnect
{
lastException = e;
- //We need to change protocol handler here as an error during the connect will not
- // cause the StateManager to be replaced. So the state is out of sync on reconnect
- // This can be seen when a exception occurs during connection. i.e. log4j NoSuchMethod. (using < 1.2.12)
- _protocolHandler.setStateManager(new AMQStateManager());
-
if (_logger.isInfoEnabled())
{
_logger.info("Unable to connect to broker at " + _failoverPolicy.getCurrentBrokerDetails(),
- e.getCause());
+ e.getCause());
}
+ retryAllowed = _failoverPolicy.failoverAllowed();
+ brokerDetails = _failoverPolicy.getNextBrokerDetails();
}
}