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)

List options: All ; Open Issues only; or Closed Issues only

Issue 587: Wrong Transaction on get_next_response
Issue 1819: Transaction Service Specification issue concerning TRANSACTION_ROLLBACK
Issue 1837: Modifications to the CORBA transaction service need to be addressed
Issue 1842: Diagrams for OTS related to UML
Issue 1843: Subtransactions
Issue 1848: register_synchronization
Issue 1849: Use of get_txcontext
Issue 1850: Add get_timeout to Current
Issue 1851: Timeouts
Issue 1852: SubtransactionAwareResource
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 2047: Transaction Service: recreating a nested 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 2610: resume(), checking and transaction interoperation
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 2935: ots-rtf: TSIdentification
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 3306: Resume check - what state must be stored for each thread?
Issue 3308: What happens to the existing transaction context on resume?
Issue 3343: Clarification - Transaction Policy
Issue 3344: OTS issue: PropagationContext and Status
Issue 3357: OTS-RTF issue: spelling/case of transaction policy values
Issue 3361: Preventing calls in a rollback-only transaction
Issue 3362: transaction versus transaction context
Issue 3365: OTS issue: explicit transaction propagation not clearly specified
Issue 3404: OTS interop issue: propagation of current trx status
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 3428: OTS Synchronization afterCompletion (status)
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 3587: ORB / client interceptor behaviour on location forwarded IORs
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 3617: commit_one_phase
Issue 3671: ots - resource & recoverycoordinator no longer there Portable Interceptors / register_initial_reference()
Issue 3675: Heuristic exception
Issue 3676: Page 10-32, first paragraphe
Issue 3748: avoiding the register_resource round trip
Issue 3762: Anonymous types in OTS
Issue 3773: TRANSACTION_UNAVAILABLE standard exception
Issue 3774: REQUIRES_UNSHARED transaction policy
Issue 3775: Policy split (OTSPolicy & InvocationPolicy) Exact text for IORInfo::get_effective_policy
Issue 3784: register_resource & SubTransactionAwareResource operation get_implementation() referenced but not declared
Issue 3915: OTSPolicy's should not require mandatory client-side checking
Issue 3916: NonTxTargetPolicy
Issue 3917: OTS RTF --EDITORIAL?
Issue 3943: CosTransactions::Control and implicit propagation implementations
Issue 3971: Lenient/Fascist
Issue 3983: InvocationPolicy - transactions only ?
Issue 3984: Allowed InvocationPolicy and OTSPolicy interactions
Issue 3988: is org.omg.CosTransaction.Current object locality constrained ?
Issue 3991: ots 1.1 client to 1.2 server interworking
Issue 4015: Policy checking requirements for the OTSPolicy
Issue 4017: bug with NonTxTargetPolicy
Issue 4029: minor editorial correction to CosTransaction.idl
Issue 4030: OTSPolicy & OTS internal operations Valuetypes supporting local interfaces are local types?
Issue 4038: forward references in section 10.6
Issue 4084: OTS-RTF: Progapation Context and sub-transactions
Issue 4085: OTS-RTF: PropagationContext and is_same_transaction
Issue 4201: OTS-RTF issue: Synchronization very (too) expensive
Issue 4343: interposed coordinator optimisation
Issue 4589: Incorrect CosTransactions.idl in OTS 1.2
Issue 4665: OTSPolicy
Issue 4666: OTS-RTF: resource registration during before_completion
Issue 4808: NonTxTargetPolicy default value?
Issue 4809: OTSPolicy for OTS objects { Coordinator, Resource }
Issue 4821: NonTxTargetPolicy should not modify FORBIDS OTSPolicy behavior
Issue 5094: errors in the IDL description
Issue 5425: operation get_txcontext is not inside any interface
Issue 5426: IDL modules for Transaction Service listing erroneous.
Issue 5427: question regarding TSIdentification
Issue 5428: Appendix A - Interfaces are not properly mentioned
Issue 5938: What has happened to all of the older OTS issues

