Skip to content

Commit

Permalink
ARTEMIS-1415 potential JMS bridge conn leak
Browse files Browse the repository at this point in the history
  • Loading branch information
jbertram authored and clebertsuconic committed Jan 23, 2018
1 parent 81324e0 commit 3658d62
Showing 1 changed file with 54 additions and 43 deletions.
Expand Up @@ -954,65 +954,76 @@ private Connection createConnection(final String username,
final String clientID,
final boolean isXA,
boolean isSource) throws Exception {
Connection conn;
Connection conn = null;

Object cf = cff.createConnectionFactory();
try {

if (cf instanceof ActiveMQConnectionFactory && registry != null) {
registry.register(XARecoveryConfig.newConfig((ActiveMQConnectionFactory) cf, username, password, null));
}
Object cf = cff.createConnectionFactory();

if (qualityOfServiceMode == QualityOfServiceMode.ONCE_AND_ONLY_ONCE && !(cf instanceof XAConnectionFactory)) {
throw new IllegalArgumentException("Connection factory must be XAConnectionFactory");
}
if (cf instanceof ActiveMQConnectionFactory && registry != null) {
registry.register(XARecoveryConfig.newConfig((ActiveMQConnectionFactory) cf, username, password, null));
}

if (username == null) {
if (isXA) {
if (JMSBridgeImpl.trace) {
ActiveMQJMSBridgeLogger.LOGGER.trace("Creating an XA connection");
}
conn = ((XAConnectionFactory) cf).createXAConnection();
} else {
if (JMSBridgeImpl.trace) {
ActiveMQJMSBridgeLogger.LOGGER.trace("Creating a non XA connection");
}
conn = ((ConnectionFactory) cf).createConnection();
if (qualityOfServiceMode == QualityOfServiceMode.ONCE_AND_ONLY_ONCE && !(cf instanceof XAConnectionFactory)) {
throw new IllegalArgumentException("Connection factory must be XAConnectionFactory");
}
} else {
if (isXA) {
if (JMSBridgeImpl.trace) {
ActiveMQJMSBridgeLogger.LOGGER.trace("Creating an XA connection");

if (username == null) {
if (isXA) {
if (JMSBridgeImpl.trace) {
ActiveMQJMSBridgeLogger.LOGGER.trace("Creating an XA connection");
}
conn = ((XAConnectionFactory) cf).createXAConnection();
} else {
if (JMSBridgeImpl.trace) {
ActiveMQJMSBridgeLogger.LOGGER.trace("Creating a non XA connection");
}
conn = ((ConnectionFactory) cf).createConnection();
}
conn = ((XAConnectionFactory) cf).createXAConnection(username, password);
} else {
if (JMSBridgeImpl.trace) {
ActiveMQJMSBridgeLogger.LOGGER.trace("Creating a non XA connection");
if (isXA) {
if (JMSBridgeImpl.trace) {
ActiveMQJMSBridgeLogger.LOGGER.trace("Creating an XA connection");
}
conn = ((XAConnectionFactory) cf).createXAConnection(username, password);
} else {
if (JMSBridgeImpl.trace) {
ActiveMQJMSBridgeLogger.LOGGER.trace("Creating a non XA connection");
}
conn = ((ConnectionFactory) cf).createConnection(username, password);
}
conn = ((ConnectionFactory) cf).createConnection(username, password);
}
}

if (clientID != null) {
conn.setClientID(clientID);
}
if (clientID != null) {
conn.setClientID(clientID);
}

boolean ha = false;
BridgeFailoverListener failoverListener = null;
boolean ha = false;
BridgeFailoverListener failoverListener = null;

if (conn instanceof ActiveMQConnection) {
ActiveMQConnectionFactory activeMQCF = (ActiveMQConnectionFactory) cf;
ha = activeMQCF.isHA();
if (conn instanceof ActiveMQConnection) {
ActiveMQConnectionFactory activeMQCF = (ActiveMQConnectionFactory) cf;
ha = activeMQCF.isHA();

if (ha) {
ActiveMQConnection activeMQConn = (ActiveMQConnection) conn;
failoverListener = new BridgeFailoverListener(isSource);
activeMQConn.setFailoverListener(failoverListener);
if (ha) {
ActiveMQConnection activeMQConn = (ActiveMQConnection) conn;
failoverListener = new BridgeFailoverListener(isSource);
activeMQConn.setFailoverListener(failoverListener);
}
}
}

conn.setExceptionListener(new BridgeExceptionListener(ha, failoverListener, isSource));
conn.setExceptionListener(new BridgeExceptionListener(ha, failoverListener, isSource));

return conn;
return conn;
} catch (JMSException e) {
try {
if (conn != null) {
conn.close();
}
} catch (Throwable ignored) {
}
throw e;
}
}

/*
Expand Down

0 comments on commit 3658d62

Please sign in to comment.