activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Eugene Rodos (JIRA)" <j...@apache.org>
Subject [jira] Commented: (AMQ-2659) JMSException incorrectly thrown when using XAConnection/XASession outside a transaction
Date Tue, 18 May 2010 16:33:23 GMT

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

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

Hi Gary,

Did you have a chance to run the attached test and check the additional proposed change? 
Does it satisfy your concerns?  Can these changes be adopted?  I think in this case it is
better to make it work for all use cases as opposed to going the config route.

> 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
>         Attachments: JMSConsumerTestXA.java, JmsTestSupportXA.java
>
>
> 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.


Mime
View raw message