Issue 587: Wrong Transaction on get_next_response (ots-rtf)

Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: How is application supposed to determine which of it"s outstanding requests violated the transaction discipline? Competing request is out parameter-unavailable in event of except

Resolution:
Revised Text:
Actions taken:
June 3, 1997: received issue
October 20, 1999: moved from orb_revision to messaging-rtf
April 3, 2001: moved from the Messaging RTF to OTS RTF

Discussion:


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 1842: Diagrams for OTS related to UML (ots-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Ed, it now appears to be a requirement that OMG specifications contain
 >UML diagrams to show relationships and interactions between interfaces.
 >I"ve produced some such diagrams for the OTS and they might be a useful
 >addition to an updated OTS specification. (They certainly help to
 >clarify some of the issues which can arise.) What do you think?
 

Resolution:
Revised Text:
Actions taken:
August 19, 1998: received issue

Discussion:


Issue 1843: Subtransactions (ots-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: If a subtransaction receives inconsistent replies to
 commit_subtransaction (for example a resource throws an exception) then
 the specification allows an implementation to either ignore it, or
 rollback the subtransaction. Since the subtransaction is possibly now in
 an indeterminant state (some resources committed whereas others were
 told to rollback) then to guarantee consistency it is advisable to force
 the parent transaction to rollback. If this is the case then it may be
 useful to inform the application early that any work it may attempt to
 do after the subtransaction "commit" (i.e., in the context of the
 parent) is going to be undone.
 

Resolution:
Revised Text:
Actions taken:
August 19, 1998: received issue

Discussion:


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 1849: Use of get_txcontext (ots-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: is the effect of suspens followed by resume required to be the same as
 never having called suspend in the first place? This isn"t a problem for
 top-level transactions, but may be for subtransactions since the only reference
 suspend returns is to the current transaction and not the entire hierarchy. We
 could allow for get_txcontext to be used in such a case.
 

Resolution:
Revised Text:
Actions taken:
August 24, 1998: received issue

Discussion:


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 1852: SubtransactionAwareResource (ots-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary:  if a SubtransactionAwareResource is registered with a subtransaction using
 register_resource then according to the current specification it is "indirectly"
 registered with the top-level transaction when the "subtransaction"s ancestors
 have completed". In the transaction systems I have knowledge of which support
 nested transactions, if the subtransaction or any of its parents rollback, then
 any resources registered would be dropped, i.e., not propagated to the parent.

Resolution:
Revised Text:
Actions taken:
August 24, 1998: received 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 2047: Transaction Service: recreating a nested transaction (ots-rtf)

Click
here for this issue's archive.
Nature:
Severity:
Summary:
Summary: What should happen when the TransactionFactory recreate() operation
 is passed a nested transaction?
 

Resolution:
Revised Text:
Actions taken:
October 7, 1998: received issue

Discussion:
 received issue


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 2610: resume(), checking and transaction interoperation (ots-rtf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: I believe this to be a minor flaw in OTS.
 
 Problem: There is no apparent way of turning off checking in an OTS that supports it. This makes it impossible to involve an OTS-based server using implicit propagation in a transaction that is imported (bridged) into OTS from some other transaction mechanism.
 

Resolution:
Revised Text: There is no apparent way of turning off checking in an OTS that supports it. This makes it impossible to involve an OTS-based server using implicit propagation in a transaction that is imported (bridged) into OTS from some other transaction mechanism.
Actions taken:
April 16, 1999: received 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@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@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@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@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@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 2935: ots-rtf: TSIdentification (ots-rtf)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi@triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
Page 10-64 shows the TSIdentification PIDL interface, which must be
provided by the ORB core to the OTS service. Several questions here:

	1) TSIdentification is not part of any module on page 10-64,
	   and the IDL summary in Section 10.6 does not mention it at
	   all. Which module does it belong to? CORBA? CosTSPortability?

	   Note that the text for the NotAvailable exception states:

		The NotAvailable exception is raised if the ORB
		implementation does not support the CosTSPortability module.

	   This seems to be a hint that TSIdentification *is* meant to
	   be part of CosTSPortability. However, that itself raises another
	   question: an ORB core can raise this exception only if there
	   actually *is* a TSIdentification interface that the service
	   can call. In other words, we seem to have a requirement on
	   the ORB core here, namely, that all ORBs must provide this
	   interface, at least to the extent that an OTS implementation
	   can call it (so that the ORB core can raise the exception).

	2) The AlreadyIdentified exception is raised if identify_sender()
	   or identify_receiver() were previously called "for this addressing
	   domain".

	   What is an "addressing domain"? The term is never defined. I assume
	   what is meant is "address space"? (That would make sense because,
	   given how the interfaces work, a single process can only deal
	   with a single OTS implementation at a time.

	3) TSIdentification, Sender, and Receiver are PIDL. The C++ mapping
	   does not specify special mapping rules for these interfaces.
	   In absence of special rules, the default rules apply. However,
	   that begs the question: how does the OTS service get hold of
	   the object reference for TSIdentification, and how does
	   the OTS create references to Sender and Receiver?
	
	4) The spec says:

		"Prior to the first transactional request, the
		Transaction Service will identify itself to the ORB
		within its domain to establish the transaction callbacks
		to be used for transactional requests and replies."

	   I don't understand how this works. In particular, how does the
	   thread of control get into the OTS service so that the service
	   can register itself? At the very least, there would have to
	   be some sort of call like "initialize_OTS()" that the application
	   code can call, otherwise, the service doesn't ever get a foot
	   in the door.

	   To me, it looks like what would be needed is something on
	   resolve_initial_references that returns an initialization
	   object of some kind, so the client can hand the thread of
	   control to the OTS implementation.

	   resolve_initial_references does mention OTS, for
	   "TransactionCurrent". However, if I call ORB_init() immediately
	   followed by a request for TransactionCurrent, the OTS
	   implementation won't have had a chance yet to intialize itself.
	   In turn, that might make it difficult to return a Current object.

The upshot appears to be that there is no way to implement OTS in a way
that wouldn't force the developer to use proprietary calls.

Resolution:
Revised Text:
Actions taken:
October 11, 1999: received issue

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@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, ghallmar@us.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, ghallmar@us.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@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 3306: Resume check - what state must be stored for each thread? (ots-rtf)

Click
here for this issue's archive.
Source: IONA (Mr. Derek Thomson, )
Nature: Uncategorized Issue
Severity:
Summary:
On page 10-40 of the OTS specification appears a description of the
checking to be performed on a Current::resume operation if checked
transactions are implemented.

  Resume Check

  Before allowing a client or object to associate a transaction context
with its thread of
  control, a check is made to ensure that this transaction context was
previously
  associated with the execution environment of the thread. This would be
true if the
  thread either created the transaction or received it in a
transactional operation.

Does this means that an unrestricted amount of state must be retained
for the lifetime of each thread? That is, do all the transactions ever
created in a thread, and all the transactions ever received in a
transactional operation handled by that thread need to be stored so that
the Control argument to "resume" can be compared against each of them to
implement the check?

That can't be the case, but it that's how I'm interpreting it. What is
this really trying to say?

Resolution:
Revised Text:
Actions taken:
February 9, 2000: received issue

Issue 3308: What happens to the existing transaction context on resume? (ots-rtf)

Click
here for this issue's archive.
Source: IONA (Mr. Derek Thomson, )
Nature: Uncategorized Issue
Severity:
Summary:
According to the OTS spec, there is no guaranteed way to get the previous
transaction back after calling Current::resume with another transaction.

Current::commit and Current::rollback only restore the previous transaction
context if the same thread started the transaction - otherwise the transaction
context is set to null. This means that you might have lost the previous
transaction that was replaced by "resume" ... or not, depending on where it was
created.

Is this desirable behaviour, considering that this suffers from the requirement
to keep track of all the transactions ever created by each thread? Why not just
restore the previous transaction context on commit and rollback?

Resolution:
Revised Text:
Actions taken:
February 10, 2000: received issue

Issue 3343: Clarification - Transaction Policy (ots-rtf)

Click
here for this issue's archive.
Source: International Business Machines (Mr. Thomas Freund, tjfreund@us.ibm.com)
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 3344: OTS issue: PropagationContext and Status (ots-rtf)

Click
here for this issue's archive.
Source: UBS (Mr. Hans Kneubuehl, hans.kneubuehl@ubs.com)
Nature: Uncategorized Issue
Severity:
Summary:
I would like to raise a new OTS issue:
OTS interoperation does specify no way how the transaction status can be 
propagated with a request and a reply. The PropagationContext is missing 
information about the transaction status. However, this information is 
essential for efficient and accurate interoperation between different OTS 
interoperation, and thus, the OTS should be corrected to propagate this 
information for interoperation.

Resolution:
Revised Text:
Actions taken:
February 22, 2000: received issue

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@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 3361: Preventing calls in a rollback-only transaction (ots-rtf)

Click
here for this issue's archive.
Source: IONA (Mr. Derek Thomson, )
Nature: Uncategorized Issue
Severity:
Summary:
This is related to the discussion on propagating the transaction status in the
transaction context.

Can an OTS implementation prevent outgoing calls within the scope of a
transaction that has been marked rollback only?

Without nailing this down, we can't really say if we can transparently save any
unnecessary operations after the transaction has been set to rollback only.
There don't seem to be any words to this effect in the spec. I'm not sure if
it's a valid optimization at all.

Resolution:
Revised Text:
Actions taken:
February 25, 2000: received issue

Issue 3362: transaction versus transaction context (ots-rtf)

Click
here for this issue's archive.
Source: UBS (Mr. Hans Kneubuehl, hans.kneubuehl@ubs.com)
Nature: Uncategorized Issue
Severity:
Summary:
The OTS spec makes a difference between transaction and transaction context:

Roughly:
transaction - an ACID unit of work
transaction context - information about a transaction associated with a thread 

My understanding is that the OTS then also makes this distinction for 
propagation, and I think this is where we disagree:
i)  transaction propagation
ii) transaction context propagation

