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

Reply via email to