Legacy Issue Number: 3365
Source: UBS ( Hans Kneubuehl)
There has now been some discussion on this subject, therefore I would like to
have it registered as an official issue:
It is not clearly specified how the implicit transaction context associated
with a thread is propagated to another execution environment (at the ORB level)
in case of explicit transaction propagation control. It should be clarified in
various places, for example, that the PropagationContxt is not required to be
transferred in case of explicit transaction propagation.
First, note the following two important aspects to transaction propagation:
1. Transaction Propagation Control:
How is it controlled at the application level whether a transaction is
propagated? -> the spec specifies implicit and explicit propagation control.
2. Transaction Context Propagation:
How is the implicit transaction context propagated to another execution
environement at the ORB level? -> implicit transfer of the PropagationContext
versus explicit transfer of a Control objref (as an explicit request
In principle, the spec could mandate that the PropagationContext is always
transfered even when explicit transaction propagation control is used.
Historically this was never intendend (see quoted message below). However,
there are a lot of places where the spec speaks about implicit transfer of the
PropagationContext without referring to implicit propagation control (Maybe
because explicit propagation control was added at a later stage?):
p. 10-60, "When the implicit context is transferred, it is represented as a
-> The historical intent is that in case of explicit propagation control, the
implicit transaction context is transferred by passing the Control objref as an
explicit request parameter. (Note that the implicit in 'implicit context' is
referring to the fact that the OTS maintains implicitly transaction information
with threads, its not referring to transferral. Also note that the 'implicit
context' is referring to the transaction context, not the progagation context.)
p. 10-60, "When the Control object is passed as an operation argument (explicit
propagation), no special transfer mechanism is required."
-> This could be interpreted (wrongly according to the historical intent) that
no special transfer mechanism is required, implicit transferral of the
PropagationContext is just fine.
p. 10-61, "An interposed coordinator registers as a participant in the
transaction with the Coordinator identified in the PropagationContext of the
-> but with explicit propagation it is not required that the received request
contains a PropagationContext...
p. 10-63, "When exporting a transaction, the ORB sets the PropagationContext
into the ServiceContext::context_data field..."
-> but this should only be required for implicit propagation control...
p. 10-67, "The ORB will invoke the sender callbacks only when a transactional
operation is issued for an object in a different process."
-> What's the definition of a transactional operation? An operation on a
transactional object? If yes, then this saying even in case of transactional
objects that don't inherit TransactionalObject (ie. explicit propagation
control), the ORB required to get the PropagationContext by using
Sender::sending_request and to pass a PropagationContext to
Several people have already suggested that explicit propagation is axed from
Reported: OTS 1.0b1 — Mon, 28 Feb 2000 05:00 GMT
Updated: Fri, 6 Mar 2015 20:57 GMT