public Task Store(OutboxMessage message, OutboxTransaction transaction, ContextBag context)
        {
            var typedTransaction = (EventStoreOutboxTransaction)transaction;

            typedTransaction.Persist(message);
            return(Task.FromResult(0));
        }
        public Task Store(OutboxMessage message, OutboxTransaction transaction, ContextBag context)
        {
            var session = ((MartenOutboxTransaction)transaction).Session;

            var operations = new OutboxRecord.OutboxOperation[message.TransportOperations.Length];

            var index = 0;

            foreach (var transportOperation in message.TransportOperations)
            {
                operations[index] = new OutboxRecord.OutboxOperation
                {
                    Message   = transportOperation.Body,
                    Headers   = transportOperation.Headers,
                    MessageId = transportOperation.MessageId,
                    Options   = transportOperation.Options
                };
                index++;
            }

            session.Store(new OutboxRecord
            {
                Id                  = GetOutboxRecordId(message.MessageId),
                MessageId           = message.MessageId,
                Dispatched          = false,
                TransportOperations = operations
            });

            return(Task.FromResult(0));
        }
        public Task Store(OutboxMessage message, OutboxTransaction transaction, ContextBag context)
        {
            StupidTransaction tx = (StupidTransaction)transaction;

            tx.Message = message;
            return(Task.FromResult(0));
        }
示例#4
0
        public Task Store(OutboxMessage message, OutboxTransaction transaction, ContextBag context)
        {
            var session = ((RavenDBOutboxTransaction)transaction).AsyncSession;

            var operations = new OutboxRecord.OutboxOperation[message.TransportOperations.Length];

            var index = 0;

            foreach (var transportOperation in message.TransportOperations)
            {
                operations[index] = new OutboxRecord.OutboxOperation
                {
                    Message   = transportOperation.Body,
                    Headers   = transportOperation.Headers,
                    MessageId = transportOperation.MessageId,
                    Options   = transportOperation.Options
                };
                index++;
            }

            return(session.StoreAsync(new OutboxRecord
            {
                MessageId = message.MessageId,
                Dispatched = false,
                TransportOperations = operations
            }, GetOutboxRecordId(message.MessageId)));
        }
        public Task Store(OutboxMessage message, OutboxTransaction transaction, ContextBag context)
        {
            var session = ((RavenDBOutboxTransaction)transaction).AsyncSession;

            var operations = new OutboxRecord.OutboxOperation[message.TransportOperations.Length];

            var index = 0;
            foreach (var transportOperation in message.TransportOperations)
            {
                operations[index] = new OutboxRecord.OutboxOperation
                {
                    Message = transportOperation.Body,
                    Headers = transportOperation.Headers,
                    MessageId = transportOperation.MessageId,
                    Options = transportOperation.Options
                };
                index++;
            }

            return session.StoreAsync(new OutboxRecord
            {
                MessageId = message.MessageId,
                Dispatched = false,
                TransportOperations = operations
            }, GetOutboxRecordId(message.MessageId));
        }
    public Task Store(OutboxMessage message, OutboxTransaction outboxTransaction, ContextBag context)
    {
        var sqlOutboxTransaction = (SqlOutboxTransaction)outboxTransaction;
        var transaction          = sqlOutboxTransaction.Transaction;
        var connection           = sqlOutboxTransaction.Connection;

        return(Store(message, transaction, connection));
    }
示例#7
0
        public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
        {
            var typedTransaction = transaction as EventStoreOutboxTransaction;

            return(typedTransaction != null
                ? Task.FromResult <CompletableSynchronizedStorageSession>(new OutboxEventStoreSynchronizedStorageSession(typedTransaction.Connection, typedTransaction))
                : EmptyResult);
        }
 public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
 {
     if (transaction is AcceptanceTestingOutboxTransaction inMemOutboxTransaction)
     {
         CompletableSynchronizedStorageSession session = new AcceptanceTestingSynchronizedStorageSession(inMemOutboxTransaction.Transaction);
         return(Task.FromResult(session));
     }
     return(EmptyTask);
 }
 public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context, CancellationToken cancellationToken = default)
 {
     if (transaction is FakeOutboxTransaction inMemOutboxTransaction)
     {
         CompletableSynchronizedStorageSession session = new FakeSynchronizedStorageSession(inMemOutboxTransaction.Transaction);
         return(Task.FromResult(session));
     }
     return(EmptyTask);
 }
 public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
 {
     //var outboxTransaction = transaction as SqlOutboxTransaction;
     //if (outboxTransaction != null)
     //{
     //    CompletableSynchronizedStorageSession session = new StorageSession(outboxTransaction.SqlConnection, outboxTransaction.SqlTransaction, false);
     //    return Task.FromResult(session);
     //}
     return(EmptyResult);
 }
 public Task<CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
 {
     var inMemOutboxTransaction = transaction as InMemoryOutboxTransaction;
     if (inMemOutboxTransaction != null)
     {
         CompletableSynchronizedStorageSession session = new InMemorySynchronizedStorageSession(inMemOutboxTransaction.Transaction);
         return Task.FromResult(session);
     }
     return EmptyTask;
 }
