protected override void DoSetRollbackOnly(DefaultTransactionStatus status)
 {
     if (status.Debug)
     {
         log.Debug("Setting transaction rollback-only");
     }
     try
     {
         System.Transactions.Transaction.Current.Rollback();
     } catch (Exception ex)
     {
         throw new TransactionSystemException("Failure on System.Transactions.Transaction.Current.Rollback", ex);
     }
 }
Beispiel #2
0
        protected override void DoRollback(DefaultTransactionStatus status)
        {
            PromotableTxScopeTransactionObject txObject =
                (PromotableTxScopeTransactionObject)status.Transaction;

            try
            {
                txObject.TxScopeAdapter.Dispose();
            }
            catch (Exception e)
            {
                throw new TransactionSystemException("Failure on Transaction Scope rollback.", e);
            }
        }
        /// <summary>
        /// Does the tx scope rollback.
        /// </summary>
        /// <param name="status">The status.</param>
        protected void DoTxScopeRollback(DefaultTransactionStatus status)
        {
            TxScopeTransactionManager.PromotableTxScopeTransactionObject txObject =
                ((HibernateTransactionObject)status.Transaction).PromotableTxScopeTransactionObject;

            try
            {
                txObject.TxScopeAdapter.Dispose();
            }
            catch (Exception e)
            {
                throw new Spring.Transaction.TransactionSystemException("Failure on Transaction Scope rollback.", e);
            }
        }
        protected override void DoSetRollbackOnly(DefaultTransactionStatus status)
        {
            ServiceDomainTransactionObject txObject = (ServiceDomainTransactionObject)status.Transaction;

            if (status.Debug)
            {
                log.Debug("Setting transaction rollback-only");
            }
            try
            {
                txObject.ServiceDomainAdapter.MyTransactionVote = TransactionVote.Abort;
            }
            catch (Exception ex)
            {
                throw new TransactionSystemException("Failure on System.Transactions.Transaction.Current.Rollback", ex);
            }
        }
        /// <summary>
        /// Perform an actual rollback on the given transaction, calls Transaction.Abort().
        /// </summary>
        /// <param name="status">The status representation of the transaction.</param>
        /// <remarks>
        /// An implementation does not need to check the new transaction flag.
        /// </remarks>
        protected override void DoRollback(DefaultTransactionStatus status)
        {
            MessageQueueTransactionObject txObject    = (MessageQueueTransactionObject)status.Transaction;
            MessageQueueTransaction       transaction = txObject.ResourceHolder.MessageQueueTransaction;

            try
            {
                if (LOG.IsDebugEnabled)
                {
                    LOG.Debug("Committing MessageQueueTransaction");
                }
                transaction.Abort();
            }
            catch (MessageQueueException ex)
            {
                throw new TransactionSystemException("Could not roll back DefaultMessageQueue transaction", ex);
            }
        }
Beispiel #6
0
        /// <summary>
        /// Perform an actual rollback on the given transaction.
        /// </summary>
        /// <param name="status">The status representation of the transaction.</param>
        /// <exception cref="Spring.Transaction.TransactionException">
        /// In the case of system errors.
        /// </exception>
        protected override void DoRollback(DefaultTransactionStatus status)
        {
            EmsTransactionObject txObject = (EmsTransactionObject)status.Transaction;
            ISession             session  = txObject.ResourceHolder.GetSession();

            try
            {
                if (status.Debug)
                {
                    LOG.Debug("Rolling back EMS transaction on Session [" + session + "]");
                }
                session.Rollback();
            }
            catch (EMSException ex)
            {
                throw new TransactionSystemException("Could not roll back EMS transaction.", ex);
            }
        }
        /// <summary>
        /// Perform an actual rollback on the given transaction.
        /// </summary>
        /// <param name="status">The status representation of the transaction.</param>
        /// <remarks>
        /// An implementation does not need to check the new transaction flag.
        /// </remarks>
        /// <exception cref="Spring.Transaction.TransactionException">
        /// In the case of system errors.
        /// </exception>
        protected override void DoRollback(DefaultTransactionStatus status)
        {
            DbProviderTransactionObject txMgrStateObject =
                (DbProviderTransactionObject)status.Transaction;
            IDbConnection  conn  = txMgrStateObject.ConnectionHolder.Connection;
            IDbTransaction trans = txMgrStateObject.ConnectionHolder.Transaction;

            if (status.Debug)
            {
                log.Debug("Rolling back ADO.NET transaction on Connection [" + conn + ", " + conn.ConnectionString + "]");
            }
            try
            {
                trans.Rollback();
            }
            catch (Exception e)
            {
                throw new TransactionSystemException("Could not rollback ADO.NET transaction", e);
            }
        }
