On Sat, 2 Jul 2005, Oliver Jowett wrote:

Sorry to keep beating on this, but I still don't see where the spec says
that you must have only one RM per transaction branch.

Sure, it's important to get this right.

2.2.6 says:

2.2.6 Transaction Branches
A global transaction has one or more transaction branches (or branches). A 
branch is a
part of the work in support of a global transaction for which the TM and the RM
engage in a separate but coordinated transaction commitment protocol (see 
Section 2.3
on page 8). Each of the RMs internal units of work in support of a global 
transaction is
part of exactly one branch.

A global transaction might have more than one branch when, for example, the AP 
uses
multiple processes or is involved in the same global transaction by multiple 
remote
APs.

So it seems to me that branches are intended to allow independent
processes / APs to each have an independent set of "tightly coupled
threads" (as all work on a particular branch is tightly-coupled).
There's no mention of having only one RM per branch, which I'd expect to
see here if it was a requirement.

They should have been explicit about it, I agree.

The key is the clause "A branch is a part of the work in support of a global transaction for which the TM and the RM engage in a separate but coordinated transaction commitment protocol". That means that for each branch, there's exactly one call to prepare and commit. If you have two RMs, you need two prepare/commit calls, so you need two branches.

One implication of the second paragraph is that a single-threaded AP can
use a single transaction branch for all the work it does.

No, that paragraph says "for example". The third example is the case where you have more than one RM :).

As further, non-authoritative, evidence, see this DevX article on JTA:

http://archive.devx.com/java/free/articles/dd_jta/jta-2.asp

Search for "branch" in that article. It says explicitly "Requests to three different RDBMSs, therefore, require three transaction branches."

- Heikki

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
      choose an index scan if your joining column's datatypes do not
      match

Reply via email to