[
https://issues.apache.org/jira/browse/AMQ-7485?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17109022#comment-17109022
]
Federico Valeri commented on AMQ-7485:
--------------------------------------
Just for the record, this is an example of the workaround:
{code}
@Resource(mappedName = "java:/TransactionManager")
private TransactionManager tm;
...
if (tm.getStatus() != Status.STATUS_ACTIVE) {
throw new RuntimeException("TX not active");
}
producer.send(message);
...
{code}
> RAR managed producer is unaware of timed out transaction; sends non
> transacted message in error
> -----------------------------------------------------------------------------------------------
>
> Key: AMQ-7485
> URL: https://issues.apache.org/jira/browse/AMQ-7485
> Project: ActiveMQ
> Issue Type: Bug
> Components: RAR, XA
> Affects Versions: 5.15.0
> Environment: JEE RAR
> Reporter: Gary Tully
> Assignee: Gary Tully
> Priority: Major
> Labels: RAR, XA, xaresource
> Fix For: 5.16.0
>
>
> There is a problem with a RAR managed connection enlisted in a xa transaction
> that aborts, if that connection is used to produce messages.
> getConnection succeeds and enlists the resource, the session is in an xa
> transaction, all is good.
> If however, the transaction times out and aborts, *before* a producer gets to
> send(), the send will *not* see a transaction context and will produce a
> message with no transaction identity in error.
> The abort forces an end(fail) and rollback, however this results in the
> transaction context being unset and the producer session not being aware of
> the aborted transaction.
> The transaction management is external in the case of a managed connection
> and the default is non transactional in the absence of an external or RAR
> local transaction.
> Getting a reference to the TransactionManager and doing a transaction status
> check before send is a workaround, but that should not be necessary.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)