OK, I have a question. The XA/Open spec in paragraph 2.3 states that the TM can discard its knowledge of the current global tx after the RMs have committed or rolled back. Neo takes advantage of this fact in several places, where during the completion of the current tx either way (commit or rollback) it asks the TM for the current tx to retrieve related resources. In fact, the TxManager class that is provided with Neo as a top level TM "forgets" (i.e. unmaps the tx from the thread) *after* calling afterCompletion() hooks, so everything works fine out of the box. JOTM on the other hand is not consistent (and, eventually, spec compliant), at least this is what is seems to me. Let me explain.
JOTM (its Current class, that is the TM implementation) has a commit() method that first asks RMs to commit() and then dissociates the global tx from the thread. But on rollback, first it dissociates the tx from the thread and then, from a method local copy it asks the RMs to rollback(). This leaves any RM to get a null reference when asking the JOTM TM for the current tx, which leads to failures in the process. If the rollback() code in Current is changed to first ask the RMs to rollback() and then forget the global tx, everything works as it should. My point is that, from a first view, this is a bug in JOTM, not in Neo. Does anyone have any experience with this? Am I interpreting this wrong or should it be taken upstream? cheers, CG _______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user