Beispiel #8
0
        /// <summary>
        /// Perform an actual commit on the given transaction.
        /// </summary>
        /// <param name="status">The status representation of the transaction.</param>
        /// <exception cref="Spring.Transaction.TransactionException">
        /// In the case of system errors.
        /// </exception>
        protected override void DoCommit(DefaultTransactionStatus status)
        {
            MessageTransactionObject txObject = (MessageTransactionObject)status.Transaction;
            ISession session = txObject.ResourceHolder.GetSession();

            try
            {
                if (status.Debug)
                {
                    LOG.Debug("Committing NMS transaction on Session [" + session + "]");
                }
                session.Commit();
                //Note that NMS does not have, TransactionRolledBackException
                //See https://issues.apache.org/activemq/browse/AMQNET-93
            }
            catch (NMSException ex)
            {
                throw new TransactionSystemException("Could not commit NMS transaction.", ex);
            }
        }
        protected override void DoRollback(DefaultTransactionStatus status)
        {
            ServiceDomainTransactionObject txObject = (ServiceDomainTransactionObject)status.Transaction;

            if (txObject.ServiceDomainAdapter.IsInTransaction)
            {
                try
                {
                    txObject.ServiceDomainAdapter.SetAbort();
                    txObject.ServiceDomainAdapter.Leave();
                }
                catch (PlatformNotSupportedException ex)
                {
                    throw new TransactionSystemException("Failure on Rollback.  Platform does not support EnterpriseServices 'Services without Components'", ex);
                }
                catch (Exception e)
                {
                    throw new Spring.Transaction.TransactionSystemException("Failure upon Leaving ServiceDomain (for Rollback)", e);
                }
            }
        }
Beispiel #10
0
        /// <summary>
        /// Perform an actual commit on the given transaction.
        /// </summary>
        /// <param name="status">The status representation of the transaction.</param>
        /// <exception cref="Spring.Transaction.TransactionException">
        /// In the case of system errors.
        /// </exception>
        protected override void DoCommit(DefaultTransactionStatus status)
        {
            EmsTransactionObject txObject = (EmsTransactionObject)status.Transaction;
            ISession             session  = txObject.ResourceHolder.GetSession();

            try
            {
                if (status.Debug)
                {
                    LOG.Debug("Committing EMS transaction on Session [" + session + "]");
                }
                session.Commit();
            }
            catch (TransactionRolledBackException ex)
            {
                throw new UnexpectedRollbackException("EMS transaction rolled back", ex);
            }
            catch (EMSException ex)
            {
                throw new TransactionSystemException("Could not commit EMS transaction.", ex);
            }
        }
 /// <summary>
 /// Does the tx scope commit.
 /// </summary>
 /// <param name="status">The status.</param>
 protected void DoTxScopeCommit(DefaultTransactionStatus status)
 {
     TxScopeTransactionManager.PromotableTxScopeTransactionObject txObject =
         ((HibernateTransactionObject)status.Transaction).PromotableTxScopeTransactionObject;
     try
     {
         txObject.TxScopeAdapter.Complete();
         txObject.TxScopeAdapter.Dispose();
     }
     catch (TransactionAbortedException ex)
     {
         throw new UnexpectedRollbackException("Transaction unexpectedly rolled back (maybe due to a timeout)", ex);
     }
     catch (TransactionInDoubtException ex)
     {
         throw new HeuristicCompletionException(TransactionOutcomeState.Unknown, ex);
     }
     catch (Exception ex)
     {
         throw new TransactionSystemException("Failure on Transaction Scope Commit", ex);
     }
 }
        protected override void DoCommit(DefaultTransactionStatus status)
        {
            ServiceDomainTransactionObject txObject = (ServiceDomainTransactionObject)status.Transaction;
            bool globalRollbackOnly = status.GlobalRollbackOnly;

            try
            {
                if (txObject.ServiceDomainAdapter.IsInTransaction)
                {
                    if (txObject.ServiceDomainAdapter.MyTransactionVote == TransactionVote.Commit)
                    {
                        txObject.ServiceDomainAdapter.SetComplete();
                    }
                    else
                    {
                        txObject.ServiceDomainAdapter.SetAbort();
                    }
                }
                TransactionStatus serviceDomainTxstatus = txObject.ServiceDomainAdapter.Leave();
                if (log.IsDebugEnabled)
                {
                    log.Debug("ServiceDomain Transaction Status upon leaving ServiceDomain = " + serviceDomainTxstatus);
                }
                txObject.TransactionStatus = serviceDomainTxstatus;
                if (!globalRollbackOnly && serviceDomainTxstatus == TransactionStatus.Aborted)
                {
                    throw new UnexpectedRollbackException("Transaction unexpectedly rolled-back (maybe due to a timeout)");
                }
            }
            catch (PlatformNotSupportedException ex)
            {
                throw new TransactionSystemException("Failure on Commit.  Platform does not support EnterpriseServices 'Services without Components'", ex);
            }
            catch (Exception e)
            {
                throw new TransactionSystemException("Failure upon Leaving ServiceDomain (for Commit)", e);
            }
        }