示例#12
0
        public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
        {
            if (transaction is RavenDBOutboxTransaction outboxTransaction)
            {
                return(Task.FromResult <CompletableSynchronizedStorageSession>(
                           new RavenDBSynchronizedStorageSession(outboxTransaction.AsyncSession, false)));
            }

            return(EmptyResult);
        }
    public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
    {
        if (!(transaction is SqlOutboxTransaction outboxTransaction))
        {
            return(EmptyResultTask);
        }
        CompletableSynchronizedStorageSession session = new StorageSession(outboxTransaction.Connection, outboxTransaction.Transaction, false, infoCache);

        return(Task.FromResult(session));
    }
 public Task<CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
 {
     var outboxTransaction = transaction as SqlOutboxTransaction;
     if (outboxTransaction != null)
     {
         CompletableSynchronizedStorageSession session = new StorageSession(outboxTransaction.Connection, outboxTransaction.Transaction, false);
         return Task.FromResult(session);
     }
     return EmptyResult;
 }
 public Task<CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
 {
     var ravenTransaction = transaction as RavenDBOutboxTransaction;
     if (ravenTransaction != null)
     {
         CompletableSynchronizedStorageSession session = new RavenDBSynchronizedStorageSession(ravenTransaction.AsyncSession, false);
         return Task.FromResult(session);
     }
     return EmptyResult;
 }
示例#16
0
        public OutboxTestsFixture()
        {
            Now               = DateTime.UtcNow;
            Connection        = new Mock <DbConnection>();
            UnitOfWorkContext = new Mock <IUnitOfWorkContext>();
            Settings          = new Mock <ReadOnlySettings>();
            Transaction       = new Mock <DbTransaction> {
                CallBase = true
            };
            Command           = new Mock <DbCommand>();
            Parameters        = new Mock <DbParameterCollection>();
            OutboxTransaction = new OutboxTransaction(Transaction.Object);
            EndpointName      = "SFA.DAS.NServiceBus";

            Events = new List <Event>
            {
                new FooEvent {
                    Created = Now.AddDays(-1)
                },
                new BarEvent {
                    Created = Now
                }
            };

            EventsData = JsonConvert.SerializeObject(Events, new JsonSerializerSettings {
                TypeNameHandling = TypeNameHandling.Auto
            });
            OutboxMessage  = new OutboxMessage(GuidComb.NewGuidComb(), EndpointName, Events);
            OutboxMessages = new List <IOutboxMessageAwaitingDispatch>();

            Parameters.Setup(p => p.Add(It.IsAny <DbParameter>()));
            Command.SetupSet(c => c.CommandText = It.IsAny <string>());
            Command.SetupSet(c => c.Transaction = It.IsAny <DbTransaction>());

            Command.Protected().Setup <DbParameter>("CreateDbParameter").Returns(() =>
            {
                var parameter = new Mock <DbParameter> {
                    CallBase = true
                };

                parameter.SetupProperty(p => p.ParameterName);
                parameter.SetupProperty(p => p.Value);

                return(parameter.Object);
            });

            Command.Protected().Setup <DbParameterCollection>("DbParameterCollection").Returns(Parameters.Object);
            Connection.Protected().Setup <DbTransaction>("BeginDbTransaction", IsolationLevel.Unspecified).Returns(Transaction.Object);
            Connection.Protected().Setup <DbCommand>("CreateDbCommand").Returns(Command.Object);
            UnitOfWorkContext.Setup(c => c.Get <DbConnection>()).Returns(Connection.Object);
            UnitOfWorkContext.Setup(c => c.Get <DbTransaction>()).Returns(Transaction.Object);
            Settings.Setup(s => s.Get <string>("NServiceBus.Routing.EndpointName")).Returns(EndpointName);

            Outbox = new Outbox(Connection.Object, UnitOfWorkContext.Object);
        }
