On 8/23/2011 5:21 AM, Bergquist, Brett wrote:
I guess I was under the assumption that it would go away if I booted the 
database clean.  It seems to me that a database that has been stopped and 
booted clean would invalidate an existing transactions and clean them up.  Is 
this not the case with XA transactions?

In A two phase commit XA transaction, if there is a crash between the prepare and the final commit or rollback, there is not a way for Derby to know whether the overall distributed transaction was committed or rolled back, so even after the database is rebooted, the transaction remains in the prepared state and has to be manually recovered and appropriately committed or rolled back to match the global transaction. The prepare just guarantees that either commit or rollback will work.

The JTA spec which provides the Java interfaces for XA transactions is based on the open group XA Specification, which is a good resource for understanding XA concepts.

https://www2.opengroup.org/ogsys/jsp/publications/PublicationDetails.jsp?catalogno=c193

HTH

Kathey

PS. There is a single phase commitin XAResource.commit(Xid xid, boolean onePhase) if your transaction involves just a single database and that is all you require, but I don't know if you have overall handling of the XA transaction processing.



Reply via email to