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