示例#17
0
        public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
        {
            var nhibernateTransaction = transaction as NHibernateOutboxTransaction;

            if (nhibernateTransaction != null)
            {
                CompletableSynchronizedStorageSession session = new NHibernateNativeTransactionSynchronizedStorageSession(nhibernateTransaction.Session, nhibernateTransaction.Transaction);
                return(Task.FromResult(session));
            }
            return(EmptyResult);
        }
        public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
        {
            var ravenTransaction = transaction as RavenDBOutboxTransaction;

            if (ravenTransaction != null)
            {
                CompletableSynchronizedStorageSession session = new RavenDBSynchronizedStorageSession(ravenTransaction.AsyncSession, false);
                return(Task.FromResult(session));
            }
            return(EmptyResult);
        }
示例#19
0
        public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
        {
            var inMemOutboxTransaction = transaction as InMemoryOutboxTransaction;

            if (inMemOutboxTransaction != null)
            {
                CompletableSynchronizedStorageSession session = new InMemorySynchronizedStorageSession(inMemOutboxTransaction.Transaction);
                return(Task.FromResult(session));
            }
            return(EmptyTask);
        }
        public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context, CancellationToken cancellationToken = default)
        {
            if (transaction is RavenDBOutboxTransaction outboxTransaction)
            {
                sessionHolder?.SetCurrentSession(outboxTransaction.AsyncSession);
                return(Task.FromResult <CompletableSynchronizedStorageSession>(
                           new RavenDBSynchronizedStorageSession(outboxTransaction.AsyncSession, context, false)));
            }

            return(EmptyResult);
        }
示例#21
0
        public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
        {
            var outboxTransaction = transaction as ServiceFabricOutboxTransaction;

            if (outboxTransaction != null)
            {
                // this session will not own the transaction, the outbox part owns the transaction
                CompletableSynchronizedStorageSession session = new StorageSession(outboxTransaction.Transaction);
                return(Task.FromResult(session));
            }
            return(EmptyTask);
        }
        public UnitOfWorkManagerTestsFixture SetupCommitTransactionBeforeSendingProcessOutboxMessageCommand()
        {
            OutboxTransaction.Setup(t => t.CommitAsync()).Callback(() =>
            {
                if (MessageSession.SentMessages.Any())
                {
                    throw new Exception("Commit called too early");
                }
            });

            return(this);
        }
    public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context, CancellationToken cancellationToken = default)
    {
        if (!(transaction is ISqlOutboxTransaction outboxTransaction))
        {
            return(EmptyResultTask);
        }
        var session = new StorageSession(outboxTransaction.Connection, outboxTransaction.Transaction, false, infoCache);

        currentSessionHolder?.SetCurrentSession(session);

        return(Task.FromResult <CompletableSynchronizedStorageSession>(session));
    }
示例#24
0
        public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
        {
            var martenTransaction = transaction as MartenOutboxTransaction;

            if (martenTransaction != null)
            {
                CompletableSynchronizedStorageSession session = new MartenSynchronizedStorageSession(martenTransaction.Session, false);
                return(Task.FromResult(session));
            }

            return(EmptyResult);
        }
 public Task Store(OutboxMessage message, OutboxTransaction transaction, ContextBag context)
 {
     var tx = (InMemoryOutboxTransaction) transaction;
     tx.Enlist(() =>
     {
         if (!storage.TryAdd(message.MessageId, new StoredMessage(message.MessageId, message.TransportOperations)))
         {
             throw new Exception($"Outbox message with id '{message.MessageId}' is already present in storage.");
         }
     });
     return TaskEx.CompletedTask;
 }
