public void TestTransactedProduceAndConsume( [Values("tcp://${activemqhost}:61616")] string baseConnectionURI) { INetTxConnectionFactory factory = new NetTxConnectionFactory(NMSTestSupport.ReplaceEnvVar(baseConnectionURI)); using (INetTxConnection connection = factory.CreateNetTxConnection()) { connection.Start(); using (INetTxSession session = connection.CreateNetTxSession()) { IDestination destination = session.CreateTemporaryQueue(); using (IMessageProducer producer = session.CreateProducer(destination)) { using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew, TransactionScopeAsyncFlowOption.Enabled)) { Assert.IsNotNull(Transaction.Current); for (int i = 0; i < MSG_COUNT; ++i) { producer.Send(session.CreateTextMessage("Hello World")); } scoped.Complete(); } } using (IMessageConsumer consumer = session.CreateConsumer(destination)) { Thread.Sleep(100); using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew, TransactionScopeAsyncFlowOption.Enabled)) { for (int i = 0; i < MSG_COUNT; ++i) { IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(2000)); Assert.IsNotNull(msg, "Message was null for index: " + i); } scoped.Complete(); } } // No more messages should be in the Q, non rolled back or otherwise. using (IMessageConsumer consumer = session.CreateConsumer(destination)) { Thread.Sleep(100); IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(2000)); Assert.IsNull(msg, "Message was not null."); } session.Close(); } connection.Close(); } }
public void TestTransactedProduceConsumeWithSessionClose( [Values("tcp://${activemqhost}:61616")] string baseConnectionURI) { INetTxConnectionFactory factory = new NetTxConnectionFactory(NMSTestSupport.ReplaceEnvVar(baseConnectionURI)); using (INetTxConnection connection = factory.CreateNetTxConnection()) { connection.Start(); IDestination destination = null; using (INetTxSession session = connection.CreateNetTxSession()) { session.TransactionStartedListener += TransactionStarted; session.TransactionCommittedListener += TransactionCommitted; session.TransactionRolledBackListener += TransactionRolledBack; destination = session.CreateTemporaryQueue(); using (IMessageProducer producer = session.CreateProducer(destination)) { using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew, TransactionScopeAsyncFlowOption.Enabled)) { Assert.IsFalse(this.transactionStarted); Assert.IsNotNull(Transaction.Current); for (int i = 0; i < MSG_COUNT; ++i) { producer.Send(session.CreateTextMessage("Hello World")); } Assert.IsTrue(this.transactionStarted, "A TX should have been started by producing"); scoped.Complete(); } Assert.IsFalse(this.transactionStarted, "TX Should have Committed and cleared Started"); Assert.IsTrue(this.transactionCommitted, "TX Should have Committed"); Assert.IsFalse(this.transactionRolledBack, "TX Should not have Rolledback"); session.Close(); } } using (INetTxSession session = connection.CreateNetTxSession()) { session.TransactionStartedListener += TransactionStarted; session.TransactionCommittedListener += TransactionCommitted; session.TransactionRolledBackListener += TransactionRolledBack; using (IMessageConsumer consumer = session.CreateConsumer(destination)) { using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew, TransactionScopeAsyncFlowOption.Enabled)) { Assert.IsFalse(this.transactionStarted); for (int i = 0; i < MSG_COUNT; ++i) { IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(2000)); Assert.IsNotNull(msg, "Message was null for index: " + i); } Assert.IsTrue(this.transactionStarted, "A TX should have been started by consuming"); scoped.Complete(); } Assert.IsFalse(this.transactionStarted, "TX Should have Committed and cleared Started"); Assert.IsTrue(this.transactionCommitted, "TX Should have Committed"); Assert.IsFalse(this.transactionRolledBack, "TX Should not have Rolledback"); session.Close(); } } using (INetTxSession session = connection.CreateNetTxSession()) { using (IMessageConsumer consumer = session.CreateConsumer(destination)) { for (int i = 0; i < MSG_COUNT; ++i) { IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(50)); Assert.IsNull(msg, "Message was not null for index: " + i); } } session.Close(); } connection.Close(); } }
public void TestTransactedProduceConsumeWithSessionClose( [Values("tcp://${activemqhost}:61616")] string baseConnectionURI) { INetTxConnectionFactory factory = new NetTxConnectionFactory(NMSTestSupport.ReplaceEnvVar(baseConnectionURI)); using (INetTxConnection connection = factory.CreateNetTxConnection()) { connection.Start(); IDestination destination = null; using (INetTxSession session = connection.CreateNetTxSession()) { destination = session.CreateTemporaryQueue(); using (IMessageProducer producer = session.CreateProducer(destination)) { using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew)) { Assert.IsNotNull(Transaction.Current); for (int i = 0; i < MSG_COUNT; ++i) { producer.Send(session.CreateTextMessage("Hello World")); } scoped.Complete(); } session.Close(); } } using (INetTxSession session = connection.CreateNetTxSession()) { using (IMessageConsumer consumer = session.CreateConsumer(destination)) { using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew)) { for (int i = 0; i < MSG_COUNT; ++i) { IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(2000)); Assert.IsNotNull(msg, "Message was null for index: " + i); } scoped.Complete(); } session.Close(); } } using (INetTxSession session = connection.CreateNetTxSession()) { using (IMessageConsumer consumer = session.CreateConsumer(destination)) { for (int i = 0; i < MSG_COUNT; ++i) { IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(50)); Assert.IsNull(msg, "Message was not null for index: " + i); } } session.Close(); } connection.Close(); } }