Honestly I am not sure about the code in getRollbackRuntimeException (in
your code). Maybe Dan knows. He added the code.
I was never sure how well the transactions in cxf 2 really worked.
I just checked the code in CXF 3.
There I decided to completely avoid rolling back transactions for
request/reply. I think the reason is that the caller expects a reply.
The issue is that if you roll back then the message broker will retry a
number of times and then move the message to a dead letter queue.
So in this case the caller would get no reply at all.
This is why I decided that a request/reply will always return the
exception to the caller. I have not found any materials on the net if
this is the right choice.
So we should discuss this here.
Christian
On 05.12.2014 07:33, Jason Pell wrote:
Hi Christian,
I have added a test case to my github branch which demonstrates the session
issue and fails as a result. The session in the session holder is the
same as the session passed into the onMessage method.
In the jms systests:
org.apache.cxf.systest.jms.tx.JMSTransactionClientServerSameSessionTest
Currently when it executes, a soap fault is returned immediately. What
actually should be happening is a rollback of the message occurs, and the
GreeterImplWithTransaction then flips the boolean flag
and returns a valid result.
I have debugged this test and it fails to perform the rollback because of
this test:
boolean trans = resourceHolder == null ||
!resourceHolder.containsSession(session);
The resourceHolder does contain the session. Where as for all other test
cases (and my own which use both websphere mq and activemq), the sessions
do not match.
I need to understand exactly why the resource holder having the session
means trans = false....
Thanks
--
Christian Schneider
http://www.liquid-reality.de
Open Source Architect
http://www.talend.com