Apache.NMS.ActiveMQ.TransactionContext.Begin C# (CSharp) Method

Begin() public method

public Begin ( Transaction transaction ) : void
transaction Transaction
return void
        public void Begin(Transaction transaction)
        {
            Tracer.Debug("Begin notification received");

            if(InNetTransaction)
            {
                throw new TransactionInProgressException("A Transaction is already in Progress");
            }

            Guid rmId = ResourceManagerGuid;

            // Enlist this object in the transaction.
            this.currentEnlistment =
                transaction.EnlistDurable(rmId, this, EnlistmentOptions.None);

            Tracer.Debug("Enlisted in Durable Transaction with RM Id: " + rmId);

            TransactionInformation txInfo = transaction.TransactionInformation;

            XATransactionId xaId = new XATransactionId();
            this.transactionId = xaId;

            if(txInfo.DistributedIdentifier != Guid.Empty)
            {
                xaId.GlobalTransactionId = txInfo.DistributedIdentifier.ToByteArray();
                xaId.BranchQualifier = Encoding.UTF8.GetBytes(Guid.NewGuid().ToString());
            }
            else
            {
                xaId.GlobalTransactionId = Encoding.UTF8.GetBytes(txInfo.LocalIdentifier);
                xaId.BranchQualifier = Encoding.UTF8.GetBytes(Guid.NewGuid().ToString());
            }

            // Now notify the broker that a new XA'ish transaction has started.
            TransactionInfo info = new TransactionInfo();
            info.ConnectionId = this.connection.ConnectionId;
            info.TransactionId = this.transactionId;
            info.Type = (int) TransactionType.Begin;

            this.session.Connection.Oneway(info);

            if(Tracer.IsDebugEnabled)
            {
                Tracer.Debug("Began XA'ish Transaction:" + xaId.GlobalTransactionId.ToString());
            }
        }

Same methods

TransactionContext::Begin ( ) : void

Usage Example

Example #1
0
        internal override void DoStartTransaction()
        {
            if (!TransactionContext.InNetTransaction)
            {
                if (Transaction.Current != null)
                {
                    Tracer.Debug("NetTxSession detected Ambient Transaction, start new TX with broker");

                    // Start a new .NET style transaction, this could be distributed
                    // or it could just be a Local transaction that could become
                    // distributed later.
                    TransactionContext.Begin(Transaction.Current);
                }
            }
        }
All Usage Examples Of Apache.NMS.ActiveMQ.TransactionContext::Begin