[
https://issues.apache.org/activemq/browse/AMQNET-217?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=56357#action_56357
]
Michel Van Hoof commented on AMQNET-217:
----------------------------------------
Hmm.. While writing up the test case i noticed that i did not receive the
error.. ONLY when i try to comit a session which has already been commited. So
I am afraid i cryed to soon.. Apparently somewhere i missed the extra
Session.Commit() in our code (which in the past did not throw an exception with
1.1.0.0 and does now :s
I'll have to check back in the code where this exactly happens.
I did notice another "behaviour" i have not seen before.. When setting a
destination on a producer during creation
(Session.CreateProducer(iDestionation), it can no longer be overwritten later
using Producer.send(idestionation,iMessage)
is this correct ?
Test code showing that the producer later on keeps writing to the idestionation
that was used during Creation:
{code:title=TransActionTest.exe|borderStyle=solid}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Apache.NMS;
using Apache.NMS.ActiveMQ;
namespace TransactionTest
{
class Program
{
static void Main(string[] args)
{
IConnectionFactory oFactory = new
ConnectionFactory("failover:(tcp://10.32.1.24:1414)");
IDestination oDestionation = new
Apache.NMS.ActiveMQ.Commands.ActiveMQQueue("trans.test");
IDestination oDLQ = new
Apache.NMS.ActiveMQ.Commands.ActiveMQQueue("trans.test.DLQ");
IConnection oConnection = oFactory.CreateConnection();
oConnection.Start();
ISession oProducerSession = oConnection.CreateSession();
ISession oSession =
oConnection.CreateSession(AcknowledgementMode.Transactional);
IMessageProducer oProducer =
oProducerSession.CreateProducer(oDestionation);
for (int i = 0; i < 5; i++)
{
oProducer.Send(oDestionation,oProducer.CreateTextMessage("Iteration: " +
i.ToString()));
}
Console.WriteLine("Sending testmessages DONE");
//now.. for the consuming Part...
IMessageConsumer oConsumer = oSession.CreateConsumer(oDestionation);
while (true)
{
IMessage oMessage = oConsumer.Receive(new TimeSpan(0, 0, 10));
if (oMessage != null)
{
ITextMessage oText = (ITextMessage)oMessage;
try
{
//processing message and then throw an error...
Console.WriteLine(oText.Text);
throw new Exception("I have been a naughty process and
made a booboo");
oMessage.Acknowledge();
oSession.Commit();
}
catch (Exception)
{
//processing did error so should DLQ
ITextMessage oDLQMessage =
oProducer.CreateTextMessage();
oDLQMessage.Text = "Error During Message: " +
oText.Text;
oProducer.Send(oDLQ,oDLQMessage);
Console.WriteLine(oDLQ.ToString());
oMessage.Acknowledge();
try
{
oSession.Commit();
}
catch (Exception e)
{
//ERROR happens here
Console.WriteLine(e.ToString());
}
}
}
else
{
break;
}
System.Threading.Thread.Sleep(100);
}
Console.ReadKey();
}
}
}
{code}
> AcknowledgementMode.Transactional Broken (Apache.NMS.NMSException: Invliad
> State: Not Currently in a Transaction)
> -----------------------------------------------------------------------------------------------------------------
>
> Key: AMQNET-217
> URL: https://issues.apache.org/activemq/browse/AMQNET-217
> Project: ActiveMQ .Net
> Issue Type: Bug
> Components: ActiveMQ
> Affects Versions: 1.2.0
> Environment: Win XP SP3 , Windows 2003 Server, Windows 2008 server
> Reporter: Michel Van Hoof
> Assignee: Jim Gomes
>
> One of our application that is using the NMS library was upgraded to
> 1.2.0.0-RC1 for testing. Same code working nicely with 1.1.0.0 all of the
> sudden started to return errors stating that the session is not in
> transactional mode altough this is the case.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.