You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2016/07/28 11:05:59 UTC
svn commit: r1754392 -
/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnection.java
Author: kwall
Date: Thu Jul 28 11:05:59 2016
New Revision: 1754392
URL: http://svn.apache.org/viewvc?rev=1754392&view=rev
Log:
QPID-6377: [Java Client] Prevent a connection failure on initial connection leaking a taskpool/thread
* Change AMQConnection's constructor to shutdown the taskpool if the constructor did not complete successfully (i.e. initial connection fails).
Modified:
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnection.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=1754392&r1=1754391&r2=1754392&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 Thu Jul 28 11:05:59 2016
@@ -297,242 +297,249 @@ public class AMQConnection extends Close
this(new AMQConnectionURL(connection));
}
- /**
- * TODO Some horrible stuff going on here with setting exceptions to be non-null to detect if an exception
- * was thrown during the connection! Intention not clear. Use a flag anyway, not exceptions... Will fix soon.
- */
public AMQConnection(ConnectionURL connectionURL) throws QpidException
{
- if (connectionURL == null)
+ boolean success = false;
+ try
{
- throw new IllegalArgumentException("Connection must be specified");
- }
+ if (connectionURL == null)
+ {
+ throw new IllegalArgumentException("Connection must be specified");
+ }
- if (_logger.isDebugEnabled())
- {
- _logger.debug("Connection(" + _connectionNumber + "):" + connectionURL);
- }
+ if (_logger.isDebugEnabled())
+ {
+ _logger.debug("Connection(" + _connectionNumber + "):" + connectionURL);
+ }
- // set this connection maxPrefetch
- if (connectionURL.getOption(ConnectionURL.OPTIONS_MAXPREFETCH) != null)
- {
- _maxPrefetch = Integer.parseInt(connectionURL.getOption(ConnectionURL.OPTIONS_MAXPREFETCH));
- }
- else
- {
- // use the default value set for all connections
- _maxPrefetch = Integer.parseInt(System.getProperties().getProperty(ClientProperties.MAX_PREFETCH_PROP_NAME,
- ClientProperties.MAX_PREFETCH_DEFAULT));
- }
+ // set this connection maxPrefetch
+ if (connectionURL.getOption(ConnectionURL.OPTIONS_MAXPREFETCH) != null)
+ {
+ _maxPrefetch = Integer.parseInt(connectionURL.getOption(ConnectionURL.OPTIONS_MAXPREFETCH));
+ }
+ else
+ {
+ // use the default value set for all connections
+ _maxPrefetch = Integer.parseInt(System.getProperties().getProperty(ClientProperties.MAX_PREFETCH_PROP_NAME,
+ ClientProperties.MAX_PREFETCH_DEFAULT));
+ }
- if (connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_PERSISTENCE) != null)
- {
- _syncPersistence =
- Boolean.parseBoolean(connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_PERSISTENCE));
- _logger.warn("sync_persistence is a deprecated property, " +
- "please use sync_publish={persistent|all} instead");
- }
- else
- {
- // use the default value set for all connections
- _syncPersistence = Boolean.getBoolean(ClientProperties.SYNC_PERSISTENT_PROP_NAME);
- if (_syncPersistence)
+ if (connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_PERSISTENCE) != null)
{
+ _syncPersistence =
+ Boolean.parseBoolean(connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_PERSISTENCE));
_logger.warn("sync_persistence is a deprecated property, " +
"please use sync_publish={persistent|all} instead");
}
- }
-
- if (connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_ACK) != null)
- {
- _syncAck = Boolean.parseBoolean(connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_ACK));
- }
- else
- {
- // use the default value set for all connections
- _syncAck = Boolean.getBoolean(ClientProperties.SYNC_ACK_PROP_NAME);
- }
+ else
+ {
+ // use the default value set for all connections
+ _syncPersistence = Boolean.getBoolean(ClientProperties.SYNC_PERSISTENT_PROP_NAME);
+ if (_syncPersistence)
+ {
+ _logger.warn("sync_persistence is a deprecated property, " +
+ "please use sync_publish={persistent|all} instead");
+ }
+ }
- if (connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_CLIENT_ACK) != null)
- {
- _syncClientAck = Boolean.parseBoolean(connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_CLIENT_ACK));
- }
- else
- {
- String legacyProperty = System.getProperty("qpid.sync_after_client.ack");
- if (legacyProperty != null)
+ if (connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_ACK) != null)
{
- _logger.warn("'qpid.sync_after_client.ack' is a deprecated system property, " +
- "please use '{}' instead", ClientProperties.SYNC_CLIENT_ACK);
+ _syncAck = Boolean.parseBoolean(connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_ACK));
+ }
+ else
+ {
+ // use the default value set for all connections
+ _syncAck = Boolean.getBoolean(ClientProperties.SYNC_ACK_PROP_NAME);
}
- _syncClientAck = Boolean.parseBoolean(System.getProperty(ClientProperties.SYNC_CLIENT_ACK,
- legacyProperty != null ? legacyProperty : "true"));
- }
- if (connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_PUBLISH) != null)
- {
- _syncPublish = connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_PUBLISH);
- }
- else
- {
- // use the default value set for all connections
- _syncPublish = System.getProperty((ClientProperties.SYNC_PUBLISH_PROP_NAME),_syncPublish);
- }
+ if (connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_CLIENT_ACK) != null)
+ {
+ _syncClientAck = Boolean.parseBoolean(connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_CLIENT_ACK));
+ }
+ else
+ {
+ String legacyProperty = System.getProperty("qpid.sync_after_client.ack");
+ if (legacyProperty != null)
+ {
+ _logger.warn("'qpid.sync_after_client.ack' is a deprecated system property, " +
+ "please use '{}' instead", ClientProperties.SYNC_CLIENT_ACK);
+ }
+ _syncClientAck = Boolean.parseBoolean(System.getProperty(ClientProperties.SYNC_CLIENT_ACK,
+ legacyProperty != null ? legacyProperty : "true"));
+ }
- if (connectionURL.getOption(ConnectionURL.OPTIONS_POPULATE_USER_ID) != null)
- {
- _populateUserId = Boolean.parseBoolean(connectionURL.getOption(ConnectionURL.OPTIONS_POPULATE_USER_ID));
- }
+ if (connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_PUBLISH) != null)
+ {
+ _syncPublish = connectionURL.getOption(ConnectionURL.OPTIONS_SYNC_PUBLISH);
+ }
+ else
+ {
+ // use the default value set for all connections
+ _syncPublish = System.getProperty((ClientProperties.SYNC_PUBLISH_PROP_NAME),_syncPublish);
+ }
- if (connectionURL.getOption(ConnectionURL.OPTIONS_USE_LEGACY_MAP_MESSAGE_FORMAT) != null)
- {
- _useLegacyMapMessageFormat = Boolean.parseBoolean(
- connectionURL.getOption(ConnectionURL.OPTIONS_USE_LEGACY_MAP_MESSAGE_FORMAT));
- }
- else
- {
- // use the default value set for all connections
- _useLegacyMapMessageFormat = Boolean.getBoolean(ClientProperties.USE_LEGACY_MAP_MESSAGE_FORMAT);
- }
+ if (connectionURL.getOption(ConnectionURL.OPTIONS_POPULATE_USER_ID) != null)
+ {
+ _populateUserId = Boolean.parseBoolean(connectionURL.getOption(ConnectionURL.OPTIONS_POPULATE_USER_ID));
+ }
- if (connectionURL.getOption(ConnectionURL.OPTIONS_USE_LEGACY_STREAM_MESSAGE_FORMAT) != null)
- {
- _useLegacyStreamMessageFormat = Boolean.parseBoolean(
- connectionURL.getOption(ConnectionURL.OPTIONS_USE_LEGACY_STREAM_MESSAGE_FORMAT));
- }
- else
- {
- // use the default value set for all connections
- _useLegacyStreamMessageFormat = System.getProperty(ClientProperties.USE_LEGACY_STREAM_MESSAGE_FORMAT) == null ?
- true : Boolean.getBoolean(ClientProperties.USE_LEGACY_STREAM_MESSAGE_FORMAT);
- }
+ if (connectionURL.getOption(ConnectionURL.OPTIONS_USE_LEGACY_MAP_MESSAGE_FORMAT) != null)
+ {
+ _useLegacyMapMessageFormat = Boolean.parseBoolean(
+ connectionURL.getOption(ConnectionURL.OPTIONS_USE_LEGACY_MAP_MESSAGE_FORMAT));
+ }
+ else
+ {
+ // use the default value set for all connections
+ _useLegacyMapMessageFormat = Boolean.getBoolean(ClientProperties.USE_LEGACY_MAP_MESSAGE_FORMAT);
+ }
- if(connectionURL.getOption(ConnectionURL.OPTIONS_VERIFY_QUEUE_ON_SEND) != null)
- {
- _validateQueueOnSend = Boolean.parseBoolean(
- connectionURL.getOption(ConnectionURL.OPTIONS_VERIFY_QUEUE_ON_SEND));
- }
- else
- {
- _validateQueueOnSend =
- Boolean.parseBoolean(System.getProperty(ClientProperties.VERIFY_QUEUE_ON_SEND, "false"));
- }
+ if (connectionURL.getOption(ConnectionURL.OPTIONS_USE_LEGACY_STREAM_MESSAGE_FORMAT) != null)
+ {
+ _useLegacyStreamMessageFormat = Boolean.parseBoolean(
+ connectionURL.getOption(ConnectionURL.OPTIONS_USE_LEGACY_STREAM_MESSAGE_FORMAT));
+ }
+ else
+ {
+ // use the default value set for all connections
+ _useLegacyStreamMessageFormat = System.getProperty(ClientProperties.USE_LEGACY_STREAM_MESSAGE_FORMAT) == null ?
+ true : Boolean.getBoolean(ClientProperties.USE_LEGACY_STREAM_MESSAGE_FORMAT);
+ }
- if(connectionURL.getOption(ConnectionURL.OPTIONS_COMPRESS_MESSAGES) != null)
- {
- _compressMessages = Boolean.parseBoolean(connectionURL.getOption(ConnectionURL.OPTIONS_COMPRESS_MESSAGES));
- }
- else
- {
- _compressMessages =
- Boolean.parseBoolean(System.getProperty(ClientProperties.CONNECTION_OPTION_COMPRESS_MESSAGES,
- String.valueOf(ClientProperties.DEFAULT_CONNECTION_OPTION_COMPRESS_MESSAGES)));
- }
+ if(connectionURL.getOption(ConnectionURL.OPTIONS_VERIFY_QUEUE_ON_SEND) != null)
+ {
+ _validateQueueOnSend = Boolean.parseBoolean(
+ connectionURL.getOption(ConnectionURL.OPTIONS_VERIFY_QUEUE_ON_SEND));
+ }
+ else
+ {
+ _validateQueueOnSend =
+ Boolean.parseBoolean(System.getProperty(ClientProperties.VERIFY_QUEUE_ON_SEND, "false"));
+ }
+ if(connectionURL.getOption(ConnectionURL.OPTIONS_COMPRESS_MESSAGES) != null)
+ {
+ _compressMessages = Boolean.parseBoolean(connectionURL.getOption(ConnectionURL.OPTIONS_COMPRESS_MESSAGES));
+ }
+ else
+ {
+ _compressMessages =
+ Boolean.parseBoolean(System.getProperty(ClientProperties.CONNECTION_OPTION_COMPRESS_MESSAGES,
+ String.valueOf(ClientProperties.DEFAULT_CONNECTION_OPTION_COMPRESS_MESSAGES)));
+ }
- if(connectionURL.getOption(ConnectionURL.OPTIONS_MESSAGES_COMPRESSION_THRESHOLD_SIZE) != null)
- {
- _messageCompressionThresholdSize = Integer.valueOf(connectionURL.getOption(ConnectionURL.OPTIONS_MESSAGES_COMPRESSION_THRESHOLD_SIZE));
- }
- else
- {
- _messageCompressionThresholdSize = Integer.getInteger(ClientProperties.CONNECTION_OPTION_MESSAGE_COMPRESSION_THRESHOLD_SIZE,
- ClientProperties.DEFAULT_MESSAGE_COMPRESSION_THRESHOLD_SIZE);
- }
- if(_messageCompressionThresholdSize <= 0)
- {
- _messageCompressionThresholdSize = Integer.MAX_VALUE;
- }
+ if(connectionURL.getOption(ConnectionURL.OPTIONS_MESSAGES_COMPRESSION_THRESHOLD_SIZE) != null)
+ {
+ _messageCompressionThresholdSize = Integer.valueOf(connectionURL.getOption(ConnectionURL.OPTIONS_MESSAGES_COMPRESSION_THRESHOLD_SIZE));
+ }
+ else
+ {
+ _messageCompressionThresholdSize = Integer.getInteger(ClientProperties.CONNECTION_OPTION_MESSAGE_COMPRESSION_THRESHOLD_SIZE,
+ ClientProperties.DEFAULT_MESSAGE_COMPRESSION_THRESHOLD_SIZE);
+ }
+ if(_messageCompressionThresholdSize <= 0)
+ {
+ _messageCompressionThresholdSize = Integer.MAX_VALUE;
+ }
- String amqpVersion = System.getProperty((ClientProperties.AMQP_VERSION), "0-10");
- if (_logger.isDebugEnabled())
- {
- _logger.debug("AMQP version " + amqpVersion);
- }
+ String amqpVersion = System.getProperty((ClientProperties.AMQP_VERSION), "0-10");
+ if (_logger.isDebugEnabled())
+ {
+ _logger.debug("AMQP version " + amqpVersion);
+ }
- _failoverPolicy = new FailoverPolicy(connectionURL, this);
- if ("0-8".equals(amqpVersion))
- {
- _delegate = new AMQConnectionDelegate_8_0(this);
- }
- else if ("0-9".equals(amqpVersion))
- {
- _delegate = new AMQConnectionDelegate_0_9(this);
- }
- else if ("0-91".equals(amqpVersion) || "0-9-1".equals(amqpVersion))
- {
- _delegate = new AMQConnectionDelegate_0_91(this);
- }
- else
- {
- _delegate = new AMQConnectionDelegate_0_10(this);
- }
+ _failoverPolicy = new FailoverPolicy(connectionURL, this);
+ if ("0-8".equals(amqpVersion))
+ {
+ _delegate = new AMQConnectionDelegate_8_0(this);
+ }
+ else if ("0-9".equals(amqpVersion))
+ {
+ _delegate = new AMQConnectionDelegate_0_9(this);
+ }
+ else if ("0-91".equals(amqpVersion) || "0-9-1".equals(amqpVersion))
+ {
+ _delegate = new AMQConnectionDelegate_0_91(this);
+ }
+ else
+ {
+ _delegate = new AMQConnectionDelegate_0_10(this);
+ }
- _connectionURL = connectionURL;
+ _connectionURL = connectionURL;
- _clientName = connectionURL.getClientName();
- _username = connectionURL.getUsername();
- _password = connectionURL.getPassword();
+ _clientName = connectionURL.getClientName();
+ _username = connectionURL.getUsername();
+ _password = connectionURL.getPassword();
- setVirtualHost(connectionURL.getVirtualHost());
+ setVirtualHost(connectionURL.getVirtualHost());
- if (connectionURL.getDefaultQueueExchangeName() != null)
- {
- _defaultQueueExchangeName = connectionURL.getDefaultQueueExchangeName();
- }
+ if (connectionURL.getDefaultQueueExchangeName() != null)
+ {
+ _defaultQueueExchangeName = connectionURL.getDefaultQueueExchangeName();
+ }
- if (connectionURL.getDefaultTopicExchangeName() != null)
- {
- _defaultTopicExchangeName = connectionURL.getDefaultTopicExchangeName();
- }
+ if (connectionURL.getDefaultTopicExchangeName() != null)
+ {
+ _defaultTopicExchangeName = connectionURL.getDefaultTopicExchangeName();
+ }
- if (connectionURL.getTemporaryQueueExchangeName() != null)
- {
- _temporaryQueueExchangeName = connectionURL.getTemporaryQueueExchangeName();
- }
+ if (connectionURL.getTemporaryQueueExchangeName() != null)
+ {
+ _temporaryQueueExchangeName = connectionURL.getTemporaryQueueExchangeName();
+ }
- if (connectionURL.getTemporaryTopicExchangeName() != null)
- {
- _temporaryTopicExchangeName = connectionURL.getTemporaryTopicExchangeName();
- }
+ if (connectionURL.getTemporaryTopicExchangeName() != null)
+ {
+ _temporaryTopicExchangeName = connectionURL.getTemporaryTopicExchangeName();
+ }
- _protocolHandler = new AMQProtocolHandler(this);
+ _protocolHandler = new AMQProtocolHandler(this);
- if (_logger.isDebugEnabled())
- {
- _logger.debug("Connecting with ProtocolHandler Version:"+_protocolHandler.getProtocolVersion());
- }
+ if (_logger.isDebugEnabled())
+ {
+ _logger.debug("Connecting with ProtocolHandler Version:"+_protocolHandler.getProtocolVersion());
+ }
- // We are not currently connected
- setConnected(false);
+ // We are not currently connected
+ setConnected(false);
- if(_clientName != null)
- {
- makeConnection();
- }
+ if (_clientName != null)
+ {
+ makeConnection();
+ }
- _connectionMetaData = new QpidConnectionMetaData();
+ _connectionMetaData = new QpidConnectionMetaData();
- if (connectionURL.getOption(ConnectionURL.OPTIONS_OBJECT_MESSAGE_CLASS_HIERARCHY_WHITE_LIST) != null)
- {
- String whiteListedClassHierarchiesString = connectionURL.getOption(ConnectionURL.OPTIONS_OBJECT_MESSAGE_CLASS_HIERARCHY_WHITE_LIST);
- _whiteListedClassHierarchies = Arrays.asList(whiteListedClassHierarchiesString.split(","));
- }
- else
- {
- final String defaultWhiteListedClassHierarchiesString = System.getProperty(CommonProperties.QPID_SECURITY_OBJECT_MESSAGE_CLASS_HIERARCHY_WHITE_LIST, "*");
- _whiteListedClassHierarchies = Arrays.asList(defaultWhiteListedClassHierarchiesString.split(","));
- }
+ if (connectionURL.getOption(ConnectionURL.OPTIONS_OBJECT_MESSAGE_CLASS_HIERARCHY_WHITE_LIST) != null)
+ {
+ String whiteListedClassHierarchiesString = connectionURL.getOption(ConnectionURL.OPTIONS_OBJECT_MESSAGE_CLASS_HIERARCHY_WHITE_LIST);
+ _whiteListedClassHierarchies = Arrays.asList(whiteListedClassHierarchiesString.split(","));
+ }
+ else
+ {
+ final String defaultWhiteListedClassHierarchiesString = System.getProperty(CommonProperties.QPID_SECURITY_OBJECT_MESSAGE_CLASS_HIERARCHY_WHITE_LIST, "*");
+ _whiteListedClassHierarchies = Arrays.asList(defaultWhiteListedClassHierarchiesString.split(","));
+ }
- if (connectionURL.getOption(ConnectionURL.OPTIONS_OBJECT_MESSAGE_CLASS_HIERARCHY_BLACK_LIST) != null)
- {
- String blackListedClassHierarchiesString = connectionURL.getOption(ConnectionURL.OPTIONS_OBJECT_MESSAGE_CLASS_HIERARCHY_BLACK_LIST);
- _blackListedClassHierarchies = Arrays.asList(blackListedClassHierarchiesString.split(","));
+ if (connectionURL.getOption(ConnectionURL.OPTIONS_OBJECT_MESSAGE_CLASS_HIERARCHY_BLACK_LIST) != null)
+ {
+ String blackListedClassHierarchiesString = connectionURL.getOption(ConnectionURL.OPTIONS_OBJECT_MESSAGE_CLASS_HIERARCHY_BLACK_LIST);
+ _blackListedClassHierarchies = Arrays.asList(blackListedClassHierarchiesString.split(","));
+ }
+ else
+ {
+ final String defaultBlackListedClassHierarchiesString = System.getProperty(CommonProperties.QPID_SECURITY_OBJECT_MESSAGE_CLASS_HIERARCHY_BLACK_LIST, "");
+ _blackListedClassHierarchies = Arrays.asList(defaultBlackListedClassHierarchiesString.split(","));
+ }
+ success = true;
}
- else
+ finally
{
- final String defaultBlackListedClassHierarchiesString = System.getProperty(CommonProperties.QPID_SECURITY_OBJECT_MESSAGE_CLASS_HIERARCHY_BLACK_LIST, "");
- _blackListedClassHierarchies = Arrays.asList(defaultBlackListedClassHierarchiesString.split(","));
+ if (!success)
+ {
+ shutdownTaskPool();
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org