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"));
}
session.Close();
scoped.Complete();
}
}
}
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);
}
session.Close();
scoped.Complete();
}
}
}
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();
}
}