in geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TransactionCachingInterceptor.java [113:147]
public void returnConnection(ConnectionInfo connectionInfo, ConnectionReturnAction connectionReturnAction) {
if (connectionReturnAction == ConnectionReturnAction.DESTROY) {
if (log.isLoggable(Level.FINEST)) {
log.log(Level.FINEST,"destroying connection " + infoString(connectionInfo));
}
next.returnConnection(connectionInfo, connectionReturnAction);
return;
}
Transaction transaction;
try {
transaction = transactionManager.getTransaction();
if (transaction != null) {
if (TxUtil.isActive(transaction)) {
if (log.isLoggable(Level.FINEST)) {
log.log(Level.FINEST,"tx active, not returning connection " + infoString(connectionInfo));
}
return;
}
//We are called from an afterCompletion synchronization. Remove the MCI from the ManagedConnectionInfos
//so we don't close it twice
ManagedConnectionInfos managedConnectionInfos = ConnectorTransactionContext.get(transaction, this);
managedConnectionInfos.remove(connectionInfo.getManagedConnectionInfo());
if (log.isLoggable(Level.FINEST)) {
log.log(Level.FINEST,"tx ended, return during synchronization afterCompletion " + infoString(connectionInfo));
}
}
} catch (SystemException e) {
//ignore
}
if (log.isLoggable(Level.FINEST)) {
log.log(Level.FINEST,"tx ended, returning connection " + infoString(connectionInfo));
}
internalReturn(connectionInfo, connectionReturnAction);
}