My understanding is that
i)  explicit and implicit transaction propagation refer to the application 
level: whether or not transactional behavior is specified in the operation 
signature
ii) transaction context propagation refers to the ORB level 
 
Thus the application can choose how it wants to control whether the transaction 
is propagated. That's i). But once it is decided that a transaction has to be 
propagated, the question is by what mechanism at the ORB level. That's ii).

Your understanding is that you can have only explicit or implicit and it refers 
to both levels, right?

Resolution:
Revised Text:
Actions taken:
February 25, 2000: received issue

Issue 3365: OTS issue: explicit transaction propagation not clearly specified (ots-rtf)

Click
here for this issue's archive.
Source: UBS (Mr. Hans Kneubuehl, hans.kneubuehl@ubs.com)
Nature: Uncategorized Issue
Severity:
Summary:
There has now been some discussion on this subject, therefore I would like to 
have it registered  as an official issue:

issue:
------
It is not clearly specified how the implicit transaction context associated 
with a thread is propagated to another execution environment (at the ORB level) 
in case of explicit transaction propagation control. It should be clarified in 
various places, for example, that the PropagationContxt is not required to be 
transferred in case of explicit transaction propagation.


dicussion:
----------
First, note the following two important aspects to transaction propagation:

1. Transaction Propagation Control:
How is it controlled at the application level whether a transaction is 
propagated? -> the spec specifies implicit and explicit propagation control.

