/*
   * @seeorg.springframework.jdbc.datasource.DataSourceTransactionManager#
   * doCleanupAfterCompletion(java.lang.Object)
   */
  public void doCleanupAfterCompletion(Object transaction) {
    log.debug("Cleaning stored transaction synchronization");
    TransactionSynchronizationManager.unbindResource(getTransactionSynchronizationKey());

    CompensatingTransactionObject txObject = (CompensatingTransactionObject) transaction;
    CompensatingTransactionHolderSupport transactionHolderSupport = txObject.getHolder();

    closeTargetResource(transactionHolderSupport);

    txObject.getHolder().clear();
  }
  /*
   * @see
   * org.springframework.jdbc.datasource.DataSourceTransactionManager#doBegin
   * (java.lang.Object, org.springframework.transaction.TransactionDefinition)
   */
  public void doBegin(Object transaction, TransactionDefinition definition)
      throws TransactionException {
    try {
      CompensatingTransactionObject txObject = (CompensatingTransactionObject) transaction;
      if (txObject.getHolder() == null) {
        CompensatingTransactionHolderSupport contextHolder = getNewHolder();
        txObject.setHolder(contextHolder);

        TransactionSynchronizationManager.bindResource(
            getTransactionSynchronizationKey(), contextHolder);
      }
    } catch (Exception e) {
      throw new CannotCreateTransactionException(
          "Could not create DirContext instance for transaction", e);
    }
  }
 /*
  * @see
  * org.springframework.jdbc.datasource.DataSourceTransactionManager#doCommit
  * (org.springframework.transaction.support.DefaultTransactionStatus)
  */
 public void doCommit(DefaultTransactionStatus status) throws TransactionException {
   CompensatingTransactionObject txObject =
       (CompensatingTransactionObject) status.getTransaction();
   txObject.getHolder().getTransactionOperationManager().commit();
 }