On Fri, 1 Jul 2005, Oliver Jowett wrote:
What I'm confused about is, for example, 3.3.1 in the DTP:XA spec:
3.3.1 Registration of Resource Managers
Normally, a TM involves all associated RMs in a transaction branch. (The TMs
set of
RM switches, described in Section 4.3 on page 21 tells the TM which RMs are
associated with it.) The TM calls all these RMs with xa_start(), xa_end(), and
xa_prepare (), although an RM that is not active in a branch need not
participate further
(see Section 2.3.2 on page 8). A technique to reduce overhead for
infrequently-used
RMs is discussed below.
That implies it's valid (in fact, normal!) to enlist many different RMs
in the same transaction branch. Am I interpreting that correctly?
I see. No, I don't think that's the correct interpretation, though now
that you point it out, that paragraph is a bit confusing.
What it means, is that the TM always calls xa_start(), xa_end() and
xa_prepare() for a RM, even if the transaction doesn't actually have any
work to do for the RM. It has to be like that in the XA world, because the
TM doesn't know which RMs the application really uses in the transaction.
Chapter 3.3.1 talks about dynamic registration. In that scheme, the RM
registers itself to the TM when the application calls the RM for the first
time in the transaction. That's an optimization to avoid the overhead of
the start/end/prepare cycle for RMs that aren't really involved.
JTA works differently from XA on this matter. In JTA, the application
server tells the TM which RMs are involved in the transaction, so the
XA dynamic registration has not been included in JTA.
Disclaimer: I've never used an XA implementation, and I have only little
experience with JTA.
- Heikki
---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?
http://archives.postgresql.org