2. Transaction Context Propagation:
How is the implicit transaction context propagated to another execution 
environement at the ORB level? -> implicit transfer of the PropagationContext 
versus explicit transfer of a Control objref (as an explicit request 
parameter). 

In principle, the spec could mandate that the PropagationContext is always 
transfered even when explicit transaction propagation control is used. 
Historically this was never intendend (see quoted message below). However, 
there are a lot of places where the spec speaks about implicit transfer of the 
PropagationContext without referring to implicit propagation control (Maybe 
because explicit propagation control was added at a later stage?):

p. 10-60, "When the implicit context is transferred, it is represented as a 
PropagationContext."
-> The historical intent is that in case of explicit propagation control, the 
implicit transaction context is transferred by passing the Control objref as an 
explicit request parameter. (Note that the implicit in 'implicit context' is 
referring to the fact that the OTS maintains implicitly transaction information 
with threads, its not referring to transferral. Also note that the 'implicit 
context' is referring to the transaction context, not the progagation context.)

p. 10-60, "When the Control object is passed as an operation argument (explicit 
propagation), no special transfer mechanism is required."
-> This could be interpreted (wrongly according to the historical intent) that 
no special transfer mechanism is required, implicit transferral of the 
PropagationContext is just fine.

p. 10-61, "An interposed coordinator registers as a participant in the 
transaction with the Coordinator identified in the PropagationContext of the 
received request."
-> but with explicit propagation it is not required that the received request 
contains a PropagationContext...