示例#26
0
        public Task Store(OutboxMessage message, OutboxTransaction transaction, ContextBag context)
        {
            var tx = (InMemoryOutboxTransaction)transaction;

            tx.Enlist(() =>
            {
                if (!storage.TryAdd(message.MessageId, new StoredMessage(message.MessageId, message.TransportOperations)))
                {
                    throw new Exception($"Outbox message with id '{message.MessageId}' is already present in storage.");
                }
            });
            return(TaskEx.CompletedTask);
        }
        public Task Store(OutboxMessage message, OutboxTransaction transaction, ContextBag context, CancellationToken cancellationToken = default)
        {
            var tx = (AcceptanceTestingOutboxTransaction)transaction;

            tx.Enlist(() =>
            {
                if (!storage.TryAdd(message.MessageId, new StoredMessage(message.MessageId, message.TransportOperations)))
                {
                    throw new Exception($"Outbox message with id '{message.MessageId}' is already present in storage.");
                }
            });
            return(Task.CompletedTask);
        }
        public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
        {
            var nhibernateTransaction = transaction as NHibernateOutboxTransaction;

            if (nhibernateTransaction != null)
            {
                if (Transaction.Current != null)
                {
                    Log.Warn("The endpoint is configured to use Outbox but a TransactionScope has been detected. Outbox mode is not compatible with "
                             + "TransactionScope. Do not use config.UnitOfWork().WrapHandlersInATransactionScope() when Outbox is enabled.");
                }

                CompletableSynchronizedStorageSession session = new NHibernateOutboxTransactionSynchronizedStorageSession(nhibernateTransaction);
                return(Task.FromResult(session));
            }
            return(EmptyResult);
        }
示例#29
0
        public async Task Store(OutboxMessage message, OutboxTransaction transaction, ContextBag context)
        {
            var operations = new StoredTransportOperation[message.TransportOperations.Length];

            for (var i = 0; i < message.TransportOperations.Length; i++)
            {
                var t = message.TransportOperations[i];
                operations[i] = new StoredTransportOperation(t.MessageId, t.Options, t.Body, t.Headers);
            }

            var tx = ((ServiceFabricOutboxTransaction)transaction).Transaction.NativeTransaction;

            if (!await Outbox.TryAddAsync(tx, message.MessageId, new StoredOutboxMessage(message.MessageId, operations)).ConfigureAwait(false))
            {
                throw new Exception($"Outbox message with id '{message.MessageId}' is already present in storage.");
            }
        }
示例#30
0
        public Task Store(OutboxMessage outboxMessage, OutboxTransaction transaction, ContextBag context)
        {
            var operations = outboxMessage.TransportOperations.Select(t => new OutboxOperation
            {
                Message   = t.Body,
                Headers   = t.Headers,
                MessageId = t.MessageId,
                Options   = t.Options,
            });
            var nhibernateTransaction = (NHibernateOutboxTransaction)transaction;

            nhibernateTransaction.Session.Save(new OutboxRecord
            {
                MessageId           = EndpointQualifiedMessageId(outboxMessage.MessageId),
                Dispatched          = false,
                TransportOperations = ConvertObjectToString(operations)
            });
            return(Task.FromResult(0));
        }
 public Task Store(OutboxMessage message, OutboxTransaction outboxTransaction, ContextBag context)
 {
     var sqlOutboxTransaction = (SqlOutboxTransaction) outboxTransaction;
     var transaction = sqlOutboxTransaction.Transaction;
     var connection = sqlOutboxTransaction.Connection;
     return Store(message, transaction, connection);
 }
 public Task Store(OutboxMessage message, OutboxTransaction transaction, ContextBag context)
 {
     testContext.NumberOfOps += message.TransportOperations.Length;
     return(Task.FromResult(0));
 }
示例#33
0
 public Task<CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
 {
     return EmptyResult;
 }
示例#34
0
 public Task Store(OutboxMessage message, OutboxTransaction transaction, ContextBag options)
 {
     return TaskEx.CompletedTask;
 }
 public Task Store(OutboxMessage message, OutboxTransaction outboxTransaction, ContextBag context, CancellationToken cancellationToken = default) =>
 ((ISqlOutboxTransaction)outboxTransaction).Complete(message, context, cancellationToken);
示例#36
0
 public Task Store(OutboxMessage message, OutboxTransaction transaction, ContextBag options)
 {
     return(TaskEx.CompletedTask);
 }
示例#37
0
 public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context)
 {
     return(EmptyResult);
 }
示例#38
0
 public Task <CompletableSynchronizedStorageSession> TryAdapt(OutboxTransaction transaction, ContextBag context, CancellationToken cancellationToken = default)
 {
     return(Task.FromResult <CompletableSynchronizedStorageSession>(null));
 }