[
https://issues.apache.org/activemq/browse/AMQ-2659?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=59149#action_59149
]
Eugene Rodos commented on AMQ-2659:
-----------------------------------
Ok, so I modified JMSConsumerTest to use XASession (attached). I did initially
see some problems and now understand what you were talking about. However, I
was able to get rid of the problem and make the tests pass by including the
following method in ActiveMQXASession: \\ \\
{noformat}
public boolean isAutoAcknowledge() {
return true;
}
{noformat}
I think this makes sense since for an XASession transactions are controlled
outside of the session and so as far as the session is concerned it is always
AUTO_ACKNOWLEDGE.
This would take care of your concerns, no?
P.S. There are 4 failures in the test but I think those are because the tests
don't make sense any more with the transactions not controlled by the session.
Sorry, I don't have more time right now to look into it further.
> JMSException incorrectly thrown when using XAConnection/XASession outside a
> transaction
> ---------------------------------------------------------------------------------------
>
> Key: AMQ-2659
> URL: https://issues.apache.org/activemq/browse/AMQ-2659
> Project: ActiveMQ
> Issue Type: Bug
> Affects Versions: 5.3.0
> Reporter: Eugene Rodos
>
> Currently, if one attempts to use an XAConnection (implemented by
> ActiveMQXAConnection) and consequently an XASession (implemented by
> ActiveMQXASession) outside a transaction, a JMSException is thrown. However,
> nowhere in the JMS Spec does it say that if an XAConnection/XASession is
> used, it _*must*_ be enlisted in a transaction. It is perfectly legal to
> _*not*_ start a transaction but still use the XA objects.
> I propose that the following 2 methods in ActiveMQXASession be changed as
> follows to resolve this bug:
> {noformat}
> public boolean getTransacted() throws JMSException {
> return getTransactionContext().isInXATransaction();
> }
> /**
> * This is called before transacted work is done by the session.
> * XA transactions are controlled outside of the session so
> * nothing has to be done here. The only reason for this method
> * to be here is to override the parent.
> */
> protected void doStartTransaction() {
> }
> {noformat}
> \\
> The current version of these methods is as follows (for reference):
> {noformat}
> public boolean getTransacted() throws JMSException {
> return true;
> }
> /**
> * This is called before transacted work is done by
> * the session. XA Work can only be done when this
> * XA resource is associated with an Xid.
> *
> * @throws JMSException not associated with an Xid
> */
> protected void doStartTransaction() throws JMSException {
> if (!getTransactionContext().isInXATransaction()) {
> throw new JMSException("Session's XAResource has not been
> enlisted in a distributed transaction.");
> }
> }
> {noformat}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.