public void TestReceiveRollback(
[Values(MsgDeliveryMode.Persistent, MsgDeliveryMode.NonPersistent)]
MsgDeliveryMode deliveryMode)
{
using(IConnection connection = CreateConnection(GetTestClientId()))
{
connection.Start();
using(ISession session = connection.CreateSession(AcknowledgementMode.Transactional))
{
IDestination destination = CreateDestination(session, DESTINATION_NAME);
using(IMessageConsumer consumer = session.CreateConsumer(destination))
using(IMessageProducer producer = session.CreateProducer(destination))
{
producer.DeliveryMode = deliveryMode;
// Send both messages
ITextMessage firstMsgSend = session.CreateTextMessage("First Message");
producer.Send(firstMsgSend);
ITextMessage secondMsgSend = session.CreateTextMessage("Second Message");
producer.Send(secondMsgSend);
session.Commit();
// Receive the messages
IMessage message = consumer.Receive(receiveTimeout);
AssertTextMessageEqual(firstMsgSend, message, "First message does not match.");
session.Commit();
message = consumer.Receive(receiveTimeout);
AssertTextMessageEqual(secondMsgSend, message, "Second message does not match.");
// Rollback so we can get that last message again.
session.Rollback();
IMessage rollbackMsg = consumer.Receive(receiveTimeout);
AssertTextMessageEqual(secondMsgSend, rollbackMsg, "Rollback message does not match.");
session.Commit();
}
}
}
}