{
final boolean topic = connector.getTopicResolver().isTopic(endpoint);
JmsSupport support = connector.getJmsSupport();
final TransactionConfig transactionConfig = endpoint.getTransactionConfig();
final Transaction tx = TransactionCoordination.getInstance().getTransaction();
boolean transacted = transactionConfig != null && transactionConfig.isTransacted();
session = connector.getSession(transacted, topic);
if (transacted && !tx.isXA())
{
// register a session close listener
final Session finalSession = session;
getConnector().getMuleContext().registerListener(new TransactionNotificationListener<TransactionNotification>()
{
public void onNotification(TransactionNotification txNotification)
{
final int txAction = txNotification.getAction();
final String txId = txNotification.getTransactionStringId();
if ((txAction == TransactionNotification.TRANSACTION_COMMITTED || txAction == TransactionNotification.TRANSACTION_ROLLEDBACK) &&
txId.equals(tx.getId())) {
connector.closeQuietly(finalSession);
}
}
}, tx.getId());
cleanupListenerRegistered = true;
}
Destination dest = support.createDestination(session, endpoint);