[ https://issues.apache.org/jira/browse/CXF-6454?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15279973#comment-15279973 ]
ASF GitHub Bot commented on CXF-6454: ------------------------------------- Github user tomitribe-dev commented on the pull request: https://github.com/apache/cxf/pull/132#issuecomment-218432457 Build finished. 717 tests run, 2 skipped, 0 failed. > 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 > Assignee: Christian Schneider > Priority: Critical > Fix For: 3.0.7, 3.1.7, 3.2.0 > > > 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 connected to 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)