p. 10-63, "When exporting a transaction, the ORB sets the PropagationContext 
into the ServiceContext::context_data field..."
-> but this should only be required for implicit propagation control...

p. 10-67, "The ORB will invoke the sender callbacks only when a transactional 
operation is issued for an object in a different process."
-> What's the definition of a transactional operation? An operation on a 
transactional object? If yes, then this saying even in case of transactional 
objects that don't inherit TransactionalObject (ie. explicit propagation 
control), the ORB required to get the PropagationContext by using 
Sender::sending_request and to pass a PropagationContext to 
Sender::received_reply.


...

Possible resolution:
--------------------
Several people have already suggested that explicit propagation is axed from 
the OTS.

Resolution:
Revised Text:
Actions taken:
February 28, 2000: received issue

Issue 3404: OTS interop issue: propagation of current trx status (ots-rtf)

Click
here for this issue's archive.
Source: UBS (Mr. Hans Kneubuehl, hans.kneubuehl@ubs.com)
Nature: Uncategorized Issue
Severity:
Summary:
The OTS spec currently does not mandate that if a client thread in OTS domain A 
invokes a server thread in OTS domain B, the current transaction status is 
propagated back to the OTS in domain B such that the OTS in domain A is capable 
of updating the status of the current transaction and providing accurate 
information to the application e.g. when queried using Current::get_status. 
(With current transaction I am referring to the transaction whose id would be 
passed in the 'current' field in case of a PropagationContext transferral.)

However, if the transaction status of the current transaction changes as a 
result of a transactional object invocation in domain B, then updating the 
current transaction status in domain A is useful for the applications that 
query the current transaction status after an invocation. It is also useful for 
the other applications that don't query the status because the OTS in domain A 
then can prevent further pointless invocations if the transaction has been 
marked for rollback.

This feature is that useful that the OTS should guarantee that the transaction 
status is propagated back.


Possbile resolutions:
---------------------
(a) As has been shown in previous discussion this can be solved by mandating 
how interoperable OTSs have to do it based on the current specs.

(b) A more efficient solution would be, that the current transaction status is 
propagated back in an interoperable way as part of the reply, e.g. by
- introducing a new ServiceId TransactionService_2_0 in chapter 13 of CORBA
- defining a new propagation context
     struct PropagationContext_2_0
     {
         unsigned long timeout;
         TransIdentity current;
         sequence<TransIdentity> parents;
         Status current_status;
         any implementation_specific_data;
     };
- prior to portable interceptors: extend the Sender and Receiver interfaces 
with new operations that support the new propagation context

Resolution:
Revised Text:
Actions taken:
March 2, 2000: received issue

Issue 3417: TransactionalObject remnants (ots-rtf)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi@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@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@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@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@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@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@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