Kris Jurka wrote:
> Doesn't this allow:
>
> xaRes.start(xid, XAResource.TMNOFLAGS);
> xaRes.end(xid, XAResource.TMFAIL);
> xaRes.start(xid, XAResource.TMJOIN);
> xaRes.end(xid, XAResource.TMSUCCESS);
> xaRes.commit(xid, true);
>
> Is that actually a problem or do we assume the TM is smart enough not to
> do this.
Hmm, true, it does allow that.
The TM really shouldn't be doing that. It's very confused if it does.
However, given the sorry state of many TMs out there, it'd be nice if we
did check for that.
I'd say let's not bother checking that for now. In the future, we should
roll back the transaction on end(TMFAIL) immediately, and add checking
for that case as well. The way it works now is perfectly correct and
legal, we're just not taking advantage of the hint the TM is giving us.
--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com