[ 
https://issues.apache.org/activemq/browse/AMQ-2659?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=59136#action_59136
 ] 

Eugene Rodos commented on AMQ-2659:
-----------------------------------

I still don't understand why using XASession without a tx is "undefined 
behavior".  No, they are not the same.  XASession has additional functionality 
but should still work as a regular session in the absence of tx. After all, 
XASession extends Session so even by the API an XASession can be treated as a 
regular Session.  In fact, the JMS client will always get a regular Session to 
work with.  However, the RA may instantiate an XASession behind the scenes.

If we make this change and modify JMSConsumerTest to use XASession, what 
problem are you expecting to occur?



> 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.

Reply via email to