Issues for Object Transaction Service (OTS) RTF discussion list
To comment on any of these issues, send email to ots-rtf@omg.org. (Please include the issue number in the Subject: header, thusly: [Issue ###].) To submit a new issue, send email to issues@omg.org.
List of issues (green=resolved, yellow=pending Board vote, red=unresolved)
Issue 1819: Transaction Service Specification issue concerning TRANSACTION_ROLLBACK
Issue 1837: Modifications to the CORBA transaction service need to be addressed
Issue 1848: register_synchronization
Issue 1850: Add get_timeout to Current
Issue 1851: Timeouts
Issue 1853: Is WRONGTRANSACTION a SystemException or a UserException
Issue 1854: Inactive thrown by certain operations
Issue 1929: OTS timeout
Issue 1938: Interposition and Synchronizations in the OTS
Issue 1963: WrongTransaction vs WRONG_TRANSACTION
Issue 2300: Transaction automatically marked for rollback?
Issue 2349: Synchronization issue?
Issue 2551: WrongTransaction vs. WRONG_TRANSACTION
Issue 2578: transaction service/2pc
Issue 2580: Rollback should raise HeuristicMixed, HeuristicHazard, and HeuristicCommit
Issue 2618: OTS register_resource clarification
Issue 2787: report_heuristics
Issue 2930: IDL transparency of OTS
Issue 2931: locality constraints
Issue 2932: ots-rtf: non-transactional objects
Issue 2933: ots-rtf: OTS and location transparency
Issue 2934: ots-rtf: TransactionFactory
Issue 3004: Conflict in ptc/99-10-07
Issue 3157: need interoperable XA support
Issue 3158: need interoperable XA support
Issue 3166: Bug in transaction spec
Issue 3343: Clarification - Transaction Policy
Issue 3357: OTS-RTF issue: spelling/case of transaction policy values
Issue 3417: TransactionalObject remnants
Issue 3420: Component tag definition missing
Issue 3421: CosTSInteroperation not specified
Issue 3422: TranactionPolicyValue definition?
Issue 3423: TransactionalPolicyComponent definition
Issue 3424: Policy interrogation API?
Issue 3425: IORs without policies?
Issue 3536: OTS interoperability - need for unique branch ids
Issue 3559: Transaction policy IDL missing
Issue 3578: OTS 1.1 changes by Messaging spec (clarifications)--issue1
Issue 3579: OTS 1.1 changes by Messaging spec (clarifications)--issue 2
Issue 3588: OTS issue : TransactionPolicyValue for Synchronization object
Issue 3592: Shared/unshared transactions?
Issue 3593: Any in transaction context?
Issue 3600: Handling multiple resource registrations
Issue 3602: separate client-side behavior issue
Issue 3605: Handling multiple resource registrations
Issue 3675: Heuristic exception
Issue 3676: Page 10-32, first paragraphe
Issue 3915: OTSPolicy's should not require mandatory client-side checking
Issue 3916: NonTxTargetPolicy
Issue 3971: Lenient/Fascist
Issue 3988: is org.omg.CosTransaction.Current object locality constrained ?
Issue 3991: ots 1.1 client to 1.2 server interworking
Issue 4017: bug with NonTxTargetPolicy
Issue 4029: minor editorial correction to CosTransaction.idl
Issue 4030: OTSPolicy & OTS internal operations
Issue 4038: forward references in section 10.6
Issue 4343: interposed coordinator optimisation
Issue 4589: Incorrect CosTransactions.idl in OTS 1.2
Issue 4665: OTSPolicy
Issue 4808: NonTxTargetPolicy default value?
Issue 4809: OTSPolicy for OTS objects { Coordinator, Resource }
Issue 4821: NonTxTargetPolicy should not modify FORBIDS OTSPolicy behavior
Issue 1819: Transaction Service Specification issue concerning TRANSACTION_ROLLBACK (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: In received_reply() the Specification says, "If the Environment indicates
the request was unsuccessful, the TRANSACTION_ROLLBACK standard exception
is raised." The question is the interpretation of "unsuccessful. Secondly, the specification says, "Any external failure affecting the
transaction will cause the transaction to be rolled back; the standard
exception TRANSACTION_ROLLEDBACK will be raised in the orginator when it
issues commit." The question is the interpretation of "to be rolled
back.
Resolution: resolved
Revised Text: Change the part of section 10.5.2 labeled Sender::received_reply
from:
Sender::received_reply
A reply has been received. The PropagationContext from the server
is passed to the Transaction Service along with the returned
environment. The Transaction Service examines the Environment to
determine whether the request was successfully performed. If the
Environment indicates the request was unsuccessful, the
TRANSACTION_ROLLEDBACK standard exception is raised.
to:
Sender::received_reply
A reply has been received. The PropagationContext from the server
is passed to the Transaction Service along with the returned
environment. The Transaction Service examines the Environment to
determine whether the request was successfully performed. A request
completes unsuccessfully if it raises a system exception. Requests
that raise a user exception or no exception at all are deemed to
have completed successfully. Requests which are deemed unsuccessful
cause the transaction associated with the request to be marked rollback
only. This ensures that a subsequent call to commit will raise the
TRANSACTION_ROLLBACKED system exception.
Actions taken:
August 17, 1998: received issue
January 9, 2001: closed issue
Discussion: Since issue 3302 has not been resolved in the CORE RTF
and its current proposed fix as of May 8th of 2000 does not provide
adequate safeguards against code on the server getting executed
when a system exception is thrown with COMPLETED_NO, the OTS spec
will be changed to make it clear that a request completes unsuccessfully
>if it raises a system exception.
Issue 1837: Modifications to the CORBA transaction service need to be addressed (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The recently (recommended for adoption)
messaging specification included a number of changes to the CORBA
transaction service to support CORBA messaging. Those changes, specified as
modofications to the CORBA transaction service (OTS 1.1), need to be
included in the next revision of OTS to be produced by the OTS RTF.
Resolution: Close without action. (OTS RTFs are not responsible for publishing new revisions of the specificatio
Revised Text:
Actions taken:
August 18, 1998: received issue
January 16, 2001: closed issue
Discussion: The resolution for this issue is to simply close it without action since the OTS RTF is not responsible for publishing the changes
made from other RTFs. This is the responsibility of the AB/PTC.
Issue 1848: register_synchronization (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: if register_synchronization is called on a subtransaction should we throw
SynchronizationUnavailable?
Resolution: see below
Revised Text: add the following paragraph to 2.6.12) register_synchronization:
A synchronization cannot be registered with a subtransaction. A call to register_synchronization on a subtransaction always raises SynchronizationUnavailable.
Actions taken:
August 24, 1998: received issue
May 13, 2002: closed issue
Discussion: Resolution:
update the description of register_synchronization to require SynchronizationUnavailable to be thrown if the current transaction is a subtransaction.
Issue 1850: Add get_timeout to Current (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: how about adding get_timeout to Current?
Resolution: The get_timeout method will be added to Current.
Revised Text: Add the following operation to the IDL for Current in section 10.3.1:
interface Current : CORBA:Current
{
. . .
unsigned long get_timeout ();
. . .
};
and the following text to section 10.3.1:
get_timeout
This operation returns the state variable associated with the target
object that affects the time-out period associated with top-level
transactions created by invocations of the begin operation, or 0 if
no application specific time-out has been established.
Actions taken:
August 24, 1998: received issue
January 16, 2001: closed issue
Discussion:
Issue 1851: Timeouts (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: the specification talks about timeouts for top-level transactions, and
implies that there are no timeouts associated with subtransactions. Maybe we
could make this explicit. (And therefore that the timeout field in the
propagation context is for the top-level transaction, which is not necessarily
the "current" transaction).
Resolution: Make it clearer in the OTS specification that timeouts in the propagation context are for top-level
Revised Text: Page 10-20, set_timeout:
extend the sentence
"If the parameter has a non-zero value n, then top-level transactions
created by subsequent invocations of begin will be subject to being
rolled back if they do not complete before n seconds after their creation."
to read:
"If the parameter has a non-zero value n, then top-level transactions
created by subsequent invocations of begin will be subject to being rolled
back if they do not complete before n seconds after their creation; nested
transactions are not subject to such time-outs and will only be rolled back
automatically if their enclosing top-level transaction is rolled back."
Page 10-63, timeout:
modify "transaction" in the sentence to "hierarchy's top-level transaction".
Actions taken:
August 24, 1998: received issue
January 9, 2001: closed issue
Discussion:
Issue 1853: Is WRONGTRANSACTION a SystemException or a UserException (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: is WRONGTRANSACTION a SystemException or a UserException? I haven"t checked
the latest CORBA draft, but some ORB vendors (e.g., Sun) are implementing it as
a UserException, whereas others
Resolution: This issue has been closed without action. See the discussion section for an explanation.
Revised Text:
Actions taken:
August 24, 1998: received issue
January 16, 2001: closed issue
Discussion: The OTS spec will be changed by the AB/PTC to reflect that WrongTransaction is a user exception and that
WRONG_TRANSACTION does not exist as a system exception. (It is only intended that WrongTransaction be raised by the
get_response and get_next_response operations on the ORB.) Since this issue is the same as the core issue 557, this issue will be
closed without action by the OTS RTF.
Issue 1854: Inactive thrown by certain operations (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: throughout the specification certain operations (e.g.,
create_subtransaction) can throw Inactive if the current transaction has been
"prepared". Should this not be "terminated" to allow for the transaction having
rolledback, or should a different exception (e.g., InvalidTransaction) be thrown
then?
Resolution: resolved, see below
Revised Text: Text for when create_subtransaction can throw Inactive should be
changed to use "terminating, or has already been terminated" instead of "prepared"
to allow for the transaction having rolledback. Also, register_subtran_aware should
be changed to use "terminating, or has already been terminated" instead of
simply "has already been terminated".
Revised Text:
Change section 10.3.5, create_subtransaction (first paragraph)
from:
"A new subtransaction is created whose parent is the transaction associated with the
target object. The Inactive exception is raised if the target transaction has already
been prepared."
to:
"A new subtransaction is created whose parent is the transaction associated with the
target object. The Inactive exception is raised if the target transaction is terminating,
or has already been terminated."
register_subtran_aware (third paragraph)
from:
"The NotSubtransaction exception is raised if the current transaction is not a subtransaction.
The Inactive exception is raised if the subtransaction (or any ancestor) has already been
terminated. The standard exception TRANSACTION_ROLLEDBACK may be raised if the
subtransaction (or any ancestor) has been marked rollback only."
to:
"The NotSubtransaction exception is raised if the current transaction is not a subtransaction.
The Inactive exception is raised if the subtransaction (or any ancestor) is terminating, or has
already been terminated. The standard exception TRANSACTION_ROLLEDBACK may be raised
if the subtransaction (or any ancestor) has been marked rollback only."
Actions taken:
August 24, 1998: received issue
January 9, 2001: closed issue
Discussion:
Issue 1929: OTS timeout (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: issue about what timeout value is actually
sent in the PropagationContext? If it is the timeout with which the
original transaction was created, then the server-side transaction may
hang around for longer than is required. Should this value not be the
timeout which *remained* at the client when it made the call?
Resolution: see below
Revised Text: In 2.14.2.3) Transaction Service Interoperation, add the following sentence to the timeout description:
This timeout is the time remaining, i.e. the timeout when the transaction was begun (or the timeout received through a transactional request, or through a Current::resume operation) less the elapsed time, in seconds
Actions taken:
September 3, 1998: received issue
May 13, 2002: closed issue
Discussion: Resolution:
the timeout value sent in transaction contexts for top-level transactions is the time remaining (in seconds).
Issue 1938: Interposition and Synchronizations in the OTS (ots-rtf)
Click here for this issue's archive.
Source: BROKAT Informationssysteme (Mr. Blake Biesecker, )
Nature: Uncategorized Issue
Severity:
Summary:
Summary: In the OTS interposition can be used to prevent multiple resource
registrations across an address space: the server registers a
subordinate coordinator with the real parent, and resources registered
at the server can register with the subordinate coordinator. This
subordinate is driven through prepare/commit/rollback by the parent, and
then drives its locally registered resources.
However, there is no equivalent for synchronizations, i.e., there"s no
subordinate synchronization.
Resolution: This issue has been closed without action. See the the discussion section for an explanation.
Revised Text:
Actions taken:
September 8, 1998: received issue
January 16, 2001: closed issue
Discussion: This issue is addressed on page 10-61 of the specification, under the heading of Subordinate Coordinator Synchronization. Since it
occurs right after the description of interposition, this is sufficient to address the original issue that was raised.
Issue 1963: WrongTransaction vs WRONG_TRANSACTION (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The latest OTS spec (formal/98-07-09) has this exception as
WRONG_TRANSACTION, while the CORBA 2.2 and draft CORBA 2.3 documents
have WrongTransaction.
Which one is right, and is it a system exception, as implied by the OTS,
or a user exception as implied by CORBA 2.2?
Resolution: This issue has been closed without action. See the discussion section for an explanation.
Revised Text:
Actions taken:
September 16, 1998: received issue
August 19, 1999: moved from core to ots rtf
January 16, 2001: closed issue
Discussion: The OTS spec will be changed by the AB/PTC to reflect that WrongTransaction is a user exception and that
WRONG_TRANSACTION does not exist as a system exception. (It is only intended that WrongTransaction be raised by the
get_response and get_next_response operations on the ORB.) Since this issue is the same as the core issue 557, this issue will be
closed without action by the OTS RTF.
Issue 2300: Transaction automatically marked for rollback? (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Should a transaction be automatically marked for rollback when a) a user
exception or b) a system exception is raised?
I think the answers should be "no" in both cases but can"t find a specification
of this behaviour in the CORBA or OTS specs.
Please would you describe the required behaviour in the OTS specification.
Resolution: See issue 1819 for resolution. Duplicate of 1819
Revised Text:
Actions taken:
January 8, 1999: received issue
January 16, 2001: closed issue
Discussion:
Issue 2349: Synchronization issue? (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Synchronizations which are registered with a top-level transaction are
only informed when the transaction commits (at the start and end of the
2-phase protocol). The intention is that they can then make any
transient data available to the appropriate resource. Is there not a
requirement (or wouldn"t it be a good idea anyway) that they should be
informed if the transaction simply rolls back (i.e., rollback is called
on the Coordinator rather than commit), so that they can remove
transient data, do garbage collection etc?
Resolution: The resolution for this issue is to change the OTS specification so that it is clear that only the a
Revised Text:
Actions taken:
January 27, 1999: received issue
January 9, 2001: closed issue
Discussion: Descriptions of the changes made to the OTS specification to resolve this issue:
On page 10-32, section 10.3.8, the first paragraph should
be change from:
"The Transaction Service provides a synchronization protocol
..., to be notified before the start of the two-phase commitment
protocol, and after its completion."
to:
"The Transaction Service provides a synchronization protocol
..., to be notified before the start of the two-phase commitment
protocol, and after its completion. If the transaction is
instructed to roll back rather than be committed, the object
will only be notified after rollback completes."
The the text marked with the header after_completion should
be changed from:
"This operation is invoked after all commit or rollback responses
have been received by this coordinator. The current status of
the transaction (as determined by a get_status on the Coordinator)
is provided as input.
Only standard exceptions may be raised and they have no effect
on the outcome of the commitment process."
to:
"Regardless of how the transaction was originally instructed to
terminate, this operation is invoked after all commit or rollback
responses have been received by this coordinator. The current
status of the transaction (as determined by a get_status on the
Coordinator) is provided as input.
Only standard exceptions may be raised and they have no effect
on the outcome of the transaction termination."
Issue 2551: WrongTransaction vs. WRONG_TRANSACTION (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Currently, ORB methods get_response() and get_next_response() throw user
exception
"WrongTransaction". Although this behavior satisfies CORBA 2.2
requirements, it
causes problems. For instance, RequestInterceptor methods, whose
interfaces are fixed
and do not stipulate this exception in their throws clause, cannot
implicitly throw
WrongTransaction. Does it make sense that the ORB throws a user exception
in
this context? We"re wondering whether a mistake was made when the original
requirement
for WrongTransaction (a.k.a., WRONG_TRANSACTION in CORBAServices) was
incorporated
into CORBA. And if not, what was the motivation to make it a user
exception.
Resolution: duplicate, close issue
Revised Text:
Actions taken:
March 19, 1999: received issue
January 16, 2001: closed issue
Discussion: The OTS spec will be changed by the AB/PTC to reflect that WrongTransaction is a user exception and that
WRONG_TRANSACTION does not exist as a system exception. (It is only intended that WrongTransaction be raised by the
get_response and get_next_response operations on the ORB.) Since this issue is the same as the core issue 557, this issue will be
closed without action by the OTS RTF.
Issue 2578: transaction service/2pc (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: suppose there are three server objects in three different machine and
>they are in a
>context of transaction. now first and the second objects are prepared
>with the returns
>votecommit. during the preparartion of third object, roll back is
>called.now in the mean
>time second object"s server went down though it had a successful prepare
>call.so when transaction service will call roll back to second
>object,(as resource assotiated with
>it is registered)it will not be found and it can not be rolled back to
>main tain the
>consistency. how this situation can be handled?
Resolution: No change needed.
Revised Text:
Actions taken:
April 7, 1999: received issue
January 16, 2001: closed issue
Discussion: This issue is covered in the current specification. Consistency
is maintained via replay_completion and presumed rollback logic. See Discussion
section and issue archives for details.
Issue 2580: Rollback should raise HeuristicMixed, HeuristicHazard, and HeuristicCommit (ots-rtf)
Click here for this issue's archive.
Source: BROKAT Informationssysteme (Mr. Blake Biesecker, )
Nature: Uncategorized Issue
Severity:
Summary: Summary: CosTransactions::Current::commit() and
CosTransactions::Terminator::commit() report inconsistent or possibly
inconsistent outcomes using the HeuristicMixed and HeuristicHazard
exceptions, if the report_heuristics parameter is true.
However, the same interfaces also offer a rollback() operation which
does not support reporting of the same kind of outcome
I can"t see any reason why commit() and rollback() should differ in
this matter. If I look at CosTransactions::Resource::rollback(), a
resource can raise HeurisitcCommit, HeuristicMixed, and HeuristicHazard
as part of a rollback.
Also in the X/Open DTP XA interface any kind of heuristic decision can
be reported in an xa_rollback().
Resolution: resolved
Revised Text: Heuristic decisions can only be made once the two-phase commit protocol
has begun, and a resource has responded to prepare. A resource which receives rollback
without a previous prepare has no choice in the matter: it must rollback. The OTS
specification will be changed to make this absolutely clear. (The clarification
changes are not intended to make any semantic changes.)
Revised Text:
Using pts/99-10-07 or formal/97-12-17 as a reference:
- page 10-16, change
"A heuristic decision is a unilateral decision made by one or more
participants in a transaction to commit or rollback updates without
first obtaining the consensus outcome determined by the Transaction
Service. Heuristic decisions are normally made only in unusual circumstances,
such as communication failures, that prevent normal processing. When
a heuristic decision is taken, there is a risk that the decision will
differ from the consensus outcome, resulting in a loss of data integrity."
to read
"A heuristic decision is a unilateral decision made by one or more
participants in a transaction to commit or rollback updates without
first obtaining the consensus outcome determined by the Transaction
Service. A participant can only make a heuristic decision once the
two-phase-commit protocol has begun, in particular it cannot make
such a decision if it receives a rollback without a previous prepare.
Heuristic decisions are normally made only in unusual circumstances,
such as communication failures, that prevent normal processing. When
a heuristic decision is taken, there is a risk that the decision will
differ from the consensus outcome, resulting in a loss of data integrity."
- page 10-31, 2nd paragraph, change
"The resource reports inconsistent outcomes using the HeuristicMixed and
HeuristicHazard exceptions (described in "Exceptions" on page 10-16).
Heuristic outcomes occur when a resource acts as a sub-coordinator and at
least one of its resources takes a heuristic decision after a VoteCommit
return."
to read
"The resource reports inconsistent outcomes using the HeuristicMixed and
HeuristicHazard exceptions (described in "Exceptions" on page 10-16).
Heuristic outcomes occur when a resource acts as a sub-coordinator and at
least one of its resources takes a heuristic decision after a VoteCommit
return. If a heuristic outcome exception is raised, the resource must
remember this outcome until the forget operation is performed so that it
can return the same outcome in case commit or rollback is performed."
- page 10-31, change
"rollback
If necessary, the resource should rollback all changes made as part of
the transaction. If the resource has forgotten the transaction, it should
do nothing.
The heuristic outcome exceptions (described in "Exceptions" on page 10-16)
are used to report heuristic decisions related to the resource. If a heuristic
outcome exception is raised, the resource must remember this outcome until
the forget operation is performed so that it can return the same outcome
in case rollback is performed again. Otherwise, the resource can immediately
forget all knowledge of the transaction."
to read
"rollback
If necessary, the resource should rollback all changes made as part of
the transaction. If the resource has forgotten the transaction, it should
do nothing.
The heuristic outcome exceptions (described in "Exceptions" on page 10-16)
are used to report heuristic decisions related to the resource. The resource
may raise these exceptions only if the prepare operation has been performed
previously. If a heuristic outcome exception is raised, the resource must remember
this outcome until the forget operation is performed so that it can return
the same outcome in case rollback is performed again. Otherwise, the resource
can immediately forget all knowledge of the transaction."
Actions taken:
April 8, 1999: received issue
January 9, 2001: closed issue
Discussion:
Issue 2618: OTS register_resource clarification (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: I think it might be useful to add some clarification text to
register_resource in the OTS specification. If the invoked Coordinator
represents a subtransaction, and the resource is not a
SubtransactionAwareResource, then the resource is registered as a
participant with the current transaction, but will only receive
commit/rollback requests when the top-level ancestor terminates. The
implication is that if the subtransaction rolls back it has no effect on
resources registered in this way, i..e, they remain registered with the
top-level transaction.
Resolution: See Proposed Resolution
Revised Text:
Actions taken:
April 21, 1999: received issue
May 13, 2002: closed issue
Discussion: Resolution:
modify the paragraph "if the resource is a subtransaction aware resource" paragraph in the 2.6.11 register_resource description to be:
"If the resource is a subtransaction aware resource (it supports the SubtransactionAwareResource interface) and the transaction associated with the target object is a subtransaction, then this operation registers the specified resource with the subtransaction and indirectly with the top-level transaction when the subtransaction's ancestors have completed.
If the resource is not a subtransaction aware resource and the transaction associated with the target object is a subtransaction, then the resource is registered as a participant of this subtransaction. It is registered with the parent of this subtransaction only if and when this subtransaction is committed..
Otherwise (the transaction is a top-level transaction), the resource is registered as a participant in this transaction.
Issue 2787: report_heuristics (ots-rtf)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: What is the exact semantics of the boolean argument report_heuristics of the
commit operation? Can heuristic exceptions be raised even if report_heuristics
is set to false? What is returned by commit, if report_heuristics is set to
false and the implementation knows that a heuristic situation has occurred
(e.g. in a situation where the transaction terminating process is also the
coordinator)?
-> When it is known that commit hasn"t completed properly, returning no
exception is not satisfactory in my opinion.
It would be good if the OTS spec could clarify this issue.
Resolution: resolved, see below
Revised Text: commit(false) is clearly present for optimization when heuristic
inconsistencies are not a concern for the caller, and if the implementation
is optimized there can't be any heuristic exceptions to report. However, a
conforming implementation is not obliged to do any optimization on
commit(false). It can wait until the end of the second phase, and thus
internally get informed about heuristic decisions. Is this particular
implementation still allowed to raise a heuristic exception in this case?
There are two possible resolutions:
a) commit(false) is not obliged to raise heuristic exceptions, but may still
do so
b) commit(false) must not raise heuristic exceptions
This resolution opts for b) which is consistent with the name of the flag. The
revised text also clarifies the original statement about the Event Service.
Revised Text:
In document ptc/99-10-07 and formal/97-12-17, on page 10-23, change
If the report_heuristics parameter is true, the Transaction Service will report
inconsistent or possibly inconsistent outcomes using the HeuristicMixed and
HeuristicHazard exceptions (defined in ?Exceptions? on page 10-16). A
Transaction Service implementation may optionally use the Event Service to
report heuristic decisions.
to
The report_heurisitcs parameter allows the application to control how long it
will block after issuing a commit. If the report_heuristics parameter is true,
the call will block until phase 2 of the commit protocol is complete and all
heuristic outcomes are known. The Transaction Service will report inconsistent
or possibly inconsistent outcomes using the HeuristicMixed and HeuristicHazard
exceptions (defined in ?Exceptions? on page 10-16). If the parameter is false,
a conforming Transaction Service must not raise these exceptions. Transaction
Service implementations may make use of this fact to block only to the end of
phase 1 when the outcome is known, but heuristics are still possible.
Heuristics that do occur may be reported to some management interface which is
more suited to taking recovery action than the application.
Actions taken:
July 6, 1999: received issue
January 16, 2001: closed issue
Discussion:
Issue 2930: IDL transparency of OTS (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: The spec seems to make a number of inconsistent and conflicting claims
about transaction propagation.
The spec says:
Page 10-5:
The Transaction Service permits an interface to have both
transactional and nontransactional implementations. No IDL
extensions are introduced to specify whether or not an operation
has transactional behavior. Transactional behavior can be a
quality of service that differs in different implementations.
I believe that this passage is simply wrong, considering the words elsewhere:
Resolution: Issue resolved with changes made by Messaging
Revised Text:
Actions taken:
October 11, 1999: received issue
January 16, 2001: closed issue
Discussion: Since the ambiguities mentioned in this issue's summary and in
its archives are addressed by the changes made to the OTS specification by
the Messaging specification, this issue can be closed without action.
Issue 2931: locality constraints (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: The spec says the following about locality constraints:
Page 10-14:
An implementation of the Transaction Service may restrict the
ability for some or all of these objects to be transmitted to
or used in other execution environments, to enable it to guarantee
transaction integrity.
[ The objects affected by this clause appear to be TransactionFactory,
Control, Resource, Terminator, and Coordinator. ]
However:
Page 10-14:
An application can propagate a transaction context by passing
the Control as an explicit request parameter. [...] When a Control
is transferred between execution environments [...].
Either I can propagate a transaction context by passing a Control object,
or I cannot. At the very least, the spec must state clearly which
objects are and are not locality constrained, otherwise I can't write
portable code.
Resolution: resolved, see below
Revised Text: The text allowing a Transaction Service to restrict the
transmission of context management objects (TransactionFactory,
Control, Resource, Terminator, and Coordinator) will be removed. None
of these objects should have locality constraints.
Revised Text:
Remove the third paragraph of section 10.2.3 Context management:
Page 10-14:
An implementation of the Transaction Service may restrict the
ability for some or all of these objects to be transmitted to
or used in other execution environments, to enable it to guarantee
transaction integrity.
(This is on page 10-14 of formal/97-12-17 and ptc/99-10-07.)
Actions taken:
October 11, 1999: received issue
January 16, 2001: closed issue
Issue 2932: ots-rtf: non-transactional objects (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: The spec says that a transactional object can call into a non-transactional
one (page 10-5). Fine. But it never says what should happen in such a case.
Resolution: All this was clarified by the resolution to issue #3245. No change required
Revised Text:
Actions taken:
October 11, 1999: received issue
May 13, 2002: closed issue
Issue 2933: ots-rtf: OTS and location transparency (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: Page 10-67 of the spec says:
The ORB will invoke the sender callbacks only when a transactional
operation is issued for an object in a different process. Objects
within the same process implicitly share the same transaction
context. The receiver callbacks are invoked when the ORB receives
a transactional request from a different process.
There are a number of problems with this paragraph:
1) "Different process" is a rather ill-defined idea. Some environments
have no such thing as a process.
2) The requirement breaks location transparency big-time,
and it appears to be unimplementable in the general case:
Resolution: This problem is made mute by text changes made by Messaging.
Revised Text:
Actions taken:
October 11, 1999: received issue
January 16, 2001: closed issue
Discussion: The text mentioned in the summary will be removed by the
Messaging changes, so this issue can be closed without action.
Issue 2934: ots-rtf: TransactionFactory (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: Page 10-21:
A TransactionFactory is located using the FactoryFinder interface
of the life cycle service and not by the resolve_initial_reference
operation on the ORB interface defined in "Example Object Adapters"
in Chapter 2 of the Common Object Request Broker: Architecture
and Specification.
There are a number of issues here:
1) The section referred to here no longer exists.
2) The life cycle is not an optional component of CORBA. Yet,
it appears that OTS cannot be implemented without the Life Cycle
Service.
3) Neither OTS nor the Life Cycle Service make a statement
as to how I could obtain the FactoryFinder interface that I
need to get the transaction factory. I therefore cannot
write portable code.
4) The OTS spec makes no statement as to, once I have obtained
a factory finder, what factory name I should provide to the
find_factories() operation in order to obtain a reference to the
transaction factory, so it is impossible to write portable code.
5) We already have resolve_initial_references to solve initial
reference problem. Why use a factory finder for this then?
In particular, resolve_initial_references("TransactionCurrent")
is already in use to obtain a reference to the Current object,
so why have two different mechanism for locating initial objects
within the same service?
Resolution: Remove the text that describes how to find the TransactionFactory in section 10.3.2.
Revised Text: Change the first paragraph of section 10.3.2 TransactionFactory Interface
from:
"The TransactionFactory interface is provided to allow the transaction
originator to begin a transaction. This interface defines two operations,
create and recreate, which create a new representation of a top-level
transaction. A TransactionFactory is located using the FactoryFinder
interface of the life cycle service and not by the resolve_initial_reference
operation on the ORB interface defined in "Example Object Adapters" in
Chapter 2 of the Common Object Request Broker: Architecture and Specification."
to:
"The TransactionFactory interface is provided to allow the transaction
originator to begin a transaction. This interface defines two operations,
create and recreate, which create a new representation of a top-level
transaction."
Actions taken:
October 11, 1999: received issue
January 9, 2001: closed issue
Discussion:
Issue 3004: Conflict in ptc/99-10-07 (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: Page 10-34:
In CORBA today, an object declares its ability to support a
shared transaction by inheriting from the TransactionalObject
interface.
However, on the same page, TransactionalObject has been deleted.
Resolution: This is indeed fixed in OTS v1.2. No change required
Revised Text:
Actions taken:
November 9, 1999: received issue
November 9, 1999: moved from OTS to Messaging
April 3, 2001: moved from messaging to the OTS RTF
May 13, 2002: closed issue
Discussion: This appears to have been fixed in OTS 1.3. But since this is a change in the
OTS Chapter, this issue should be handed over to the OTS RTF to close after verification.
Issue 3157: need interoperable XA support (ots-rtf)
Click here for this issue's archive.
Source: Oracle (Mr. Gary Hallmark, gary.hallmark(at)oracle.com)
Nature: Uncategorized Issue
Severity:
Summary: Some OTS implementations use the X/Open DTP XA interface to coordinate
resource managers. For example, the Oracle Application Server (OAS) contains
such an OTS implementation.
The OAS OTS does not implement or use the OTS Resource interface. As XA
resource managers are enlisted in a transaction, descriptors for them are
added to the TransactionContext::implementation_specific_data. When the
transaction is ready to commit, the set of enlisted RMs is handed over to a
coordinator process to drive the 2pc.
This leads to (at least) 2 problems:
1. the descriptors in the implementation_specific_data are not standard and
thus 2 different OTS implementations, both of which handle XA RMs, cannot
interoperate
2. there isn't any API to register an XA RM with the Coordinator. There
should be a method, e.g.:
Coordinator::register_XA_RM_info(string xa_driver_id, string xa_open_args)
This method would be called instead of Coordinator::register_resource when
using XA based resource managers rather than OTS Resource based resource
managers.
The xa_driver_id is like the RMID, but has global scope (the RMID is scoped
relative to an xa_switch vector, I think). For example, given an
xa_driver_id = "XA:ORACLE:1.0" and xa_open_args =
"somedbkey:somecomputer.somecompany.com" , 2 different OTS implementations
can expect to communicate with the same resource manager.
Resolution:
Revised Text: See http://cgi.omg.org/pub/otsrtf/xa_proposal/xa.html.
Actions taken:
December 21, 1999: received issue
December 21, 1999: received issue
May 13, 2002: closed issue
Discussion: Resolution:
Replace section A.2 in the Transaction Service specification by the A.2 section in http://cgi.omg.org/pub/otsrtf/xa_proposal/xa.html.
Issue 3158: need interoperable XA support (ots-rtf)
Click here for this issue's archive.
Source: Oracle (Mr. Gary Hallmark, gary.hallmark(at)oracle.com)
Nature: Uncategorized Issue
Severity:
Summary: Some OTS implementations use the X/Open DTP XA interface to coordinate
resource managers. For example, the Oracle Application Server (OAS) contains
such an OTS implementation.
The OAS OTS does not implement or use the OTS Resource interface. As XA
resource managers are enlisted in a transaction, descriptors for them are
added to the TransactionContext::implementation_specific_data. When the
transaction is ready to commit, the set of enlisted RMs is handed over to a
coordinator process to drive the 2pc.
This leads to (at least) 2 problems:
1. the descriptors in the implementation_specific_data are not standard and
thus 2 different OTS implementations, both of which handle XA RMs, cannot
interoperate
2. there isn't any API to register an XA RM with the Coordinator. There
should be a method, e.g.:
Coordinator::register_XA_RM_info(string xa_driver_id, string xa_open_args)
This method would be called instead of Coordinator::register_resource when
using XA based resource managers rather than OTS Resource based resource
managers.
The xa_driver_id is like the RMID, but has global scope (the RMID is scoped
relative to an xa_switch vector, I think). For example, given an
xa_driver_id = "XA:ORACLE:1.0" and xa_open_args =
"somedbkey:somecomputer.somecompany.com" , 2 different OTS implementations
can expect to communicate with the same resource manager.
Resolution: Duplicate
Revised Text:
Actions taken:
October 18, 2000:
May 13, 2002: closed issue
Issue 3166: Bug in transaction spec (ots-rtf)
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: There is a minor bug in the transaction service IDL:
interface Synchronization : TransactionalObject
{
#pragma version Synchronization 1.1
void before_completion();
void after_completion(in Status status);
^^^^^^^^^^^^^
};
This is illegal IDL. Suggest to change to "in Status s".
Resolution: This resolution for this issue is to change the name of after_completion's argument from "status"
Revised Text: The IDL for after_completion on page On page 10-32, section 10.3.8, should
be changed from from:
void after_completion(in Status status);
to:
void after_completion(in Status s);
Actions taken:
December 25, 1999: received issue
January 9, 2001: closed issue
Issue 3343: Clarification - Transaction Policy (ots-rtf)
Click here for this issue's archive.
Source: International Business Machines (Mr. Thomas Freund, nobody)
Nature: Clarification
Severity:
Summary: Since the updates for TransactionPolicy remove all references to the
TransactionalObject Interface how is backward compatibility addressed. As
existing BOA/TransactionalObject implementations will continue to exist how
do we expect these to interact with the proposed POA/Policy-based
implementations.
Resolution: resolved, see below
Revised Text: Modify the Synchronization interface definition in Section 10.3.8 as
follows:
// TransactionalObject has been deprecated. See 10.3.10.
// Use a TransactionPolicyValue of "REQUIRES_SHARED" to
// indicate transactionality.
interface Synchronization : TransactionalObject {
void before_completion();
void after_completion(in Status status);
};
The above change has to be reflected in the CosTransactions module 10.6.
Modify the text in section 10.3.10 as follows:
Replace the first paragraph with:
The TransactionalObject interface is a remnant of previous versions
of this specification and is no longer used. It is retained here
only for backward compatibility with OTS 1.0 and OTS 1.1.
[ Box showing
interface TransactionalObject {};
]
The above is to be done instead of removing that section. Adding
this section back to the specification will mean that the following
sections will need to be renumbered:
Renumber the section called "Transaction Policy" (added by Messaging)
from 10.3.10 to 10.3.11.
Renumber the section called "Creating Transactional Object References"
(added by Messaging) from 10.3.11 to 10.3.12.
Add these two line to the CosTransactions module in section 10.6:
// TransactionalObject has been deprecated. See 10.3.10.
interface TransactionalObject {};
Actions taken:
February 22, 2000: received issue
January 9, 2001: closed issue
Discussion: Instead of completely removing the TransactionalObject
interface, it will instead be deprecated with a note saying that it
is in the CosTransactions module only for backward compatibility with
OTS 1.0 and 1.1. The Synchronization interface will also still inherit
from TransactionalObject.
Issue 3357: OTS-RTF issue: spelling/case of transaction policy values (ots-rtf)
Click here for this issue's archive.
Source: ZeroC (Mr. Bernard Normier, bernard(at)zeroc.com)
Nature: Uncategorized Issue
Severity:
Summary: The Messaging spec defined a strange case for transaction policy values.
>From http://www.omg.org/pub/orbrev/drafts/10_trs11.pdf:
const TransactionPolicyValue Allows_shared = 0;
const TransactionPolicyValue Allows_none = 1;
etc.
I suggest to use instead the AB recommended case for IDL constants, i.e.
all caps (see http://www.omg.org/docs/ab/98-06-03.pdf, 2.1.3):
const TransactionPolicyValue ALLOWS_SHARED = 0;
const TransactionPolicyValue ALLOWS_NONE = 1;
etc.
Resolution: see above
Revised Text:
Actions taken:
February 23, 2000: received issue
February 27, 2001: closed issue
Discussion: Since TransactionPolicyValue has been deprecated as part of the resolution
for issue 3425, this issue is being closed without action.
Issue 3417: TransactionalObject remnants (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: On page 10-35 of ptc/99-10-07, the text talks about TransactionalObject
at the bottom of the page. However, TransactionalObject is deleted
at the top of the page, so the two edits don't go together.
Also, near the bottom of the page, we have:
"In CORBA today, an object declares..."
This will be completely meaningless in two years' time. If anything,
such things must be expressed in terms of version numbers for the spec.
Resolution: resolved, see below
Revised Text: In section 10.3.10, under the heading "Design Rationale", change
the second paragraph
from:
"In CORBA today, an object declares its ability to support a
shared transaction by inheriting from the TransactionalObject
interface. Such an object will always receive a shared transaction
if one is active, but will not receive one when there is no active
transaction. This behavior is more accurately described as allowing
a shared transaction, since the object may or may not receive a
shared transaction. Today s CORBA does not provide a mechanism to
require a shared transaction at invocation time since an object
which does not inherit from TransactionalObject may not receive
a shared transaction, even when one is active. This produces the
following two by two matrix of possible choices for shared
transaction support: "
to:
"In OTS 1.0 and OTS 1.1, an object declared its ability to
support a shared transaction by inheriting from an empty
interface called TransactionalObject. Such an object always
received a shared transaction if one was active, but did not
receive one when there was no active transaction. This behavior
is more accurately described as allowing a shared transaction,
since such an object may or may not receive a shared transaction.
OTS 1.0 and OTS 1.1 did not provide a mechanism to require a
shared transaction at invocation time since an object which
did not inherit from the TransactionalObject interface was
not required to receive a shared transaction, even when one was
active. This behavior produces the following two by two matrix
of possible choices for shared transaction support: "
Actions taken:
March 14, 2000: received issue
January 16, 2001: closed issue
Discussion: Phrases like "CORBA today" will be changes to "CORBA 2.3".
TransactionalObject will be briefly explained in the passage mentioned
in the summary so that it can be understood by those unfamiliar with
CORBA 2.3.
Issue 3420: Component tag definition missing (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: Page 35 of ptc/99-10-07 talks about the transaction policies in IORs.
This is incomplete, because the relevant tags must be defined in chapters
13 and 15 of the spec, but aren't.
Resolution: duplicate
Revised Text:
Actions taken:
March 15, 2000: received issue
February 27, 2001: closed issue
Issue 3421: CosTSInteroperation not specified (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: Section 10.3.11 of ptc/99-10-07 shows the CosTSInteroperation module.
However, that module does not appear in section 10.6, but should.
In general, a sanity check of 10.6 against the rest of the spec seems
advisable, so we can be sure that they actually match.
Resolution: duplicate
Revised Text:
Actions taken:
March 15, 2000: received issue
February 27, 2001: closed issue
Issue 3422: TranactionPolicyValue definition? (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: Page 35 of ptc/99-10-07 shows the TransactionPolicy interface.
That interface contains an attribute of type TransactionPolicyValue, but
that type is not defined anywhere.
Resolution: duplicate
Revised Text:
Actions taken:
March 15, 2000: received issue
February 27, 2001: closed issue
Issue 3423: TransactionalPolicyComponent definition (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: Page 36 of ptc/99-10-07 defines TransactionPolicyComponent.
That type is a struct with a single member. It doesn't make sense to have
a structure with only one member, so it would seem advisable to drop
the structure.
Resolution: duplicate
Revised Text:
Actions taken:
March 15, 2000: received issue
February 27, 2001: close issue
Issue 3424: Policy interrogation API? (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: Given that OTS will roll back on at least most system exceptions,
the transaction policies create a problem. In particular, we have a
policy that requires a transaction and a policy that requires no transaction.
There is no way for the client to find out what the transaction policy for a
given IOR actually is; as a result, the client is likely have transactions
roll back without warning and no possible workaround.
Clients could encapsulate each operation invocation in its own nested
transaction, but nested transactions are not supported by all OTS
implementations and, at any rate, the approach is ugly and very expensive.
It appears that clients will require a way to get the transaction policy
from an IOR so they can at least suspend a transaction before making a
call on an object that disallows a transaction.
It also strikes me as strange that an object is allowed to prohibit a client
from invoking an object with a transaction context. If we didn't permit
an object to do this, we wouldn't have a need for clients to interrogate
the policies... Is it really necessary to have this feature in the spec,
given the complications it creates?
Resolution: duplicate
Revised Text:
Actions taken:
March 15, 2000: received issue
February 27, 2001: closed issue
Issue 3425: IORs without policies? (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: ptc/99-10-07 is silent about what an OTS should do if the client invokes
an object that does not have transaction policies in its IOR.
For an IOR without a transaction policy, there are two cases:
- The object inherits from TransactionalObject (is a legacy OTS object)
In this case, the logical thing to do would seem to send the
transaction context.
- The object does not inherit from TransactionalObject
It's a little less clear to me what to do in this case.
During the discussion we had in Denver, the feeling was that
1) the context should be sent anyway
2) the receiving ORB should be obliged to use the the
transaction context it received and send that same
transaction context with any nested calls it makes
to other objects
Currently, the spec does not contain any words that would force
point (2).
Overall, it seems to me that sending the transaction context unconditionally
is probably the best thing to do. Quite often, the client ORB will be forced
to send an is_a message over the wire to determine whether or not an
object inherits from TransactionalObject. That's an extra round-trip,
which isn't cheap. Assuming that, if a client uses transactions, most
of the objects it talks to will indeed be transactional, the cost of
unconditionally propagating the transaction context would be minimal.
And, given that for almost all calls, the cost is dominated by the
dispatch delay, it seems that the extra bytes for the context wouldn't
noticably hurt performance.
At any rate, we need to specify the behavior for context propagation for:
- the client side, for both TransactionalObject interfaces and
ones that don't inherit from TransactionalObject
- the server side, stating how the server must behave for nested
calls
Resolution: resolved, see below
Revised Text: The text changes voted on in this resolution were presented to the
OTS RTF in an attached document called ots-mini-doc-Ed092100.pdf.
This docuement was attached to the email sent to the OTS RTF announcing
this vote and was(is) also available via this URL:
http://cgi.omg.org/pub/otsrtf/ots-mini-doc-Ed092100.pdf
The changes made by this resolution (as well as all the changes made
by other issues' resolutions) have been rolled into the document
ptc/2000-09-04 for convenience.
The changes are also presented here:
Section 10.2.4 will be changed to use the following text:
10.2.4 Datatypes
The CosTransactions module defines the following datatypes:
[box]
enum Status {
StatusActive,
StatusMarkedRollback,
StatusPrepared,
StatusCommitted,
StatusRolledBack,
StatusUnknown,
StatusNoTransaction,
StatusPreparing,
StatusCommitting,
StatusRollingBack
};
enum Vote {
VoteCommit,
VoteRollback,
VoteReadOnly
};
// Old definitions are retained for backward compatibility. //
// TransactionPolicyValue definitions are deprecated and replaced with new InvocationPolicy //
// and OTSPolicy definitions which are defined below //
// Old definitions are retained for backward compatibility. //
typedef unsigned short TransactionPolicyValue;
const TransactionPolicyValue Allows_shared = 0;
const TransactionPolicyValue Allows_none = 1;
const TransactionPolicyValue Requires_shared = 2;
const TransactionPolicyValue Allows_unshared = 3;
const TransactionPolicyValue Allows_either = 4;
const TransactionPolicyValue Requires_unshared = 5;
const TransactionPolicyValue Requires_either = 6;
typedef unsigned short InvocationPolicyValue;
const InvocationPolicyValue EITHER = 0;
const InvocationPolicyValue SHARED = 1;
const InvocationPolicyValue UNSHARED =2;
typedef unsigned short OTSPolicyValue;
const OTSPolicyValue REQUIRES = 1;
const OTSPolicyValue FORBIDS =2;
const OTSPolicyValue ADAPTS =3;
typedef unsigned short NonTxTargetPolicyValue;
const NonTxTargetPolicyValue PREVENT = 0;
const NonTxTargetPolicyValue PERMIT = 1;
[box]
The CosTSInteroperation module defines the following datatypes:
[box]
const IOP::ComponentId TAG_TRANSACTION_POLICY= 26;
struct TransactionPolicyComponent {
CosTransactions::TransactionPolicyValue tpv;
};
const IOP::ComponentId TAG_OTS_POLICY= 31;
const IOP::ComponentId TAG_INV_POLICY= 32;
[box]
Section 10.3.8 will be changes to use the following text:
10.3.8 Synchronization Interface
The Transaction Service provides a synchronization protocol which enables an object
with transient state data that relies on an X/Open XA conformant Resource Manager
for ensuring that data is made persistent,to be notified before the start of the two-phase
commitment protocol, and after its completion. If the transaction is instructed to roll
back rather than be committed, the object will only be notified after rollback
completes.An object with transient state data that relies on a Resource object
for ensuring that data is made persistent can also make use of this protocol, provided that
both objects are registered with the same Coordinator. Each object supporting the
Synchronization interface is implicitly associated with a single top-level transaction.
[box]
// TransactionalObject has been deprecated //
// and replaced by the use of the OTSPolicy component //
// Inheritance from TransactionalObject is for backward compatability //
interface Synchronization : TransactionalObject {
void before_completion();
void after_completion(in Status status);
};
[box]
before_completion
This operation is invoked prior to the start of the two-phase commit protocol within the
coordinator the Synchronization has registered with. This operation will therefore be
invoked prior to prepare being issued to Resource objects or X/Open Resource
Managers registered with that same coordinator. The Synchronization object must
ensure that any state data it has that needs to be made persistent is made available
to the resource.
Only standard exceptions may be raised. Unless there is a defined recovery procedure
for the exception raised, the transaction should be marked rollback only.
after_completion
Regardless of how the transaction was originally instructed to terminate, this operation
is invoked after all commit or rollback responses have been received by this
coordinator. The current status of the transaction (as determined by a get_status on the
Coordinator) is provided as input.
Only standard exceptions may be raised and they have no effect on the outcome of the
transaction termination.
Section 10.3.11 will be changed to use the following text:
10.3.11 Policy Interfaces
The Transaction Service utilizes POA policies to define characteristics related to
transactions. These policies are encoded in the IOR as a tag components and exported
to the client when an object reference is created. This enables validation that a
particular object is capable of supporting the transaction characteristics expected by the
client.
Background
The introduction of asynchronous messaging (AMI) into CORBA requires a new form
of transaction model to be supported. The current CORBA model, the shared
transaction model, provides an end to end transaction shared by the client and the
server. This model cannot be supported by asynchronous messaging. Instead, a new
model, which uses a store and forward transport between the client and server, is
introduced. In this new model, the communication between client and server is broken
into separate requests, separated by a reliable transmission between routers. When
transaction are used, this model uses multiple shared transactions, each executed to
completion before the next one begins. This transaction model is called the unshared
transaction model.
Design Rationale
Introducing the unshared transaction model into CORBA requires enhancements to the
current method for specifying transactional behavior which currently defines only the
shared transaction model. The different models of transactional behaviors are more
properly implementation properties, suggesting that they not be declared in interfaces.
Instead they are specified by the server using POA policies and made available to the
client via IOR profile components.
In OTS 1.0 and OTS 1.1, an object declared its ability to support a shared transaction
by inheriting from an empty interface called TransactionalObject. This mechanism had
weak transaction semantics, since it was also used by the infrastructure to control
transaction propagation. Such an object always received a shared transaction if one was
active, but did not receive one when there was no active transaction. This behavior is
more accurately described as allowing a shared transaction, since it provided no
guarantee to the client as to what the object might do if it did or did not receive a
shared transaction. This weak semantic is not carried forward as an explicit policy.
OTS 1.0 and OTS 1.1 did not provide a mechanism to require a shared transaction at
invocation time. This behavior produces the following two by two matrix of possible
choices for shared transaction support:
[table]
Shared Transaction Behaviors
Transactions None Shared
Requires no inheritance from cannot be specified
TransactionalObject with OTS 1.1
Allows no inheritance from inheritance from
TransactionalObject TransactionalObject
[table]
* cell (1,1) - the object requires `no transaction'
* cell (1,2) - the object requires a shared transaction
* cell (2,1) - the object allows `no transaction'
* cell (2,2) - the object allows a shared transaction
OTSPolicy
Although the use of TransactionalObject is maintained for backward compataibility,
explicit transactional behaviors are now encoded using OTSPolicy values which are
independent of the transaction propagation rules used by the infrastructure. These
policies and their OTS 1.1 equivalents are defined as follows:
[table]
New Shared Transaction Behaviors
OTSPolicy Policy Value OTS 1.1 Equivalent
Reserved [1] 0 inheritance from TransactionalObject
REQUIRES 1 No equivalent
FORBIDS 2 no inheritance from TransactionalObject [2]
ADAPTS [3] 3 No equivalent
[table]
[1] - The ALLOWS semantics associated with inheritance from TransactionalObject
cannot be coded as an explicit OTSPolicy value in OTS 1.2.
[2] - FORBIDS is more restrictive than the absense of inheritance from
TransactionalObject since it may raise the INVALID_TRANSACTION exception.
[3] - ADAPTS provides a stronger client-side guarantee than inheritance from
TransactionalObject
* REQUIRES - The behavior of the target object depends on the existence of a
current transaction. If the invocation does not have a current transaction, a
TRANSACTION_REQUIRED exception will be raised.
* FORBIDS - The behavior of the target object depends on the absence of a current
transaction. If the invocation does have a current transaction, an
INVALID_TRANSACTION exception will be raised.
* ADAPTS - The behavior of the target object will be adjusted to take advantage of a
current transaction, if one exists. If not, it will exhibit a different behavior. i.e., the
target object is sensitive to the presence or absence of a current transaction.
OTSPolicy values are encoded in the TAG_OTS_POLICY component of the IOR and
will always be present when IORs are created by OTS-aware ORBs at the OTS 1.2
level or above. If an OTSPolicy is not present in the IOR, the client may assume that it
was created by an OTS-unaware ORB or an OTS-aware ORB at the OTS 1.1 level or
below. To distinguish the two, it is necessary to determine whether the target object
inherits from TransactionalObject and use the mapping defined in the table below.
[table]
Mapping empty TAG_OTS_POLICY components to OTSPolicy values
Inheritance from OTSPolicy Value
TransactionalObject
NO FORBIDS[1]
YES ADAPTS[2]
[table]
[1] - The mapping applies to the policy checking rules only. FORBIDS has stronger
transactional semantics than the absense of inheritance from TransactionalObject.
[2] - The mapping applies to the policy checking rules only. ADAPTS has stronger
transactional semantics than the use of inheritance from TransactionalObject.
An OTSPolicy object cannot be associated with a POA on an OTS-unaware ORB so
those POAs create IORs with no TAG_OTS_POLICY component.
InvocationPolicy
With the introduction of messaging, the unshared transaction model is used when the
request is made via a router. The InvocationPolicy specifies which form of invocation
is supported by the target object. The InvocationPolicy is defined as follows:
[table]
InvocationPolicy Behaviors
InvocationPolicy Policy Value
EITHER 0
SHARED 1
UNSHARED 2
[table]
* EITHER - The behavior of the target is not affected by the mode of client
invocation. Both direct invocations (synchronous) and invocations using routers
(asynchronous) are supported.
* SHARED - all invocations which do not involve a routing element (i.e., the client
ORB directly invokes the target object with no intermediete routers). This includes:
* synchronous stub based invocations,
* synchronous or deferred synchronous invocations using Dynamic Invocation
Interface (DII),
* Asynchronous Method Invocations (AMI) with an effective RoutingPolicy of
ROUTE_NONE.
* UNSHARED - all invocations which involve a routing element. This includes
Asynchronous Method Invocations (AMI) with an effective RoutingPolicy of
ROUTE_FORWARD or ROUTE_STORE_AND_FORWARD.
The InvocationPolicy component is significant only when transactions are used with
CORBA messaging.
InvocationPolicy values are encoded in the TAG_INV_POLICY component of the IOR.
If an InvocationPolicy is not present in the IOR, it is interpreted as if the
TAG_INV_POLICY was present with a value of EITHER.
Interactions between InvocationPolicy and OTSPolicy
Although InvocationPolicy and OTSPolicy are distinct policies, not all combinations
are valid. The valid choices are shown in the following table:
[table]
InvocationPolicy and OTSPolicy combination
InvocationPolicy/
OTSPolicy EITHER SHARED UNSHARED
REQUIRES ok ok ok
Requires_either Requires_shared Requires_unshared
FORBIDS invalid ok invalid
Allows_none
ADAPTS invalid ok invalid
Allows_shared
[table]
Transactional target objects which accept invocations via routers must support shared
transactions, since the routers use the shared transaction model to reliably forward the
request to the next router or the eventual target object.
Invalid policy combinations are detected when the POA is created (see section
10.3.12).
NonTxTargetPolicy Policy
The NonTxTargetPolicy Policy is used to control the ability for clients to make requests
on non-transactional objects while in the scope of an active transaction. A non-
transactional object has an IOR that either contains a TAG_OTS_POLICY component
with a value of FORBIDS or does not contain a TAG_OTS_POLICY component at all.
The NonTxTargetPolicy policy is an ORB-policy that is set by the client application
using the ORB::create_policy interface. Once set, the policy is used to control whether
requests on non-transactional targets will raise the INVALID_TRANSACTION
exception (PREVENT) or will be permitted to proceed normally (PERMIT).
Policy Interface Definitions
The new policy interfaces are defined in the CosTransactions module
These interfaces are defined by the following IDL:
[box]
module CosTransactions {
// TransactionPolicyType is deprecated and replaced //
// by InvocationPolicyType and OTSPolicyType //
// It is retained for backward compatibility. //
typedef unsigned short TransactionPolicyValue;
const CORBA::PolicyType TransactionPolicyType = 46;
interface TransactionPolicy : CORBA::Policy {
readonly attribute TransactionPolicyValue tpv;
};
const CORBA::PolicyType INVOCATION_POLICY_TYPE = 55;
typedef unsigned short InvocationPolicyValue;
interface InvocationPolicy : CORBA::Policy {
readonly attribute InvocationPolicyValue ipv;
};
const CORBA::PolicyType OTS_POLICY_TYPE = 56;
typedef unsigned short OTSPolicyValue;
interface OTSPolicy : CORBA::Policy {
readonly attribute OTSPolicyValue tpv;
};
const CORBA::PolicyType NON_TX_TARGET_POLICY_TYPE = 57;
typedef unsigned short NonTxTargetPolicyValue;
interface NonTxTargetPolicy : CORBA::Policy {
readonly attribute NonTxTargetPolicyValue tpv;
};
};
[box]
Section 10.3.12 will use the following text:
10.3.12 Creating Transactional Object References
Object references are created as defined by the POA. An OTSPolicy object is created
by invoking ORB::create_policy with a PolicyType of OTSPolicyType and a value of
type OTSPolicyValue. An InvocationPolicy may also be associated with a POA using
the same mechanism. When either or both of these policies are associated with a POA,
the POA will create object references with either or both policies encoded as a tagged
components in the IOR:
* OTSPolicy objects can only be used with POAs that support an OTS-aware ORB at
the OTS 1.2 level or above
* InvocationPolicy objects can only be used with POAs that support an OTS-aware
ORB at the OTS 1.2 level or above
If a POA is not created with either policy object on an OTS-aware ORB at the OTS 1.2
level or higher, that POA is created as if an OTSPolicy object were present with its
value set to FORBIDS.
If a POA is created on an OTS-unaware ORB, that POA creates object references that
do not include either tag component.
Transaction-unaware POAs
A transaction-unaware POA is any POA created on an OTS-unaware ORB. A
transaction-unaware POA will never create a TAG_OTS_POLICY component in any
IORs it creates. Transaction-unaware POAs cannot be created on an OTS-aware ORB
with an associated OTS 1.2 or higher implementation, however it is possible to create
a POA which does not support transactions on an OTS-aware ORB (see the next
section).
Transaction-aware POAs
A transaction-aware POA is any POA which is created on an OTS-aware ORB with an
associated OTS 1.2 or higher implementation. A transaction-aware POA will include
tag components in IORs it creates for OTSPolicy values and optionally
InvocationPolicy values.
* Transaction-aware POAs can only be created in a server which has an OTS 1.2 or
higher implementation associated with its ORB (i.e. an OTS-aware ORB)
* If an application attempts to create a POA with an OTSPolicy object in a server
which does not have an associated OTS (i.e.an OTS-unaware ORB), the
InvalidPolicy exception is raised
* A POA which does not support transactions is created in an OTS-aware ORB with
an OTSPolicy object with a FORBIDS policy value and is still called a transaction-
aware POA.
* Transaction-aware POAs must have at least an OTSPolicy object associated with
them. If an OTSPolicy is not provided explicity, an OTSPolicy object is created
implicitly with a value of FORBIDS.
* Transaction-aware POAs may (but need not) have InvocationPolicy objects
associated with them.
* An attempt to create a transaction-aware POA with conflicting OTSPolicy and
InvocationPolicy values (as defined in Table , "InvocationPolicy and OTSPolicy
combinations," on page 11) will raise the InvalidPolicy exception.
The following table summarizes the relationship between POA creation and IOR
components on both OTS-unaware and OTS-aware ORBs:
[table]
POA creation and IOR components
create_POA OTS-unaware OTS-aware ORB
ORB
POA Policies Result Result TAG_INV_POLICY TAG_OTS_POLICY
Neither ok ok NO YES
(with FORBIDS)
InvocationPolicy raise
SHARED InvalidPolicy ok YES YES
(with FORBIDS)
InvocationPolicy
EITHER or raise raise
UNSHARED InvalidPolicy InvalidPolicy - -
OTSPolicy raise
InvalidPolicy ok NO YES
Both
with valid raise
combinations InvalidPolicy ok YES YES
Both
with invalid raise raise
combinations InvalidPolicy InvalidPolicy - -
[table]
Impact of Transactions on the POA
When there is a current transaction in effect established, the POA's Servant location
function is performed within the scope of that transaction. The POA is responsible for
making sure that all invocations on a Servant Locator which can result in reading or
writing persistent storage (pre_invoke and post_invoke) execute within the scope of the
current transaction. Activators are not invoked as part of the transaction. The
following behaviors must be made explicit:
* A Servant Locator cannot send the operation reply to the client until post_invoke
has completed successfully.
* Certain failures in these operation calls take precedence over sending replies, e.g.
TRANSACTION_ROLLEDBACK, and must be raised back to the client.
* ServantActivator and AdapterActivator invocations are not within the scope of the
transaction. An Activator implementation must start its own transaction if its
actions are to take place within a transaction.
Appearance of Policy Components in IORs
The component body for OTSPolicy and InvocationPolicy are encoded as a CDR
encapsulations of the following IDL:
[box]
// The TAG_TRANSACTION_POLICY component is deprecated and //
// replaced by InvocationPolicy and OTSPolicy components //
// It is retained for backward compatibility only. //
module CosTSInteroperation {
const IOP::ComponentId TAG_TRANSACTION_POLICY=26:
struct TransactionPolicyComponent {
CosTransactions::TransactionPolicyValue tpv;
};
const IOP::ComponentId TAG_OTS_POLICY= 31;
const IOP::ComponentId TAG_INV_POLICY= 32;
};
[box]
Section 10.5.2 will use the following text:
10.5.2 ORB/TS Implementation Considerations
The Transaction Service and the ORB must cooperate to realize certain Transaction
Service function. This cooperation is realized on the client invocation path and
through the transaction interceptor. The client invocation path is present even in an
OTS-unaware ORB and is required to make certain checks to ensure successful
interoperability. The transaction interceptor is a request-level interceptor that is bound
into the invocation path. This cooperation is discussed in greater detail in the following
sections.
Policy Checking Requirements
This section describes the policy checks which are required on the client side before a
request is sent to a target object and the server side when a request is received. The
client invocation path is used to describe components of the client-side ORB which
may include the ORB itself, the generated client stub, CORBA messaging, and the
OTS interceptor. This function will be more rigorously assigned to each of these
components in a future revision of the OTS specification. The server side includes the
server-side ORB, the POA, and the OTS interceptor.
Client behavior when making transactional invocations
When a client makes a request on a target object, the behavior is influenced by the type
of invocation, the existence of an active client transaction and the InvocationPolicy and
OTSPolicy associated with the target object. The client invocation path must verify that
the client invocation mode matches the requirements of the target object. This requires
checking the InvocationPolicy encoded in the IOR and, in some cases, the OTSPolicy.
The required behavior is completely described by the following tables.
[table]
InvocationPolicy checks required on the client invocation path
Invocation Mode InvocationPolicy Required Action
Synchronous EITHER ok; check OTSPolicy
SHARED ok; check OTSPolicy
UNSHARED raise
TRANSACTION_MODE
Asynchronous EITHER ok; check OTSPolicy
SHARED raise
TRANSACTION_MODE
UNSHARED ok; check OTSPolicy
[table]
An invocation is considered synchronous if it uses a standard client stub, the DII, or
AMI with an effective routing policy of ROUTE_NONE. An invocation is considered
asynchronous if it uses the features of CORBA messaging to invoke on a router rather
than the target object.
[table]
OTSPolicy checks required on the Client Invocation Path
OTSPolicy OTS-unaware ORB OTS-aware ORB
REQUIRES raise
TRANSACTION_UNAVAILABLE call OTS interceptor
FORBIDS process invocation call OTS interceptor
ADAPTS process invocation call OTS interceptor
[table]
In the case of routed invocations, the client invocation path must substitute an
appropriate router IOR before the OTSPolicy checks are executed. This ensures that the
OTSPolicy checks are done against the correct IOR.
The client OTS interceptor is required to make the following policy checks before
processing the transaction context. Transaction context processing is described in
"Behavior of the Callback Interfaces" on page 10-31."
[table]
OTSPolicy checking required by client OTS interceptor
OTSPolicy Current Transaction No Current Transaction
REQUIRES process transaction raise
TRANSACTION_REQUIRED
FORBIDS [1] PREVENT - raise process invocation
INVALID_TRANSACTION
PERMIT - process transaction
ADAPTS process transaction process invocation
[table]
[1] FORBIDS processing depends on the setting of the NonTxTargetPolicy policy
Server-side behavior when receiving transactional invocations
Since the active transaction state as seen by the server-side can be different than the
state observed by the client ORB, the server-side is also required to make the
OTSPolicy checks These checks will be made prior to the service context propagation
checks defined in "Behavior of the Callback Interfaces" on page 10-31.
[table]
OTSPolicy checks required on the Server-side
OTSPolicy OTS-unaware ORB OTS-aware ORB
REQUIRES raise
TRANSACTION_UNAVAILABLE call OTS interceptor
FORBIDS process invocation call OTS interceptor
ADAPTS process invocation call OTS interceptor
[table]
The server OTS interceptor is required to make the following policy checks before
processing the transaction context. Transaction context processing is described in
"Behavior of the Callback Interfaces" on page 10-31."
[table]
OTSPolicy checking required by server OTS interceptor
OTSPolicy Current Transaction No Current Transaction
REQUIRES process transaction raise
TRANSACTION_REQUIRED
FORBIDS raise
INVALID_TRANSACTION process invocation
ADAPTS process transaction process invocation
[table]
Alternate Client processing for FORBIDS OTSPolicy component
When the NonTxTargetPolicy policy is set to PERMIT, the processing of the FORBIDS
value (whether it is explicity encoded as a TAG_OTS_POLICY component or
determined by the absense of inheritance from TransactionalObject) does not raise the
INVALID_TRANSACTION exception. Instead it is altered as described below.
Since an OTS must be present for a client to have a current transaction at the time an
invocation is made, the client OTS interceptors must also be present within the client
environment. This permits an alternative behavior to be implemented on the client-side
which maintains compatibility with prior versions of OTS and simplifies client
programming when making invocations on non-transactional objects. This alternative
behavior is summarized below:
* When the target object supports the FORBIDS policy, the alternative behavior is
implemented if the NonTxTargetPolicy policy is set to PERMIT.
* The client-side request interceptor must ensure that the current transaction is
inactive before the transaction propagation checks are executed ("Behavior of the
Callback Interfaces" on page 10-31)
* The current transaction must be made active after the request has successfully
executed.
The current transaction can be made inactive by performsing the equivalent of a
suspend operation on the current transaction prior to implementing the transaction
propagation rules and made active again by performing the equivalent of a resume
operation when the response is returned to restore the client's current transaction. An
implementation which produces equivalent results but does not use the suspend and
resume operation defined by this specification is conformant.
This preserves the client programming model of earlier OTS levels while still
guaranteeing that transactions will not be exported to environments which do not
understand transactional semantics.
Interoperation with OTS 1.1 servers and clients
When OTS 1.2 clients are interoperating with OTS 1.1 servers (i.e. the IOR does not
contain an (EC) OTSPolicy TAG_OTS_POLICY component) the client invocation path
must determine if the target object inherits from TransactionalObject. If it does, it
processes the request as if the OTSPolicy value was ADAPTS. If it does not, it
processes the request as if the OTSPolicy value was FORBIDS and uses the
NonTxTargetPolicy policy to determine the correct behavior.
OTS 1.1 clients may not interoperate with OTS 1.2 servers unless they unconditionally
propagate the transaction context. (TF) The OTS 1.2 server determines the proper
OTSPolicy from the TAG_OTS_POLICY component in the IOR.
An OTS 1.2 object that also inherits from the deprecated TransactionalObject (for
backward compatibility) must create POAs with a OTSPolicy value of REQUIRES or
ADAPTS - any other policy value is illegal and is an implementation error.
[This proposal makes no changes to the rest of section 10.5.2.]
Section 10.6 will use the following IDL:
#include <orb.idl>
module CosTransactions {
// DATATYPES
enum Status {
StatusActive,
StatusMarkedRollback,
StatusPrepared,
StatusCommitted,
StatusRolledBack,
StatusUnknown,
StatusNoTransaction,
StatusPreparing,
StatusCommitting,
StatusRollingBack
};
enum Vote {
VoteCommit,
VoteRollback,
VoteReadOnly
};
// TransactionPolicyValue definitions are deprecated and replaced with new InvocationPolicy //
// and OTSPolicy definitions which are defined in CosPolicyDef module. //
// They are retained for backward compatibility. //
typedef unsigned short TransactionPolicyValue;
const TransactionPolicyValue Allows_shared = 0;
const TransactionPolicyValue Allows_none = 1;
const TransactionPolicyValue Requires_shared = 2;
const TransactionPolicyValue Allows_unshared = 3;
const TransactionPolicyValue Allows_either = 4;
const TransactionPolicyValue Requires_unshared = 5;
const TransactionPolicyValue Requires_either = 6;
// Structure definitions
struct otid_t {
long formatID; /*format identifier. 0 is OSI TP */
long bqual_length;
sequence <octet> tid;
};
struct TransIdentity {
Coordinator coord;
Terminator term;
otid_t otid;
};
struct PropagationContext {
unsigned long timeout;
TransIdentity current;
sequence <TransIdentity>
Actions taken:
March 15, 2000: received issue
January 9, 2001: closed issue
Discussion: To address the issues brought up in this issue's summary
and follow-up discussions (see this issues archive), the OTS RTF
has decided that changes need to be made to the text that was added
to the OTS specification by the Messaging specification.
The rationale for these changes can be found in this issue's
archive.
Issue 3536: OTS interoperability - need for unique branch ids (ots-rtf)
Click here for this issue's archive.
Source: Oracle (Mr. Ram Jeyaraman, nobody)
Nature: Uncategorized Issue
Severity:
Summary: OTS 1.1 + Messaging spec additions to OTS 1.1 seems to provide a clean way for specifying
transaction interoperability. Even though, it does not guarantee that all current vendor
implementations will interoperate, the vendors will be able to interoperate if they strictly adhere
to the OTS protocol.
But we see issues with OTS interoperability when X/Open XA protocol is used by vendor
implementations to talk to XA-compliant Resource Managers
as part of a global distributed transaction across multiple servers.
Typically, every server involved in a distributed transaction will generate a new transaction branch
for the work done by that server as part of the global transaction.
This issue hinges on the need for a mechanism to ensure uniqueness of transaction branch generation.
This is very important when servers involved in a distributed transaction talk to the same RM. In
such a case, if uniqueness of transaction branches is not ensured, then it may cause
problems during regular 2PC flow or recovery processing.
This branch id generation is a non-issue if the participant servers are homogenous, since the
implementation_specific_data could be used to transmit proprietary information as part of the
transaction propagation context.
To summarize, if two servers (from different vendors) involved in a distributed transaction happen
to talk to the same RM using the same XID, then it may lead to problems during regular 2PC flow or
during recovery processing. It will be desirable to have some way of ensuring uniquess of branch ids
across servers involved in a distributed transaction.
Resolution: see above
Revised Text:
Actions taken:
April 7, 2000: received issue
May 13, 2002: closed issue
Discussion: Resolution:
Replace section A.2 in the Transaction Service specification by the A.2 section in http://cgi.omg.org/pub/otsrtf/xa_proposal/xa.html.
Revised Text:
See http://cgi.omg.org/pub/otsrtf/xa_proposal/xa.html.
Issue 3559: Transaction policy IDL missing (ots-rtf)
Click here for this issue's archive.
Source: Hewlett-Packard (Dr. Jishnu Mukerji, jishnu(at)hp.com)
Nature: Uncategorized Issue
Severity:
Summary: The IDL for TransactionPolicy and TransactionPolicyComponent needs to be include in the
CosTransaction module. As far as I can tell that is where these belong, since they certainly don't
seem to belong anywhere else. They are missing in ptc/99-10-07. I don't know if this has been fixed
in a later draft.
Resolution: duplicate
Revised Text:
Actions taken:
April 13, 2000: received issue
February 27, 2001: closed issue
Issue 3578: OTS 1.1 changes by Messaging spec (clarifications)--issue1 (ots-rtf)
Click here for this issue's archive.
Source: Oracle (Mr. Ram Jeyaraman, nobody)
Nature: Clarification
Severity:
Summary: 1) Section 10.3.8 dealing with Synchronization interface needs to specify the correct
TransactionPolicyValue that needs to be associated with the POA which hosts the Synchronization
objects. Possible values are Allows_shared or Requires_shared, i beleive.
Resolution: The Synchronization interface's OTSPolicy is ADAPTS. See Revised Text.
Revised Text: The IDL for the Synchronization interface should be change from:
// TransactionalObject has been deprecated //
// and replaced by the use of the OTSPolicy component //
// Inheritance from TransactionalObject is for backward compatability //
interface Synchronization : TransactionalObject {
void before_completion();
void after_completion(in Status status);
};
to:
// TransactionalObject has been deprecated //
// and replaced by the use of the OTSPolicy component //
// Synchronization will use the OTSPolicy of ADAPTS //
// Inheritance from TransactionalObject is for backward compatability //
interface Synchronization : TransactionalObject {
void before_completion();
void after_completion(in Status status);
};
Actions taken:
April 21, 2000: received issue
February 27, 2001: closed issue
Issue 3579: OTS 1.1 changes by Messaging spec (clarifications)--issue 2 (ots-rtf)
Click here for this issue's archive.
Source: Oracle (Mr. Ram Jeyaraman, nobody)
Nature: Clarification
Severity:
Summary: 2) The active transaction modes refered to in Section 10.5.2 ptc 99-10-07, { None, Shared and Queue
} ; how does the transaction manager start a transaction in one of these transaction modes ? I am
not sure if there is a way to specify the transacton mode while starting a transaction or while
associating the a transaction context with a thread. Could someone please clarify ?
Resolution: This issue is addressed in the proposal for 3425. It is being closed without action.
Revised Text:
Actions taken:
April 21, 2000: received issue
February 27, 2001: closed issue
Issue 3588: OTS issue : TransactionPolicyValue for Synchronization object (ots-rtf)
Click here for this issue's archive.
Source: Oracle (Mr. Ram Jeyaraman, nobody)
Nature: Uncategorized Issue
Severity:
Summary: Messaging spec changes to OTS 1.1 removes the TransactionalObject interface. A couple of related
issues :
1) Section 10.3.8 dealing with Synchronization interface needs to specify the correct
TransactionPolicyValue that needs to be associated with the POA which hosts the Synchronization
objects. Possible values are Allows_shared or Requires_shared, i beleive.
2) The active transaction modes refered to in Section 10.5.2 ptc 99-10-07, { None, Shared and Queue
} ; how does the transaction manager start a transaction in one of these transaction modes ? I am
not sure if there is a way to specify the transacton mode while starting a transaction or while
associating the a transaction context with a thread. Could someone please clarify ?
Resolution: see below
Revised Text: Add a second paragraph in 2.9 "Synchronization Interface":
For backward compatibility with earlier revisions of the Transaction Service, the Synchronization interface inherits from the deprecated TransactionalObject interface. The Transaction Service may or may not propagate a transaction context when calling operations on a Synchronization object. If a transaction context is propagated, it must correspond to the transaction about to be committed or that has just completed.
and remove the IDL comment.
Actions taken:
April 27, 2000: received issue
July 1, 2003: closed issue
Discussion: Resolution:
Provide no guarantee that the OTS implementation propagates or does not propagate tx contexts to registered synchronizations.
So synchronizations must be implemented with ADAPTS or no OTSPolicy at all. See also the text for resolution 4809.
Issue 3592: Shared/unshared transactions? (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: the merged spec (with the messaging changes) talks about shared and unshared
transactions. It also obliges the client and server side to perform
certain actions when the state of the transaction is incompatible with
the transaction policy of the target object. However, this begs the questions:
1) How does a client decide whether to create a shared or an
unshared transaction?
Currently, all the client can do is to call begin(), so what
kind of transaction is created when the client does that?
2) How does the server learn about what kind of transaction was
created by the client so it can perform the required checks?
Right now, there is neither an interface on the coordinator
nor is there anything in the transaction context that would
allow the server to find out.
It appears that there must be a way to:
1) for the client to control what kind of transaction to create
2) for the server to find out what kind of transaction was
created by the client.
Resolution: Issue was addressed by the proposal for issue 3425, so it is being closed without action.
Revised Text:
Actions taken:
May 3, 2000: received issue
February 27, 2001: closed issue
Discussion:
Issue 3593: Any in transaction context? (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: the PropagationContext structure contains a sequenct of parent identities,
followed by an any "implementation_specific_data".
This seems strange. Why do we have a single Any if we can have any number
of parent identities, which could conceivably span vendor boundaries?
It seems that what would really be required is something like this:
struct ParentInfo {
TransIdentity id;
any implementation_specific_data;
};
typedef sequence<ParentInfo> ParentInfoSeq;
Could someone help me out here? I don't see how a single any could be
sufficient if there is to be at least a theoretical chance of interoperating
across vendor boundaries.
Resolution: resolved, see below
Revised Text: Change the definition of implementation_specific_data in the Structure of the
Propagation Context in section 10.5.2 (on page 10-67 of ptc/99-10-07 and page
10-63 of formal/97-12-17)
from:
implementation_specific_data
This information is exported from an implementation and is required to be
passed back with the rest of the context if the transaction is re-imported into
that implementation.
to
implementation_specific_data
This information is exported from an implementation and is required to be
passed back with the rest of the context if the transaction is re-imported into
that implementation. The intent is to permit additional information to be sent
which might optimize the commit process, e.g. the entire transaction tree
rather than just the immediate ancestors. In the case of OTS interoperation
across any vendor boundaries, the importing implementation must not require
that any specific information is passed as part of the
implementation_specific_data. It must only pass back the provided information
to the exporting implementation.
Actions taken:
May 3, 2000: received issue
January 16, 2001: closed issue
Discussion: Resolution:
Clarify the specs by the revised text below (no semantic changes intended). The
rationale is given by the attached mail below:
On Friday, May 05, 2000 4:32 PM, Ed Cobb wrote:
Michi, the sequence of parent identities supports nested transactions. The
original intent of the any was to permit additional information to be sent
which might optimize the commit process, e.g. the entire transaction tree
rather than just the immediate ancestors. As originally implemented by
Transarc (which was ultimately sold to Iona), their existing transaction
context was imbedded in the any rather than broken out as described in the
rest of the structure. I have know idea what Iona does currently.
At 02:22 PM 5/3/00 +1000, Michi Henning wrote:
Hi,
the PropagationContext structure contains a sequenct of parent identities,
followed by an any "implementation_specific_data".
This seems strange. Why do we have a single Any if we can have any number
of parent identities, which could conceivably span vendor boundaries?
It seems that what would really be required is something like this:
struct ParentInfo {
TransIdentity id;
any implementation_specific_data;
};
typedef sequence<ParentInfo ParentInfoSeq;
Could someone help me out here? I don't see how a single any could be
sufficient if there is to be at least a theoretical chance of interoperating
across vendor boundaries.
Cheers,
Michi.
--
Michi Henning +61 7 3891 5744
Object Oriented Concepts +61 4 1118 2700 (mobile)
Suite 4, 904 Stanley St +61 7 3891 5009 (fax)
East Brisbane 4169 michi@ooc.com.au
AUSTRALIA http://www.ooc.com.au/staff/michi-henning.html
Issue 3600: Handling multiple resource registrations (ots-rtf)
Click here for this issue's archive.
Source: IONA (Mr. Derek Thomson, )
Nature: Uncategorized Issue
Severity:
Summary: The specification for register_resource does not define what should happen if a
resource is registered twice in the same transaction (page 1-22 of the
Transaction Services chapter).
On page 1-44 (In "Example of a Recoverable Server"), we finally get the words
"before registering the Resource, the object must check whether it has already
been registered for the same transaction." What this has to do with the example
is a complete mystery, as the example code immediately following this doesn't do
anything remotely like this.
The text I was quoting before goes on to opine that "This is done using the
hash_transaction and is_same_transaction operations on the current Coordinator
to compare a list of saved coordinators representing currently active
transactions". An interesting idea, but not good enough. What if another object
registers this resource?
The string of words that I have quoted above also fails to mention exactly what
will happen if a resource is registered twice in the same transaction.
I propose that the specification of register resource should actually specify
what the behaviour of the operation is, without requiring examples 22 pages
later to vaguely describe the error handling as an afterthought.
Finally, I would suggest that the only object that has the global knowledge
necessary to make this determination is the transaction itself. Therefore the
test for repeated registration must be in register_resource itself. What is left
to determine is if this is an error or (better) if the registration is silently
ignored.
Resolution: see above
Revised Text: Add a new paragraph in the 2.8.1 prepare description, after the "The Resource can return VoteRollback" paragraph:
The resource is expected to raise the BAD_INV_ORDER standard exception if it is already prepared.
In 2.14.1.2 "Normal Transaction Completion", replace:
If any registered resource replies VoteRollback or cannot be reached
by
If any registered resource replies VoteRollback, raises an exception or cannot be reached
and
Once a VoteRollback reply is received,
by
Once a VoteRollback reply or an exception is received,
Actions taken:
May 9, 2000: received issue
July 1, 2003: closed issue
Discussion: Resolution:
The same resource shall not be registered twice with the same transaction. However this is not enforced by the transaction service when the resource is registered. If the same resource is registered twice and an attempt is made to commit the transaction, the resource will get two prepare message and is expected to raise a system exception in that case (BAD_INV_ORDER) ... which will roll back the transaction.
We also clarify that when prepare raises any exception, it's like returning VoteRollback: the transaction gets rolled back.
Issue 3602: separate client-side behavior issue (ots-rtf)
Click here for this issue's archive.
Source: UBS (Mr. Hans Kneubuehl, hans.kneubuehl(at)ubs.com)
Nature: Uncategorized Issue
Severity:
Summary: I can offer to write up a votable resolution proposal concerning the
client-side behavior issue (soley). The proposal would assume nothing about the
resolution of the absence-of-transaction-policy issue, and offer two variants
to choose from:
(i) the caller can have a transaction when calling the non-transactional
object; no need to suspend/resume
around this call
(ii) force the programmer to call suspend/resume if he has a current
transaction when calling a non-transactional object
(iii) two possible client-side behaviors (enforce or do not enforce
suspend/resume when the caller has a transaction), selected through a
client-side policy)
Resolution: This issue was addressed in the proposal for issue 3425
Revised Text:
Actions taken:
May 8, 2000: received issue
February 27, 2001: closed issue
Discussion: This issue was addressed in the proposal for issue 3425 (and further clarification
is being worked as part of issue 3991), so this issue is being closed without
action.
Issue 3605: Handling multiple resource registrations (ots-rtf)
Click here for this issue's archive.
Source: IONA (Mr. Derek Thomson, )
Nature: Uncategorized Issue
Severity:
Summary: he specification for register_resource does not define what should happen if a
resource is registered twice in the same transaction (page 1-22 of the
Transaction Services chapter).
On page 1-44 (In "Example of a Recoverable Server"), we finally get the words
"before registering the Resource, the object must check whether it has already
been registered for the same transaction." What this has to do with the example
is a complete mystery, as the example code immediately following this doesn't do
anything remotely like this.
The text I was quoting before goes on to opine that "This is done using the
hash_transaction and is_same_transaction operations on the current Coordinator
to compare a list of saved coordinators representing currently active
transactions". An interesting idea, but not good enough. What if another object
registers this resource?
The string of words that I have quoted above also fails to mention exactly what
will happen if a resource is registered twice in the same transaction.
I propose that the specification of register resource should actually specify
what the behaviour of the operation is, without requiring examples 22 pages
later to vaguely describe the error handling as an afterthought.
Finally, I would suggest that the only object that has the global knowledge
necessary to make this determination is the transaction itself. Therefore the
test for repeated registration must be in register_resource itself. What is left
to determine is if this is an error or (better) if the registration is silently
ignored.
Resolution: Duplicate of #3600, close issue
Revised Text:
Actions taken:
May 9, 2000: received issue
May 13, 2002: closed issue
Issue 3675: Heuristic exception (ots-rtf)
Source: Hewlett-Packard (Dr. Malik Saheb, )
Nature: Uncategorized Issue
Severity:
Summary: 1) The OTS specification indicates that the Resource::prepare operation
can
raise a heuristic exception. This can appears when the Resource acts as
a sub-coordinator and at least one of its resources takes a heuristic
decision.
However I didn't find a clear text explaining the behavior or
"protocol" of
a coordinator which receives such exception.
What should be the decision of this coordinator regarding to others
resource
having replied with VoteCommit?
Resolution: Roll back the transaction (see 3600 above)
Revised Text:
Actions taken:
June 8, 2000: received issue
July 1, 2003: closed issue
Issue 3676: Page 10-32, first paragraphe (ots-rtf)
Click here for this issue's archive.
Source: Hewlett-Packard (Dr. Malik Saheb, )
Nature: Uncategorized Issue
Severity:
Summary: 2) By the way, in page 10-32, first paragraphe - first sentence, related
to the forget
operation, We should change
"This operation is performed only if the resource raised a heuristic
outcome exception
to rollback, commit, or commit_one_phase."
to
"This operation is performed only if the resource raised a heuristic
outcome exception
to rollback, commit, commit_one_phase or prepare."
If no
Resolution: see below
Revised Text: Change the first sentence of the forget operation text in section 10.3.7 from:
"This operation is performed only if the resource raised a heuristic
outcome exception to rollback, commit, or commit_one_phase."
to:
"This operation is performed only if the resource raised a heuristic
outcome exception to rollback, commit, commit_one_phase or prepare."
Actions taken:
June 8, 2000: received issue
February 27, 2001: closed issue
Discussion: Change the forget operation explanation in section 10.3.7 to include prepare
in the list of operations that can result in a forget.
Issue 3915: OTSPolicy's should not require mandatory client-side checking (ots-rtf)
Click here for this issue's archive.
Source: International Business Machines (Mr. Thomas Freund, nobody)
Nature: Uncategorized Issue
Severity:
Summary: OTSPolicy's should not require mandatory client-side checking. The
OTSPolicy should allow for such a client-side optimization but make the
check optional at the client without making it a requirement.
Resolution: This issue was addressed in the proposal for Issue 3425 and is therefore closed without action
Revised Text:
Actions taken:
September 27, 2000: received issue
February 27, 2001: closed issue
Issue 3916: NonTxTargetPolicy (ots-rtf)
Click here for this issue's archive.
Source: International Business Machines (Mr. Thomas Freund, nobody)
Nature: Uncategorized Issue
Severity:
Summary: b.) OTSPolicy checks at the server should allow for OTS1.1 client (which
always propagate context) to OTS1.2 server interoperability by adding the
addition of the PERMITS/PREVENTS check rather than only performing a check
for FORBIDS and returning INVALID_TRANSACTION. (Note Ed had suggested this
might be part of the NonTxTargetPolicy discussion. As long as that
discussion includes both client and server side checking that's would be
fine with me.)
Resolution: This issue was addressed in the proposal for Issue 3425 and is therefore closed without action
Revised Text:
Actions taken:
September 27, 2000: received issue
February 27, 2001: closed issue
Issue 3971: Lenient/Fascist (ots-rtf)
Click here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary: the lenient/fascist issue is about
whether, by default, a client that is currently in a transaction should
be allowed to invoke on a non-transactional object. The fascist option
means that, by default, the client gets an exception when it invokes
on a non-transactional object; the lenient option means that, by
default,
such an invocation is allowed.
Resolution: Resolved by reference/clarification to 4808
Revised Text:
Actions taken:
October 19, 2000: received issue
May 13, 2002: closed issue
Issue 3988: is org.omg.CosTransaction.Current object locality constrained ? (ots-rtf)
Click here for this issue's archive.
Source: Oracle (Mr. Ram Jeyaraman, nobody)
Nature: Uncategorized Issue
Severity:
Summary: The latest Transaction Service (00-06-28.pdf) specification reads:
"The Current interface is designed to be supported by a pseudo
object whose behavior depends upon and may alter the transaction
context associated with the invoking thread. It may be shared with
other object services (e.g., security) and is obtained by using a
resolve initial references(TransactionCurrent ) operation on the
CORBA::ORB interface. Current supports the following operations: ..."
Does the above imply that the Current object is not locality-constrained and could be exported to
other processes ? If so, this seems to contradict the CORBA Core Section 4.8 which makes a blanket
statement about all Current objects being locality constained.
Resolution: see below
Revised Text: ptc-2000-10-03 uses this text:
"The Current interface is a locality-contrained interface whose behavior
depends upon and may alter the transaction context associated with the
invoking thread. It is obtained by using a resolve initial
references("e;TransactionCurrent"e;) operation on the CORBA::ORB interface."
Since this adequately addresses this issues concern, the proposal is to keep this
text and fix the spelling of locality-constrained.
[Note: it is not clear where this text change came from, but this issues resolution
makes it official regardless.]
Actions taken:
October 24, 2000: received issue
February 27, 2001: closed issue
Discussion:
Issue 3991: ots 1.1 client to 1.2 server interworking (ots-rtf)
Click here for this issue's archive.
Source: Hewlett-Packard (Dr. Peter Furniss, peter(at)arjuna.com)
Nature: Uncategorized Issue
Severity:
Summary: This is a re-summarising of the interworking problem that came out in the
discussion of 3916. It is definitely NOT intended to destabilise the 3425
result, but to clarify a corner condition. I've tried to be precise rather
than brief, though I've undoubtedly misused some terms somewhere.
---
To identify some text that needs changing: the first sentence of the
following paragraph (middle of page 10-72 of 00-09-04) is not consistent
with the rest of the text:
OTS 1.1 clients may not interoperate with OTS 1.2 servers unless they
unconditionally
propagate the transaction context. (TF) The OTS 1.2 server determines the
proper
OTSPolicy from the TAG_OTS_POLICY component in the IOR.
---
And the situation in general, for 1.1 client, 1.2 server, for a target
object that is transaction-naive, with client in an active transaction
First, if both sides were 1.1, target would not inherit from TO
On most (?) 1.1 implementations, client invocation-path would
drop/suspend the context.
Some implementations ("promiscuous") would send context.
1.1 server - some implementations would drop/not apply/suspend a
received context; some would just apply the received context (or an
interposed context derived from it) to the thread - this was assumed not to
matter for 1.1 [the 3425 discussion said this was a bug or close to a bug];
some would fault a received context with an exception. (configuration
options could switch between these in some implmentations (ours, at least))
With 1.2 server as we are now (00-09-04)
target's POA will have OTSPolicy of FORBIDS (often by default)
1.1 non-promiscuous will not send context as before - no problem
1.1 promiscuous will send context
1.2 server is required to fault the receipt of a propagation context
on the FORBIDS POA - it MUST throw an exception (INVALID_TRANSACTION).
This would mean a client ap within an active transaction on a promiscuous
1.1-ots platform cannot invoke a non-transactional object on a 1.2-ots.
There is no problem with transaction-using objects, provided the IDL
continues to inherit from TO, even on the 1.2 server. Promiscuous 1.1
clients will send anyway; non-promiscuous will narrow to TO and send the
context.
So - the TransactionalObject inheritance mechanism works for non-promiscous
1.1 clients, but not for promiscuous.
----
One possible solution would be to allow a setting on the server side
equivalent in effect to the NonTxTargetPolicy PREVENT/PERMIT - if set to
"lenient", it would silently remove the received context. Under no
circumstances would the context remain associated with the thread. (Note
this would be a quite different policy from the existing NonTxTargetPolicy
which affects only client-side behaviour and is for the benefit of client
application writers - this would be server-side only, mostly for the benefit
of interworking). This server-side setting could be a private configuration
switch, but that would be effectively have values "conformant" and
"useful" - which I think it is agreed is really, really bad. Making it yet
another policy would seem better.
Another "solution" would be to confirm that promiscuous 1.1 won't interwork
with 1.2.
---
In any case, the paragraph in 10-72 needs changing.
If we choose to reject the interworking, just change "unless" in the first
sentence of the paragraph to "if" (i.e. reverse the sense)
If we add a server-side policy, the 10-72 the paragraph might become
something like:
OTS 1.1 clients can interoperate with OTS 1.2 servers in the following
circumstances:
a) if the client propagates the context only if the target derives
from TO, then interoperation for both t and non-t target objects will be
possible, provided the target object's idl inherit from TO;
b) if the client always propagates the context (if in a T),
interoperation will be possible for t objects regardless of inheritance;
c) if the client always propagates the context, interoperation for
non-t objects will only be possible if the the server setting
UnwantedCtxPolicy is MAKERIGHT. Interworking in this case is not possible if
the UnwantedCtxPolicy is REJECT.
(deliberately choosing a slightly derogatory name for the moment !)
Of course, if UnwantedCtxPolicy is set to MAKERIGHT, it becomes possible
(i.e. it would work) to have the OTSPolicy checking at the client be
optional. But that would mean that contexts were also being sent to
OTS-unaware ORBs, which has been held to be undesirable, though for reasons
that are obscure.
Resolution: see above
Revised Text: Replace the paragraph (in 2.14.2.1 Policy Checking Requirements):
OTS 1.1 clients may not interoperate with OTS 1.2 servers unless they unconditionally propagate the transaction context. The OTS 1.2 server determines the proper OTSPolicy from the TAG_OTS_POLICY component in the IOR.
with:
OTS 1.1 clients can interoperate with OTS 1.2 servers when the interface of the target objects inherits from TransactionalObject, and/or when the client always propagates the transaction context (when in a transaction).
Actions taken:
October 23, 2000: received issue
July 1, 2003: closed issue
Discussion: Resolution:
This was actually resolved by the 2002 Vote 1:
"If a transaction context is received with a request for an object with no OTSPolicy, this transaction context is not passed to the object implementation (Current is not set)."
So now "promiscious 1.1 clients" (see issue above) work with transactional and non-transactional servers.
However it would be nice to clarify this paragraph
Issue 4017: bug with NonTxTargetPolicy (ots-rtf)
Click here for this issue's archive.
Source: IONA (Mr. Matthew Newhook, )
Nature: Uncategorized Issue
Severity:
Summary: The table in the spec that talks about the interaction of the OTS
Policy and NonTxTargetPolicy is something like:
> Target object Called with Called with
> OTS policy / a transaction no transaction
> NonTxTargetPolicy
> -------------------------------------------------------------------
> FORBIDS / raise dispatch request
> PREVENT INVALID_TRANSACTION
>
> FORBIDS / dispatch request dispatch request
> PERMIT *WITHOUT* transaction
Furthermore the the OTS specification defines a non-transactional object
as one that either has a FORBIDS policy or no OTSPolicy at all.
Consider the case of FORBIDS/PERMIT. FORBIDS says that transactional
requests may not be invoked. PERMIT however, says that requests can be
dispatched to non-transactional objects outside of the context of a
transaction.
There is a conflict here. In effect, the verbage in the spec says that
PERMIT overrides FORBIDS -- and that's wrong and contrary to my
understanding of what the intent of this was.
I think the source of the problem is this:
"A non-transactional object has an IOR that either contains a
TAG_OTS_POLICY component with a value of FORBIDS or does not contain a
TAG_OTS_POLICY component at all."
An object with FORBIDS should never receive transactional requests.
I think more properly the PERMIT/PREVENT policy should only affect those
objects that have no OTSPolicy at all.
Resolution: see below
Revised Text: This issue is being closed without any changes since the originator of the
issue has agreed that PERMIT should override FORBIDS.
Actions taken:
November 4, 2000: received issue
February 27, 2001: closed issue
Issue 4029: minor editorial correction to CosTransaction.idl (ots-rtf)
Click here for this issue's archive.
Source: Oracle (Mr. Ram Jeyaraman, nobody)
Nature: Uncategorized Issue
Severity:
Summary: Section 10.6 has this comment in the IDL file. The CosPolicyDef module is not present anymore.
"// TransactionPolicyValue definitions are deprecated and replaced with new InvocationPolicy //
// and OTSPolicy definitions which are defined in CosPolicyDef module. //"
This can be replaced by
// TransactionPolicyValue definitions are deprecated and replaced //
// with new InvocationPolicy and OTSPolicy definitions. They are //
// retained for backward compatibility.//
Resolution: The comments in the IDL in section 10.6 will be changed
Revised Text: In section 10.6, change followoing IDL comments:
"// TransactionPolicyValue definitions are deprecated and replaced with new InvocationPolicy //
// and OTSPolicy definitions which are defined in CosPolicyDef module. //
to be:
// TransactionPolicyValue definitions are deprecated and replaced //
// with new InvocationPolicy and OTSPolicy definitions. They are //
// retained for backward compatibility.//
Actions taken:
November 4, 2000: received issue
February 27, 2001: closed issue
Discussion: The comments in the IDL in section 10.6 will changed as suggested in this issues summary.
Issue 4030: OTSPolicy & OTS internal operations (ots-rtf)
Click here for this issue's archive.
Source: IONA (Mr. Matthew Newhook, )
Nature: Uncategorized Issue
Severity:
Summary: All "OTS enabled" object references have a componet with an OTSPolicy
that contains one of three policy values: REQUIRES, FORBIDS and ADAPTS.
Any object reference without this OTSPolicy is assumed to be a non OTS
1.2 policy.
The behaviour of the caller is then driven by the value of the
NonTxTargetPolicy. Assuming the caller is in a transaction:
If this value is PERMIT the method invocation proceeds without
propagating the transaction information and any exceptions that result
are ignored (since the object cannot participate in the transaction). If
this value is PREVENT the client is notified via an exception.
Note that the value of the NonTxTargetPolicy is strictly under client
control.
Problem:
Under the covers calls to the OTS server to implement the implicit
transaction propagation are presumambly normal CORBA invocations -- and
hence go through normal channels (and through the portable interceptor
calls, etc). What OTSPolicy value (if any) does the OTS server export
for its object references?
If there is no OTSPolicy value and the NonTxTargetPolicy is PREVENT
calls with be refused. If there is an OTSPolicy value (presumambly
ADAPTS) and the call to the OTS results in (an expected exception)
then the transaction will be aborted (because exceptions cause the
transaction to be marked rollback-only).
The real problem is that the OTS implicit client side support must be
able to recognize the invocation to the OTS server as somehow
different from regular method invocations.
Solution(s):
We've identified two possible strategies to handle this problem:
1/ Add a new policy value to the OTSPolicy - INTERNAL. On the client
side references with INTERNAL don't have a PropagationContext sent
and the objects do not participate in the transaction. In addition
INTERNAL objects ignore the NonTxTargetPolicy.
2/ Internally in the OTS runtime mark references that are "internal"
with a specific proprietary policy. In the client side interceptor
references with this policy are treated as "internal" as above.
#1 is the easiest to implement since no special action is needed in
the OTS runtime (besides the obvious action when INTERNAL is seen).
However, it requires a change to the spec and change by all vendors.
#2 is the least intrusive from the specification POV. However, it's a
pain to implement. Vendors must ensure that all internal references
have the correct policy overrides installed on all internal
references. This in practice is not as easy as it sounds :(
I've implemented both approaches and as far as I can tell they both
work.
Resolution: see above
Revised Text: o p 1-15 add before the declaration of NonTxTargetPolicyValue:
// Deprecated
o Replace last paragraph on p 2-20 (OTSPolicy values ...) by:
OTSPolicy values are encoded in the TAG_OTS_POLICY component
of the IOR. An IOR with a TAG_OTS_POLICY component can only
be created by an OTS-aware ORB at the OTS 1.2 level or above.
<title>IORs with no OTSPolicy</title>
An OTS-aware client that supports OTS 1.1 objects treats
IORs with no OTSPolicy (i.e. no TAG_OTS_POLICY component) like
IORs with the ADAPTS OTSPolicy when the target object's
interface derives from TransactionalObject. Otherwise, IORs with
no OTSPolicy designate objects that do not use transaction
contexts, but unlike FORBIDS objects, do not reject them. An OTS
implementation is free to propagate or not propagate transaction
contexts to such objects.
[also delete table 2-3 and remainder of the paragraph on
p 2-23]
o Replace the 'NonTxTargetPolicy Policy' paragraph on p 2-22
as follows:
NonTxTargetPolicy Policy
The NonTxTargetPolicy policy and associated NonTxTargetPolicy
values are deprecated. Setting this policy has no effect.
o In the IDL on p 2-23, add the following comment before the
NON_TX_TARGET_POLICY_TYPE declaration:
// Deprecated
o Replace the last two paragraphs on p 2-23 by:
If a POA is not created with either policy object, the object
references created by this POA do no include either tag
component.
o On p 2-24, update the 'Transaction-unware POAs' paragraph
as follows:
A transaction-unaware POA is any POA created with no OTSPolicy;
in particular any POA created by an OTS-unaware ORB is a
transaction-unaware POA. A transaction-unaware POA will never
create a TAG_OTS_POLICY component in any IORs it creates.
o On p 2-24, update the first sentence of the
'Transaction-aware POAs' paragraph as follows:
A transaction-aware POA is any POA which is created with an
OTSPolicy.
o On p 2-24, remove the third and fourth bullets of the
'Transaction-aware POAs' paragraph.
o On p 2-24, update the two first rows of table 2-6 as follows:
Neither | ok | ok | NO | NO
InvocationPolicy | raise InvalidPolicy | raise InvalidPolicy
SHARED |
o On p 2-53, update the second row of table 2-10 as follows:
FORBIDS | raise INVALID_TRANSACTION | process invocation
and remove the [1] note.
o On p-23, add at the end of 'Server-side behavior when receiving
transactional invocations':
If a transaction context is received with a request for an object
with no OTSPolicy, this transaction context is not passed to the
object implementation (Current is not set).
o Remove the 'Alternate Client processing for FORBIDS OTSPolicy
component' paragraph on p 2-54
o Remove the "If it does not" sentence in the
'Interoperation with OTS 1.1 servers and clients' paragraph on
p 2-54
o on p A-6, add
// Deprecated
before the declaration of NonTxTargetPolicyValue and the
declaration of NON_TX_TARGET_POLICY_TYPE.
Actions taken:
October 24, 2000: received issue
July 1, 2003: closed issue
Discussion: Proposed Resolution:
- deprecate the NonTxTargetPolicy altogether
- [issue 4030] have no OTSPolicy in IOR mean "do not propagate tx context"
- [issue 4821] have FORBIDS always mean FORBIDS
- allow OTS-aware ORBs to create IORs with no OTSPolicy
Issue 4038: forward references in section 10.6 (ots-rtf)
Click here for this issue's archive.
Source: Oracle (Mr. Ram Jeyaraman, nobody)
Nature: Uncategorized Issue
Severity:
Summary: The TransIdentity struct references Terminator and Coordianator before
they are declared. This is reported as an idl error when the CosTransaction.idl
is compiled.
To fix this, the Terminator and Coordiator types need to be declared before
they are referenced.
Resolution: see below
Revised Text: Change this IDL in section 10.6 (and CosTransactions.idl if it hasn't been
changed already) from:
#include orb.idl
module CosTransactions {
// DATATYPES
enum Status {
StatusActive,
StatusMarkedRollback,
StatusPrepared,
StatusCommitted,
StatusRolledBack,
StatusUnknown,
StatusNoTransaction,
StatusPreparing,
StatusCommitting,
StatusRollingBack
};
enum Vote {
VoteCommit,
VoteRollback,
VoteReadOnly
};
typedef unsigned short TransactionPolicyValue;
// TransactionPolicyValue definitions are deprecated and replaced with new InvocationPolicy //
// and OTSPolicy definitions which are defined in CosPolicyDef module.//
// They are retained for backward compatibility. //
const TransactionPolicyValue Allows_shared = 0;
const TransactionPolicyValue Allows_none = 1;
const TransactionPolicyValue Requires_shared = 2;
const TransactionPolicyValue Allows_unshared = 3;
const TransactionPolicyValue Allows_either = 4;
const TransactionPolicyValue Requires_unshared = 5;
const TransactionPolicyValue Requires_either = 6;
// Structure definitions
struct otid_t {
long formatID; /*format identifier. 0 is OSI TP */
long bqual_length;
sequence tid;
};
struct TransIdentity {
Coordinator coord;
Terminator term;
otid_t otid;
};
struct PropagationContext {
unsigned long timeout;
TransIdentity current;
sequence parents;
any implementation_specific_data;
};
// Forward references for interfaces defined later in module
interface Current;
interface TransactionFactory;
interface Control;
interface Terminator;
interface Coordinator;
interface RecoveryCoordinator;
interface Resource;
interface Synchronization;
interface SubtransactionAwareResource;
interface TransactionalObject;
to:
#include orb.idl
module CosTransactions {
// DATATYPES
enum Status {
StatusActive,
StatusMarkedRollback,
StatusPrepared,
StatusCommitted,
StatusRolledBack,
StatusUnknown,
StatusNoTransaction,
StatusPreparing,
StatusCommitting,
StatusRollingBack
};
enum Vote {
VoteCommit,
VoteRollback,
VoteReadOnly
};
typedef unsigned short TransactionPolicyValue;
// TransactionPolicyValue definitions are deprecated and replaced //
// with new InvocationPolicy and OTSPolicy definitions. They are //
// retained for backward compatibility.//
const TransactionPolicyValue Allows_shared = 0;
const TransactionPolicyValue Allows_none = 1;
const TransactionPolicyValue Requires_shared = 2;
const TransactionPolicyValue Allows_unshared = 3;
const TransactionPolicyValue Allows_either = 4;
const TransactionPolicyValue Requires_unshared = 5;
const TransactionPolicyValue Requires_either = 6;
// Forward references for interfaces defined later in module
interface Current;
interface TransactionFactory;
interface Control;
interface Terminator;
interface Coordinator;
interface RecoveryCoordinator;
interface Resource;
interface Synchronization;
interface SubtransactionAwareResource;
interface TransactionalObject;
// Structure definitions
struct otid_t {
long formatID; /*format identifier. 0 is OSI TP */
long bqual_length;
sequence tid;
};
struct TransIdentity {
Coordinator coord;
Terminator term;
otid_t otid;
};
struct PropagationContext {
unsigned long timeout;
TransIdentity current;
sequence parents;
any implementation_specific_data;
};
Actions taken:
November 14, 2000: received issue
February 27, 2001: closed issue
Discussion: In section 10.6, the foward references for the interfaces need to be moved
to to before the Structure definitions.
Issue 4343: interposed coordinator optimisation (ots-rtf)
Click here for this issue's archive.
Source: Red Hat (Dr. Mark Little, mlittle(at)redhat.com)
Nature: Uncategorized Issue
Severity:
Summary: When using interposition it's possible for (and I'd argue it probably
should) a subordinate coordinator to run the two-phase commit protocol on
its registered resources (almost) independently of the root coordinator (or
the coordinator it's registered with). Say the subordinate coordinator gets
a prepare message which it then sends to its locally registered resources,
if one of them returns VoteRollback then the subordinate knows that it will
eventually have to rollback all registered resources. Now it could simply do
nothing more and send VoteRollback up the tree, knowing that it will
eventually get a rollback call to then distributed on to its registered
resources. Alternatively, it could send rollback to all of its resource
before sending the VoteRollback up the tree (and then it could obviously
go).
Although we shouldn't mandate an implementation, it might be useful to
mention the above optimisation in the text. Perhaps during the Implementor's
View.
Resolution: close issue, see above
Revised Text:
Actions taken:
June 13, 2001: received issue
May 13, 2002: closed issue
Discussion: Close this issue as it is mentioned in the section on subordinate coordinator on page 10-58.
Issue 4589: Incorrect CosTransactions.idl in OTS 1.2 (ots-rtf)
Click here for this issue's archive.
Source: International Business Machines (Dr. Ian Robinson, ian_robinson(at)uk.ibm.com)
Nature: Uncategorized Issue
Severity:
Summary: The CosTransactions.idl in Appendix A of OTS 1.2 (formal/01-05-02) is
incorrect
since the addition of the IDL for the CosTSInteroperation module. The main
body
of content for the CosTransactions module seems to have been moved from A.1
to after the end-of-scope for CosTSInteroperation in A.3.
Resolution: Fix the formatting of appendix A
Revised Text:
Actions taken:
October 4, 2001: received issue
May 13, 2002: closed issue
Issue 4665: OTSPolicy (ots-rtf)
Click here for this issue's archive.
Source: International Business Machines (Dr. Ian Robinson, ian_robinson(at)uk.ibm.com)
Nature: Uncategorized Issue
Severity:
Summary: I'm trying to understand how an OTSPolicy should be encoded in an IOR.
In particular, I'm trying to understand how to do this without a POA.
OTS 1.2 deprecated the "OTS 1.1+messaging" TAG_TRANSACTION_POLICY
and TransactionPolicyComponent structure in favour of TAG_OTS_POLICY
and TAG_INV_POLICY. Should it have defined OTSPolicyComponent and
InvocationPolicyComponent structures? These structures would then be
the component_data of the TaggedComponents carrying the policy values
in the IOR.
// The TAG_TRANSACTION_POLICY component is deprecated and //
// replaced by InvocationPolicy and OTSPolicy components //
// It is retained for backward compatibility only. //
module CosTSInteroperation
{
const IOP::ComponentId TAG_TRANSACTION_POLICY=26:
struct TransactionPolicyComponent
{
CosTransactions::TransactionPolicyValue tpv;
};
const IOP::ComponentId TAG_OTS_POLICY= 31;
const IOP::ComponentId TAG_INV_POLICY= 32;
};
Resolution: see below
Revised Text: In section 2.12.1, Appearance of Policy Components in IORs, change the text to:
The OTSPolicyValue and InvocationPolicyValue are encoded as CDR encapsulations in the TAG_OTS_POLICY and TAG_INVOCATION_POLICY TaggedComponents of the IOR. The tags of these TaggedComponents are defined in the following IDL:
// The TAG_TRANSACTION_POLICY component is deprecated and
// replaced by InvocationPolicy and OTSPolicy components
// It is retained for backward compatibility only.
module CosTSInteroperation {
const IOP::ComponentId TAG_TRANSACTION_POLICY=26:
struct TransactionPolicyComponent {
CosTransactions::TransactionPolicyValue tpv;
};
const IOP::ComponentId TAG_OTS_POLICY= 31;
const IOP::ComponentId TAG_INV_POLICY= 32;
Actions taken:
October 31, 2001: received issue
May 13, 2002: closed issue
Discussion: Resolution:
Improve the text of the 2.12.1, Appearance of Policy Components in IOR, paragraph.
Issue 4808: NonTxTargetPolicy default value? (ots-rtf)
Click here for this issue's archive.
Source: ZeroC (Mr. Bernard Normier, bernard(at)zeroc.com)
Nature: Uncategorized Issue
Severity:
Summary: OTS v1.2 does not define the default value for the NonTxTargetPolicy
policy. Defining a default would allow applications that use OTS and
don't set a NonTxTargetPolicy value to be portable.
Resolution: The default NonTxTargetPolicy is PERMIT.
Revised Text: Add the following sentence as the end of the "NonTxTargetPolicy Policy" paragraph in 2.12 Policy Interfaces :
The default NonTxTargetPolicy is PERMIT.
Actions taken:
January 17, 2002: received issue
May 13, 2002: closed issue
Discussion:
Issue 4809: OTSPolicy for OTS objects { Coordinator, Resource } (ots-rtf)
Click here for this issue's archive.
Source: Oracle (Mr. Ram Jeyaraman, nobody)
Nature: Uncategorized Issue
Severity:
Summary: With respect to the OTSPolicy setting for OTS objects like Coordinator,
Resource, etc: the OTS specification needs to clearly specify the OTSPolicy for
such objects.
Given the choice of OTSPolicies currently available { REQUIRES, ADAPTS, FORBIDS
}: ADAPTS seems the most appropriate OTSPolicy for OTS objects.
Resolution: see above
Revised Text: Add the following new paragraph:
2.12.2 OTSPolicy carried by the Transaction Service objects.
The Transaction Service implements objects supporting the following interfaces in such a way that their references have no TAG_OTS_POLICY component:
Control
Terminator
Coordinator
RecoveryCoordinator
TransactionFactory
TransactionalObject objects must be implemented in such a way that their references carry the ADAPTS or REQUIRES OTSPolicy (using the TAG_OTS_POLICY component), or carry no OTSPolicy. Synchronization objects must be implemented in such a way that their references carry the ADAPTS OTSPolicy (using the TAG_OTS_POLICY component), or carry no OTSPolicy. Resource and SubtransactionAwareResource objects must be implemented in such a way that their references carry the FORBIDS OTSPolicy (using the TAG_OTS_POLICY component), or carry no OTSPolicy.
Delete the following paragraph from 2.14.2.1 "Policy Checking Requirements":
An OTS 1.2 object that also inherits from the deprecated TransactionalObject (for backward compatibility) must create POAs with a OTSPolicy value of REQUIRES or ADAPTS - any other policy value is illegal and is an implementation error.
Add the following two sentences to the "A Resource Manager object manages transaction branches" paragraph on p B-13:
ResourceManager objects are implemented in such a way that their references carry the FORBIDS OTSPolicy (using the TAG_OTS_POLICY component). BeforeCompletionCallback objects must be implemented in such a way that their references carry the FORBIDS OTSPolicy (using the TAG_OTS_POLICY component), or carry no OTSPolicy.
Actions taken:
January 19, 2002: received issue
July 1, 2003: closed issue
Discussion: Resolution:
The Transaction Service implements objects supporting the following interfaces in such a way that their references have no TAG_OTS_POLICY component:
Control
Terminator
Coordinator
RecoveryCoordinator
TransactionFactory
Rationale: it's convenient (you don't need to suspend the current transaction to register a resource, extract the coordinator from a control object etc), and compatible with code written using OTS 1.0/1.1.
TransactionalObject objects must be implemented in such a way that their references carry the ADAPTS or REQUIRES OTSPolicy (using the TAG_OTS_POLICY component), or carry no OTSPolicy.
Synchronization objects must be implemented in such a way that their references carry the ADAPTS OTSPolicy (using the TAG_OTS_POLICY component), or carry no OTSPolicy.
Resource, SubtransactionAwareResource, XA::BeforeCompletionCallback objects must be implemented in such a way that their references carry the FORBIDS OTSPolicy (using the TAG_OTS_POLICY component), or carry no OTSPolicy.
The OTS/XA integration implements XA::ResourceManager objects in such a way that their references carry the FORBIDS OTSPolicy (using the TAG_OTS_POLICY component).
Rationale: it avoids confusing BeforeCompletionCallback with Synchronization objects. A BeforeCompletionCallback is registered for all transactions that will use the target Resource Manager.
Issue 4821: NonTxTargetPolicy should not modify FORBIDS OTSPolicy behavior (ots-rtf)
Click here for this issue's archive.
Source: Oracle (Mr. Ram Jeyaraman, nobody)
Nature: Uncategorized Issue
Severity:
Summary: The current description of NonTxTargetPolicy processing states that the behavior of FORBIDS OTSPolicy is modified based on the NonTxTargetPolicy setting (PERMIT or FORBIDS). This leads to loose transactional semantics and compromises integrity. The NonTxTargetPolicy client policy should instead be modified to apply ONLY to the case where the IOR does not have an OTSPolicy and should NOT be applied to modify FORBDS OTSPolicy behavior.
when a target object explicitly indicates its unwillingness to participate in a
transaction (ie., FORBIDS), and if a transactional client happens to invoke such
a target, the transactional client must get an exception ie., it is incorrect to
drop the tx context silently. But i am fine dropping the transaction context
silently when interoperating with OTS 1.1 servers.
To explain more on why it is incorrect to modify the FORBIDS behavior when it is
stated explicitly in the IOR:
site A (PREVENT) ---> site B (PERMIT) --> site C (holds an Object with FORBIDS)
In the above case, the client app at site A does not get its required behavior
ie., it is not notified by an exception when a non-transactional target is
invoked, since site B silently drops the tx context on it own accord. This
compromises the expected transaction semantics ! and data integrity. After all
we build our systems only to serve the needs of the applications.
On the other hand, i am fine with using the NonTxTargetPolicy with the default
set to PERMIT while interoperating with OTS 1.1 servers only. Since there is an
inherent risk while interoperating with OTS 1.1 servers because of the weak OTS
1.1 tx semantics.
In order to preserve the transaction semantics of applications, i propose that
the NonTxTargetPolicy with a default (PERMIT) be applied only in the case where
the IOR *does not* have an OTSPolicy. If an IOR has an explicit FORBIDS policy,
NonTxTargetPolicy has no effect.
It is important for us to fix this behavior in this revision.
Resolution: See issue 4030 resolution
Revised Text:
Actions taken:
February 3, 2002: received issue
July 1, 2003: closed issue