Example #1
0
        private void AddOperation(IOperation operation)
        {
            var transation = Transaction.Current;

            if ((transation != null) && (transation.TransactionInformation.Status == TransactionStatus.Active))
            {
                Journal journal;
                lock (_lock)
                {
                    var id = transation.TransactionInformation.LocalIdentifier;
                    if (!_journals.ContainsKey(id))
                    {
                        journal = _journals.AddAndReturn(new KeyValuePair <string, Journal>(id, new Journal(this)))
                                  .Value;
                        transation.EnlistVolatile(journal, EnlistmentOptions.None);
                    }
                    else
                    {
                        journal = _journals[id];
                    }
                }

                journal.Add(operation);
                return;
            }

            operation.Commit();
        }
        private static void EnlistOperation( IOperation operation )
        {
            if( enlistment == null && Transaction.Current != null )
            {
                enlistment = new TxfmEnlistment();
                Transaction.Current.EnlistDurable( resourceManagerId, enlistment, EnlistmentOptions.None );
            }

            operation.Execute();

            if( enlistment == null )
            {
                // Not in a transaction.
                operation.Commit();
            }
            else
            {
                enlistment.AddOperation( operation );
            }
        }
Example #3
0
 public void Add(IOperation operation)
 {
     operation.Commit();
     _operations.Add(operation);
 }