public void returnConnection()

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);
    }