Beispiel #13
0
        /// <summary>
        /// Perform an actual rollback on the given transaction.
        /// </summary>
        /// <param name="status">The status representation of the transaction.</param>
        /// <remarks>
        /// An implementation does not need to check the new transaction flag.
        /// </remarks>
        /// <exception cref="Spring.Transaction.TransactionException">
        /// In the case of system errors.
        /// </exception>
        protected override void DoRollback(DefaultTransactionStatus status)
        {
            HibernateTransactionObject txObject = (HibernateTransactionObject)status.Transaction;

            if (status.Debug)
            {
                log.Debug("Rolling back Hibernate transaction on Session [" +
                          txObject.SessionHolder.Session + "]");
            }
            try
            {
                IDbTransaction adoTx = GetIDbTransaction(txObject.SessionHolder.Transaction);

                if (adoTx != null && adoTx.Connection != null)
                {
                    txObject.SessionHolder.Transaction.Rollback();
                }
            }
            catch (HibernateTransactionException ex)
            {
                throw new TransactionSystemException("Could not roll back Hibernate transaction", ex);
            }
            catch (HibernateException ex)
            {
                // Shouldn't really happen, as a rollback doesn't cause a flush.
                throw ConvertHibernateAccessException(ex);
            }
            finally
            {
                if (!txObject.NewSessionHolder)
                {
                    // Clear all pending inserts/updates/deletes in the Session.
                    // Necessary for pre-bound Sessions, to avoid inconsistent state.
                    txObject.SessionHolder.Session.Clear();
                }
            }
        }
        /// <summary>
        /// Perform an actual commit on the given transaction.
        /// </summary>
        /// <param name="status">The status representation of the transaction.</param>
        /// <remarks>
        /// <p>
        /// An implementation does not need to check the rollback-only flag.
        /// </p>
        /// </remarks>
        /// <exception cref="Spring.Transaction.TransactionException">
        /// In the case of system errors.
        /// </exception>
        protected override void DoCommit(DefaultTransactionStatus status)
        {
            HibernateTransactionObject txObject = (HibernateTransactionObject)status.Transaction;

            if (status.Debug)
            {
                log.Debug("Committing Hibernate transaction on Session [" +
                          txObject.SessionHolder.Session + "]");
            }
            try
            {
                txObject.SessionHolder.Transaction.Commit();
            }
            // Note, unfortunate collision of namespaces/classname for NHibernate.TransactionException
            // and Spring.Data.NHibernate requires this wierd construct.
            catch (Exception ex)
            {
                Type nhibTxExceptiontype = TypeResolutionUtils.ResolveType("NHibernate.TransactionException, NHibernate");
                if (ex.GetType().Equals(nhibTxExceptiontype))
                {
                    // assumably from commit call to the underlying ADO.NET connection
                    throw new TransactionSystemException("Could not commit Hibernate transaction", ex);
                }
                HibernateException hibEx = ex as HibernateException;
                if (hibEx != null)
                {
                    // assumably failed to flush changes to database
                    throw ConvertHibernateAccessException(hibEx);
                }
                throw;
            }
            finally
            {
                DoTxScopeCommit(status);
            }
        }
Beispiel #15
0
        /// <summary>
        /// Set the given transaction rollback-only. Only called on rollback
        /// if the current transaction takes part in an existing one.
        /// </summary>
        /// <param name="status">The status representation of the transaction.</param>
        /// <exception cref="Spring.Transaction.TransactionException">
        /// In the case of system errors.
        /// </exception>
        protected override void DoSetRollbackOnly(DefaultTransactionStatus status)
        {
            EmsTransactionObject txObject = (EmsTransactionObject)status.Transaction;

            txObject.ResourceHolder.RollbackOnly = true;
        }
Beispiel #16
0
 protected override void DoRollback(DefaultTransactionStatus status)
 {
     ++rollbacks;
     --inflight;
 }
