As generally accepted, the MySQL support for XA is somewhat broken.
If you do the following:
- begin a transaction
- get an XAConnection from MySQL,
- get a connection from the XAC
- do some operations,
- close the connection
- get another connection from XAC
- try to do some operations -> MYSQL throws an exception stating that it does not support a XA START RESUME
But, this leads to certain undesirable behavior inside the JBOSS JTA codebase. It is resulting in not calling XAC.close(). We are using a custom pool for limiting the number of XAConnections we create - which gets maxed out because of this. Am attaching a patch for ConnectionImple that fixes the logic in the close() method. Also has a couple of jdk6 methods that allow the client to access the underlying native conneciton..
Am also adding a patch for the TransactionImple - which ensures that we call XAResource.rollback() - cleaning up the XAC for subsequent reuse.