cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Waldemar Szostak (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CXF-6454) Orphaned JMS connections created in endless loop
Date Wed, 10 Jun 2015 11:36:00 GMT
Waldemar Szostak created CXF-6454:
-------------------------------------

             Summary: Orphaned JMS connections created in endless loop
                 Key: CXF-6454
                 URL: https://issues.apache.org/jira/browse/CXF-6454
             Project: CXF
          Issue Type: Bug
          Components: JMS, Transports
    Affects Versions: 3.0.5
            Reporter: Waldemar Szostak
            Priority: Critical


h3. Problem description
In JMSFactory.createConnection(JMSConfiguration):
{code}public static Connection createConnection(JMSConfiguration jmsConfig) throws JMSException
{
	String username = jmsConfig.getUserName();
	ConnectionFactory cf = jmsConfig.getConnectionFactory();
	Connection connection = username != null 
		? cf.createConnection(username, jmsConfig.getPassword())
		: cf.createConnection();
	if (jmsConfig.getDurableSubscriptionClientId() != null) {
		connection.setClientID(jmsConfig.getDurableSubscriptionClientId());
	}
	return connection;
}{code}
there is no exception handling if the clientID fails to be set. Such an exception would exit
this method without passing the reference to the just-opened JMS connection to exception handling
code (JMSDestination.createTargetDestinationListener()).

Moreover, JMSDestination.restartConnection() keeps on starting new connections (there is no
max attempt restriction!) until it creates one without an exception thrown in the process.

Now, if the clientID is already registered in the ESB, this creation of new connection will
last until server resources are no longer available to the JVM.

h3. Possible solution
# Close the connection if it's not possible to set the specified clientID at the time:
{code}public static Connection createConnection(JMSConfiguration jmsConfig) throws JMSException
{
	String username = jmsConfig.getUserName();
	ConnectionFactory cf = jmsConfig.getConnectionFactory();
	Connection connection = username != null 
			? cf.createConnection(username, jmsConfig.getPassword()) 
			: cf.createConnection();
	if (jmsConfig.getDurableSubscriptionClientId() != null) {
		try {					connection.setClientID(jmsConfig.getDurableSubscriptionClientId());
		} catch (InvalidClientIDException e) {
			connection.close();
			throw e;
		}
	}
	return connection;
}{code}
# Add a setting to restrict the maximum attempts to restart the connection in JMSDestination.restartConnection()
A configurable value would be best, but even a hardcoded.. anything but the practically endless
loop ;-)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message