Beispiel #17
0
 /// <summary>The do rollback.</summary>
 /// <param name="status">The status.</param>
 protected override void DoRollback(DefaultTransactionStatus status)
 {
     this.log.Debug("Rolling back resourceless transaction on [" + status.Transaction + "]");
 }
Beispiel #18
0
 /// <summary>The do commit.</summary>
 /// <param name="status">The status.</param>
 protected override void DoCommit(DefaultTransactionStatus status)
 {
     this.log.Debug("Committing resourceless transaction on [" + status.Transaction + "]");
 }
 /// <summary>The do commit.</summary>
 /// <param name="status">The status.</param>
 protected override void DoCommit(DefaultTransactionStatus status)
 {
 }
 /// <summary>The do rollback.</summary>
 /// <param name="status">The status.</param>
 protected override void DoRollback(DefaultTransactionStatus status)
 {
 }
Beispiel #21
0
 protected override void DoCommit(DefaultTransactionStatus status)
 {
     _committed = true;
     _latch.Signal();
 }
Beispiel #22
0
 protected override void DoSetRollbackOnly(DefaultTransactionStatus status)
 {
 }
Beispiel #23
0
 protected override void DoRollback(DefaultTransactionStatus status)
 {
     _rolledBack = true;
     _latch.Signal();
 }
 protected override void DoCommit(DefaultTransactionStatus status)
 {
     this.sqlMapper.CommitTransaction();
 }
 protected override void DoRollback(DefaultTransactionStatus status)
 {
     this.sqlMapper.RollBackTransaction();
 }
Beispiel #26
0
 protected override void DoCommit(DefaultTransactionStatus status)
 {
     ++commits;
     --inflight;
 }
Beispiel #27
0
 protected override void DoRollback(DefaultTransactionStatus status)
 {
     base.log.Debug("回滚事务");
     this.sqlMap.RollBackTransaction();
 }
        /// <summary>
        /// Perform an actual rollback on the given transaction.
        /// </summary>
        /// <param name="status">The status representation of the transaction.</param>
        /// <remarks>
        /// An implementation does not need to check the new transaction flag.
        /// </remarks>
        /// <exception cref="Spring.Transaction.TransactionException">
        /// In the case of system errors.
        /// </exception>
        protected override void DoRollback(DefaultTransactionStatus status)
        {
            HibernateTransactionObject txObject = (HibernateTransactionObject)status.Transaction;

            if (!txObject.NewSessionHolder)
            {
                // Clear all pending inserts/updates/deletes in the Session.
                // Necessary for pre-bound Sessions, to avoid inconsistent state.
                txObject.SessionHolder.Session.Clear();
            }

            DoTxScopeRollback(status);
            return;


/*            HibernateTransactionObject txObject = (HibernateTransactionObject)status.Transaction;
 *
 *          if (status.Debug)
 *          {
 *              log.Debug("Rolling back Hibernate transaction on Session [" +
 *                  txObject.SessionHolder.Session + "]");
 *          }
 *          try
 *          {
 *              if (txObject.SessionHolder.Session != null && txObject.SessionHolder.Transaction != null && !txObject.SessionHolder.Transaction.IsActive)
 *              {
 *                  return;
 *              }
 *
 *              IDbTransaction adoTx = GetIDbTransaction(txObject.SessionHolder.Transaction);
 *
 *              if (adoTx != null && adoTx.Connection != null)
 *              {
 *                  txObject.SessionHolder.Transaction.Rollback();
 *              }
 *              else
 *              {
 *                  if (status.Debug)
 *                  {
 *                      log.Debug("Unable to RollBack Hibernate transaction; connection for Hibernate transaction on Session [" +
 *                          txObject.SessionHolder.Session + "] was null");
 *                  }
 *              }
 *
 *          }
 *          catch (HibernateTransactionException ex)
 *          {
 *              throw new TransactionSystemException("Could not roll back Hibernate transaction", ex);
 *          }
 *          catch (HibernateException ex)
 *          {
 *              // Shouldn't really happen, as a rollback doesn't cause a flush.
 *              throw ConvertHibernateAccessException(ex);
 *          }
 *          finally
 *          {
 *              if (!txObject.NewSessionHolder)
 *              {
 *                  // Clear all pending inserts/updates/deletes in the Session.
 *                  // Necessary for pre-bound Sessions, to avoid inconsistent state.
 *                  txObject.SessionHolder.Session.Clear();
 *              }
 *              DoTxScopeRollback(status);
 *          }*/
        }
Beispiel #29
0
 protected override void DoCommit(DefaultTransactionStatus status)
 {
     base.log.Debug("提交事务");
     this.sqlMap.CommitTransaction();
 }