# TransactionAwareConnectionProvider.java

    package org.codefilarete.stalactite.sql;

    import java.sql.Connection;

    /**
     * A bridge between a {@link ConnectionProvider} and transaction observers ({@link CommitObserver}, {@link RollbackObserver}) in order
     * to make provided {@link Connection}s observable for transaction commit and rollback.
     *
     * @author Guillaume Mary
     */
    public class TransactionAwareConnectionProvider implements ConnectionProvider, TransactionObserver {

    	private final TransactionAwareConnexionWrapper transactionAwareConnexionWrapper = new TransactionAwareConnexionWrapper();

    	private final ConnectionProvider delegate;

    	public TransactionAwareConnectionProvider(ConnectionProvider connectionProvider) {
    		this.delegate = connectionProvider;
    	}

    	public ConnectionProvider getDelegate() {
    		return delegate;
    	}

    	@Override
    	public Connection giveConnection() {
    		Connection connection = delegate.giveConnection();
    		transactionAwareConnexionWrapper.setDelegate(connection);
    		return transactionAwareConnexionWrapper;
    	}

    	@Override
    	public void addCommitListener(CommitListener commitListener) {
    		this.transactionAwareConnexionWrapper.addCommitListener(commitListener);
    	}

    	@Override
    	public void addRollbackListener(RollbackListener rollbackListener) {
    		this.transactionAwareConnexionWrapper.addRollbackListener(rollbackListener);
    	}
    }