You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ar...@apache.org on 2007/06/15 18:43:13 UTC
svn commit: r547733 - /incubator/qpid/trunk/qpid/specs/dtx.0-10-dtx.xml
Author: arnaudsimon
Date: Fri Jun 15 09:43:11 2007
New Revision: 547733
URL: http://svn.apache.org/viewvc?view=rev&rev=547733
Log:
includes the dtx part of AMQP 0.10
Added:
incubator/qpid/trunk/qpid/specs/dtx.0-10-dtx.xml
Added: incubator/qpid/trunk/qpid/specs/dtx.0-10-dtx.xml
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/specs/dtx.0-10-dtx.xml?view=auto&rev=547733
==============================================================================
--- incubator/qpid/trunk/qpid/specs/dtx.0-10-dtx.xml (added)
+++ incubator/qpid/trunk/qpid/specs/dtx.0-10-dtx.xml Fri Jun 15 09:43:11 2007
@@ -0,0 +1,825 @@
+<?xml version="1.0"?>
+
+<!--
+ Copyright Notice
+ ================
+ (c) Copyright JPMorgan Chase Bank & Co., Cisco Systems, Inc., Envoy Technologies Inc.,
+ iMatix Corporation, IONA\ufffd Technologies, Red Hat, Inc.,
+ TWIST Process Innovations, and 29West Inc. 2006. All rights reserved.
+
+ License
+ =======
+ JPMorgan Chase Bank & Co., Cisco Systems, Inc., Envoy Technologies Inc., iMatix
+ Corporation, IONA Technologies, Red Hat, Inc., TWIST Process Innovations, and
+ 29West Inc. (collectively, the "Authors") each hereby grants to you a worldwide,
+ perpetual, royalty-free, nontransferable, nonexclusive license to
+ (i) copy, display, distribute and implement the Advanced Messaging Queue Protocol
+ ("AMQP") Specification and (ii) the Licensed Claims that are held by
+ the Authors, all for the purpose of implementing the Advanced Messaging
+ Queue Protocol Specification. Your license and any rights under this
+ Agreement will terminate immediately without notice from
+ any Author if you bring any claim, suit, demand, or action related to
+ the Advanced Messaging Queue Protocol Specification against any Author.
+ Upon termination, you shall destroy all copies of the Advanced Messaging
+ Queue Protocol Specification in your possession or control.
+
+ As used hereunder, "Licensed Claims" means those claims of a patent or
+ patent application, throughout the world, excluding design patents and
+ design registrations, owned or controlled, or that can be sublicensed
+ without fee and in compliance with the requirements of this
+ Agreement, by an Author or its affiliates now or at any
+ future time and which would necessarily be infringed by implementation
+ of the Advanced Messaging Queue Protocol Specification. A claim is
+ necessarily infringed hereunder only when it is not possible to avoid
+ infringing it because there is no plausible non-infringing alternative
+ for implementing the required portions of the Advanced Messaging Queue
+ Protocol Specification. Notwithstanding the foregoing, Licensed Claims
+ shall not include any claims other than as set forth above even if
+ contained in the same patent as Licensed Claims; or that read solely
+ on any implementations of any portion of the Advanced Messaging Queue
+ Protocol Specification that are not required by the Advanced Messaging
+ Queue Protocol Specification, or that, if licensed, would require a
+ payment of royalties by the licensor to unaffiliated third parties.
+ Moreover, Licensed Claims shall not include (i) any enabling technologies
+ that may be necessary to make or use any Licensed Product but are not
+ themselves expressly set forth in the Advanced Messaging Queue Protocol
+ Specification (e.g., semiconductor manufacturing technology, compiler
+ technology, object oriented technology, networking technology, operating
+ system technology, and the like); or (ii) the implementation of other
+ published standards developed elsewhere and merely referred to in the
+ body of the Advanced Messaging Queue Protocol Specification, or
+ (iii) any Licensed Product and any combinations thereof the purpose or
+ function of which is not required for compliance with the Advanced
+ Messaging Queue Protocol Specification. For purposes of this definition,
+ the Advanced Messaging Queue Protocol Specification shall be deemed to
+ include both architectural and interconnection requirements essential
+ for interoperability and may also include supporting source code artifacts
+ where such architectural, interconnection requirements and source code
+ artifacts are expressly identified as being required or documentation to
+ achieve compliance with the Advanced Messaging Queue Protocol Specification.
+
+ As used hereunder, "Licensed Products" means only those specific portions
+ of products (hardware, software or combinations thereof) that implement
+ and are compliant with all relevant portions of the Advanced Messaging
+ Queue Protocol Specification.
+
+ The following disclaimers, which you hereby also acknowledge as to any
+ use you may make of the Advanced Messaging Queue Protocol Specification:
+
+ THE ADVANCED MESSAGING QUEUE PROTOCOL SPECIFICATION IS PROVIDED "AS IS,"
+ AND THE AUTHORS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+ IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE
+ CONTENTS OF THE ADVANCED MESSAGING QUEUE PROTOCOL SPECIFICATION ARE
+ SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF THE ADVANCED
+ MESSAGING QUEUE PROTOCOL SPECIFICATION WILL NOT INFRINGE ANY THIRD PARTY
+ PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+ THE AUTHORS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL,
+ INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO ANY
+ USE, IMPLEMENTATION OR DISTRIBUTION OF THE ADVANCED MESSAGING QUEUE
+ PROTOCOL SPECIFICATION.
+
+ The name and trademarks of the Authors may NOT be used in any manner,
+ including advertising or publicity pertaining to the Advanced Messaging
+ Queue Protocol Specification or its contents without specific, written
+ prior permission. Title to copyright in the Advanced Messaging Queue
+ Protocol Specification will at all times remain with the Authors.
+
+ No other rights are granted by implication, estoppel or otherwise.
+
+ Upon termination of your license or rights under this Agreement, you
+ shall destroy all copies of the Advanced Messaging Queue Protocol
+ Specification in your possession or control.
+
+ Trademarks
+ ==========
+ "JPMorgan", "JPMorgan Chase", "Chase", the JPMorgan Chase logo and the
+ Octagon Symbol are trademarks of JPMorgan Chase & Co.
+
+ IMATIX and the iMatix logo are trademarks of iMatix Corporation sprl.
+
+ IONA, IONA Technologies, and the IONA logos are trademarks of IONA
+ Technologies PLC and/or its subsidiaries.
+
+ LINUX is a trademark of Linus Torvalds. RED HAT and JBOSS are registered
+ trademarks of Red Hat, Inc. in the US and other countries.
+
+ Java, all Java-based trademarks and OpenOffice.org are trademarks of
+ Sun Microsystems, Inc. in the United States, other countries, or both.
+
+ Other company, product, or service names may be trademarks or service
+ marks of others.
+
+ Links to full AMQP specification:
+ =================================
+ http://www.envoytech.org/spec/amq/
+ http://www.iona.com/opensource/amqp/
+ http://www.redhat.com/solutions/specifications/amqp/
+ http://www.twiststandards.org/tiki-index.php?page=AMQ
+ http://www.imatix.com/amqp
+
+-->
+
+<amqp major="8" minor="0" port="5672" comment="AMQ Protocol version 0-8">
+
+<!-- XA constants -->
+<constant name="xa-rbrollback" value="1">
+ <doc>The rollback was caused by an unspecified reason.</doc>
+</constant>
+<constant name="xa-rbtimeout" value="2">
+ <doc>A transaction branch took too long.</doc>
+</constant>
+<constant name="xa-heurhaz" value="3">
+ <doc>The transaction branch may have been heuristically completed.</doc>
+</constant>
+<constant name="xa-heurcom" value="4">
+ <doc>The transaction branch has been heuristically committed.</doc>
+</constant>
+<constant name="xa-heurrb" value="5">
+ <doc>The transaction branch has been heuristically rolled back.</doc>
+</constant>
+<constant name="xa-heurmix" value="6">
+ <doc>The transaction branch has been heuristically committed and rolled back.</doc>
+</constant>
+<constant name="xa-rdonly" value="7">
+ <doc>The transaction branch was read-only and has been committed.</doc>
+</constant>
+<constant name="xa-ok" value="8">
+ <doc>Normal execution.</doc>
+</constant>
+
+<!-- DTX domains -->
+ <domain name = "Xid" type = "longstr" label = "Transaction branch identifier">
+ <doc>
+ An Xid uniquely identifies a transaction branch.
+ </doc>
+ <rule name = "implementation">
+ <doc>
+ Xid contains a format identifier, two length fields and a data field:
+ format_id long
+ gtrid_length octet
+ bqual_length octet
+ data
+ format_id is an implementation specific format identifier
+ the data field is a sequence of octets of at most 128 bytes containing the txn id and the branch id
+ gtrid_length field indicates how many bytes of this form the transaction id
+ bqual_length field indicates how many bytes of this form the branch id
+ The sum of the two lengths must equal the length of the data field
+ </doc>
+ </rule>
+ </domain>
+
+ <domain name="field-table" type="table">
+ </domain>
+
+ <domain name="bit" type="bit" label="single bit">
+ </domain>
+
+ <domain name="short" type="short" label="16-bit integer">
+ </domain>
+
+ <domain name="long" type="long" label="32-bit integer">
+ </domain>
+
+<!-- dtx-->
+
+<!-- == dtx-demarcation ========================================================== -->
+
+
+ <class name = "dtx-demarcation" handler = "channel" index = "100" label = "demarcates distributed transaction branches">
+ <doc>
+ This class is part of the X-Open XA distributed transaction protocol support. It allows a channel to be
+ selected for use with distributed transactions and the transactional boundaries for work on that channel
+ to be demarcated.
+ </doc>
+ <doc type = "grammar">
+ dtx-demarcation = C:SELECT S:SELECT-OK *demarcation
+
+ demarcation = C:START S:START-OK C:END S:END-OK
+ </doc>
+
+
+ <chassis name = "server" implement = "MAY" />
+ <chassis name = "client" implement = "MAY" />
+
+
+ <!-- - - - SELECT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "select" synchronous = "1" index = "10" label = "select distributed transaction mode">
+ <doc>
+ This method sets the channel to use distributed transactions. The client must use this method at least once on a channel before using XA demarcation operations.
+ </doc>
+ <chassis name = "server" implement = "MAY" />
+ <response name = "select-ok" />
+ </method>
+
+ <!-- - - - SELECT-OK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "select-ok" synchronous = "1" index = "11" label = "confirm distributed transaction mode">
+ <doc>
+ This method confirms to the client that the channel was successfully set to use distributed transactions.
+ </doc>
+ <chassis name = "client" implement = "MAY" />
+ </method>
+
+ <!-- - - START - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "start" synchronous = "1" index = "20" label = "Start a transaction branch">
+ <doc>
+ This method is called when messages should be produced and consumed on behalf a transaction branch identified by xid.
+ </doc>
+ <chassis name = "server" implement = "MAY" />
+ <response name = "start-ok" />
+
+
+ <field name = "xid" domain = "Xid" label = "Start any work associated with transaction branch with Xid xid">
+ <doc>
+ Specifies the xid of the transaction branch to be started.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+
+ <field name = "join" domain = "bit" label = "Indicate whether this is joining an already associated Xid">
+ <doc>
+ Indicate that the start applies to joining a transaction previously seen.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+
+ <field name = "resume" domain = "bit" label = "Indicate whether this is resuming a suspended transaction branch">
+ <doc>
+ Indicate that the start applies to resuming a suspended transaction branch specified.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+ </method>
+
+ <!-- - - - START-OK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "start-ok" synchronous = "1" index = "21" label = "confirm distributed transaction start">
+ <doc>
+ This method confirms to the client that the transaction branch is started or specify the error condition.
+ </doc>
+ <chassis name = "client" implement = "MAY" />
+
+ <field name = "flags" domain = "short" label = "xa-ok or xa-rbrollback">
+ <doc>
+ xa-ok: Normal execution.
+ xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified reason.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+ </method>
+
+
+ <!-- - - END - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "end" synchronous = "1" index = "30" label = "End a transaction branch">
+ <doc>
+ This method is called when the work done on behalf a transaction branch finishes or needs to be suspended.
+ </doc>
+ <chassis name = "server" implement = "MAY" />
+ <response name = "end-ok" />
+
+ <field name = "xid" domain = "Xid" label = "End any work associated with transaction branch with Xid xid">
+ <doc>
+ Specifies the xid of the transaction branch to be ended.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+
+ <field name = "fail" domain = "bit" label = "Indicate whether the portion of work has failed">
+ <doc>
+ Indicates that the portion of work has failed otherwise the portion of work has completed successfully.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+
+ <field name = "suspend" domain = "bit" label = "Indicate that the transaction branch is temporarily suspended in an incomplete state">
+ <doc>
+ Indicates that the transaction branch is temporarily suspended in an incomplete state.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+
+ </method>
+
+ <!-- - - - END-OK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "end-ok" synchronous = "1" index = "31" label = "confirm distributed transaction end">
+ <doc>
+ This method confirms to the client that the transaction branch is ended or specify the error condition.
+ </doc>
+ <chassis name = "client" implement = "MAY" />
+
+ <field name = "flags" domain = "short" label = "xa-ok, xa-rbrollback, xa-rbtimeout">
+ <doc>
+ xa-ok: Normal execution.
+ xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified reason.
+ xa-rbtimeout: The work represented by this transaction branch took too long.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+ </method>
+</class>
+
+
+ <!-- == dtx-coordination ========================================================== -->
+
+<class name = "dtx-coordination" handler = "channel" index = "105" label = "coordinate transaction outcomes">
+ <doc>
+ This class is part of the X-Open XA distributed transaction protocol support.
+ It allows the transaction manager to coordinate transaction outcomes.
+ </doc>
+
+ <doc type = "grammar">
+
+ dtx-coordination = *coordination
+
+ coordination = command
+ / outcome
+ / recovery
+
+ command = C:SET-TIMEOUT S:SET-TIMEOUT-OK
+ / C:GET-TIMEOUT S:GET-TIMEOUT-OK
+
+ outcome = one-phase-commit
+ / one-phase-rollback
+ / two-phase-commit
+ / two-phase-rollback
+
+ one-phase-commit = C:COMMIT S:COMMIT-OK
+
+ one-phase-rollback = C:ROLLBACK S:ROLLBACK-OK
+
+ two-phase-commit = C:PREPARE S:PREPARE-OK C:COMMIT S:COMMIT-OK
+
+ two-phase-rollback = C:PREPARE S:PREPARE-OK C:ROLLBACK S:ROLLBACK-OK
+
+ recovery = C:RECOVER S:RECOVER-OK *recovery-outcome
+
+ recovery-outcome = one-phase-commit
+ / one-phase-rollback
+ / C:FORGET S:FORGET-OK
+ </doc>
+
+ <chassis name = "server" implement = "MAY" />
+ <chassis name = "client" implement = "MAY" />
+
+ <rule name = "security">
+ <doc>
+ Access-tickets are propagated with XA demarcation methods with the aim of
+ restricting which users are allowed to control which transactions.
+ The server MAY restrict transaction coordination to a particular identity.
+ </doc>
+ <doc type = "scenario">
+ </doc>
+ </rule>
+
+
+ <!-- - - COMMIT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "commit" synchronous = "1" index = "10" label = "Commit the work done on behalf a transaction branch ">
+ <doc>
+ This method commits the work associated with xid. Any produced messages are made available and any consumed messages are discarded.
+ </doc>
+ <chassis name = "server" implement = "MAY" />
+ <response name = "commit-ok" />
+
+ <rule name = "internalError">
+ <doc>
+ If an error occurs in committing the transaction branch then the server MUST raise a channel exception with reply code 541 (internal error)
+ </doc>
+ </rule>
+
+ <rule name = "commandInvalid">
+ <doc>
+ If the method is invoked in an improper context (see class grammar) then the server MUST raise a channel exception with reply code 503 (command invalid)
+ </doc>
+ </rule>
+
+ <field name = "xid" domain = "Xid" label = "Commit the work associated with Xid xid">
+ <doc>
+ Specifies the Xid of the transaction branch to be committed.
+ </doc>
+ <assert check = "notnull" />
+ <!-- rules -->
+ <rule name = "unknownXid">
+ <doc>
+ If Xid is unknown (the transaction branch has not been started or has already been ended) then the server MUST raise a channel exception with reply code 404 (not found).
+ </doc>
+ </rule>
+ <rule name = "notdisassociated">
+ <doc>
+ If this method is called when Xid is still associated with a channel then the server MUST raise a channel exception with reply code 503 (command invalid)
+ </doc>
+ </rule>
+ </field>
+
+ <field name = "one-phase" domain = "bit" label = "Indicate that one-phase optimization must be used">
+ <doc>
+ When set then one-phase commit optimization is used.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+ </method>
+
+ <!-- - - - COMMIT-OK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "commit-ok" synchronous = "1" index = "11" label = "confirm distributed transaction commit">
+ <doc>
+ This method confirms to the client that the transaction branch is committed or specify the error condition.
+ </doc>
+ <chassis name = "client" implement = "MAY" />
+
+ <field name = "flags" domain = "short" label = "xa-ok, xa-heurhaz, xa-heurcom, xa-heurrb, xa-heurmix, xa-rbrollback">
+ <doc>
+ xa-ok: Normal execution,
+ xa-heurhaz: Due to some failure, the work done on behalf of the specified transaction branch may have been heuristically completed.
+ xa-heurcom: Due to a heuristic decision, the work done on behalf of the specified transaction
+ branch was committed.
+ xa-heurrb: Due to a heuristic decision, the work done on behalf of the specified transaction
+ branch was rolled back.
+ xa-heurmix: Due to a heuristic decision, the work done on behalf of the specified transaction
+ branch was partially committed and partially rolled back.
+ xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified reason.
+ xa-rbtimeout: The work represented by this transaction branch took too long.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+ </method>
+
+
+ <!-- - - FORGET - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "forget" synchronous = "1" index = "20" label = "Discard knowledge of a heuristically-completed transaction branch">
+ <doc>
+ This method is called to forget about a heuristically completed transaction branch.
+ </doc>
+ <chassis name = "server" implement = "MAY" />
+ <response name = "forget-ok" />
+
+ <rule name = "internalError ">
+ <doc>
+ If an error occurs in forgetting the transaction branch then the server MUST raise a channel exception with reply code 541 (internal error)
+ </doc>
+ </rule>
+
+ <rule name = "commandInvalid ">
+ <doc>
+ If the method is invoked in an improper context (see class grammar) then the server MUST raise a channel exception with reply code 503 (command invalid)
+ </doc>
+ </rule>
+
+ <field name = "xid" domain = "Xid" label = "Erase RM its knowledge of Xid xid">
+ <doc>
+ Specifies the xid of the transaction branch to be forgotten.
+ </doc>
+ <assert check = "notnull" />
+ <!-- rules -->
+ <rule name = "unknownXid">
+ <doc>
+ If Xid is unknown (the transaction branch has not been started or has already been ended) then the server MUST raise a channel exception with reply code 404 (not found).
+ </doc>
+ </rule>
+ <rule name = "notdisassociated">
+ <doc>
+ If this method is called when Xid is still associated with a channel then the server MUST raise a channel exception with reply code 503 (command invalid)
+ </doc>
+ </rule>
+ </field>
+ </method>
+
+ <!-- - - - FORGET-OK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "forget-ok" synchronous = "1" index = "21" label = "Confirm distributed transaction forget">
+ <doc>
+ This method confirms to the client that the transaction branch is forgotten or specify the error condition.
+ </doc>
+ <chassis name = "client" implement = "MAY" />
+ </method>
+
+ <!-- - - - get-Timeout - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "get-timeout" synchronous = "1" index = "30" label = "Obtain the transaction timeout value in seconds">
+ <doc>
+ This method obtains the current transaction timeout value in seconds.
+ If setTimeout was not used prior to invoking this method, the return value is the default timeout; otherwise, the value used in the previous setTimeout call is returned.
+ </doc>
+ <chassis name = "server" implement = "MAY" />
+ <response name = "get-timeout-ok" />
+
+
+ <field name = "xid" domain = "Xid" label = "Xid of the branch to get the timeout value">
+ <doc>
+ Specifies the Xid of the transaction branch for getting the timeout.
+ </doc>
+ <assert check = "notnull" />
+ <!-- rules -->
+ <rule name = "unknownXid">
+ <doc>
+ If Xid is unknown (the transaction branch has not been started or has already been ended) then the server MUST raise a channel exception with reply code 404 (not found).
+ </doc>
+ </rule>
+ </field>
+
+ <rule name = "internalError ">
+ <doc>
+ If an error occurs in setting the transaction timeout then the server MUST raise a channel exception with reply code 541 (internal error)
+ </doc>
+ </rule>
+ </method>
+
+ <!-- - - - get-Timeout-OK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "get-timeout-ok" synchronous = "1" index = "31" label = "Return transaction timeout">
+ <doc>
+ This method returns the current transaction timeout value in seconds.
+ </doc>
+ <chassis name = "client" implement = "MAY" />
+
+ <field name = "timeout" domain = "long" label = "The current transaction timeout value">
+ <doc>
+ The current transaction timeout value in seconds.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+ </method>
+
+ <!-- - - PREPARE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "prepare" synchronous = "1" index = "40" label = "Ask to prepare a transaction branch">
+ <doc>
+ This method prepares for commitment any message produced or consumed on behalf of xid.
+ </doc>
+
+ <rule name = "internalError">
+ <doc>
+ If an error occurs in preparing the transaction branch then the server MUST raise a channel exception with reply code 541 (internal error). The specified Xid may or may not have been prepared.
+ </doc>
+ </rule>
+
+ <rule name = "commandInvalid">
+ <doc>
+ If the method is invoked in an improper context (see class grammar) then the server MUST raise a channel exception with reply code 503 (command invalid)
+ </doc>
+ </rule>
+
+ <rule name = "obligation1">
+ <doc>
+ Once this method successfully returns it is guaranteed that the transaction branch may be either
+ committed or rolled back regardless of failures.
+ </doc>
+ </rule>
+
+ <rule name = "obligation2">
+ <doc>
+ The knowledge of xid cannot be erased before commit or rollback complete the branch.
+ </doc>
+ </rule>
+
+ <chassis name = "server" implement = "MAY" />
+ <response name = "prepare-ok" />
+
+ <field name = "xid" domain = "Xid" label = "Prepare for commitment any work associated with Xid xid">
+ <doc>
+ Specifies the Xid of the transaction branch that can be prepared.
+ </doc>
+ <assert check = "notnull" />
+ <!-- rules -->
+ <rule name = "unknownXid">
+ <doc>
+ If Xid is unknown (the transaction branch has not been started or has already been ended) then the server MUST raise a channel exception with reply code 404 (not found).
+ </doc>
+ </rule>
+ <rule name = "notdisassociated">
+ <doc>
+ If this method is called when Xid is still associated with a channel then the server MUST raise a channel exception with reply code 503 (command invalid)
+ </doc>
+ </rule>
+ </field>
+ </method>
+
+
+ <!-- - - - PREPARE-OK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "prepare-ok" synchronous = "1" index = "41" label = "confirm distributed transaction prepare">
+ <doc>
+ This method confirms to the client that the transaction branch is prepared or specify the error condition.
+ </doc>
+ <chassis name = "client" implement = "MAY" />
+
+ <field name = "flags" domain = "short" label = "xa-ok, xa-rdonly, xa-rbrollback, xa-rbtimeout">
+ <doc>
+ xa-ok: Normal execution.
+ xa-rdonly: The transaction branch was read-only and has been committed.
+ xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified reason.
+ xa-rbtimeout: The work represented by this transaction branch took too long.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+ </method>
+
+
+ <!-- - - RECOVER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "recover" synchronous = "1" index = "50" label = "Get a list of Xids the RM has prepared or heuristically completed">
+ <doc>
+ This method is called to obtain a list of transaction branches that are in a
+ prepared or heuristically completed state.
+ </doc>
+
+ <rule name = "internalError ">
+ <doc>
+ If an error occurs in recovering then the server MUST raise a channel exception with reply code 541 (internal error)
+ </doc>
+ </rule>
+
+ <rule name = "startEnd">
+ <doc>
+ If this endscan is used in conjunction with startscan then a single call starts and then ends a scan.
+ </doc>
+ </rule>
+
+ <rule name = "mustBeStarted">
+ <doc>
+ If none of endscan and startscan are set then a recovery scan must already be started otherwise the server MUST raise a channel exception with reply code 503 (command invalid)
+ </doc>
+ </rule>
+
+ <chassis name = "server" implement = "MAY" />
+ <response name = "recover-ok" />
+
+
+ <field name = "startscan" domain = "bit" label = "Indicates that recovery scan should start">
+ <doc>
+ Indicates that recovery scan should start.
+ </doc>
+ <rule name = "recoveryAlreadyOpen">
+ <doc>
+ If a recovery scan is already open, the effect is as if the recovery scan were ended and then restarted.
+ </doc>
+ </rule>
+ <assert check = "notnull" />
+ </field>
+
+ <field name = "endscan" domain = "long" label = "indicates that the recovery scan should end after returning the Xids">
+ <doc>
+ Indicates that the recovery scan should end after returning the Xids.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+ </method>
+
+
+ <!-- - - RECOVER-OK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "recover-ok" synchronous = "1" index = "51" label = "list of Xids to be recovered">
+ <doc>
+ Returns to the client a table with single item that is a sequence of transaction Xids that are in a prepared or heuristically completed state.
+ </doc>
+
+ <chassis name = "client" implement = "MAY" />
+
+ <field name = "in-doubt" domain = "field-table" label = "Table containing the sequence of xids to be recovered">
+ <doc>
+ Xids that are in a prepared or heuristically completed state.
+ </doc>
+ <rule name = "sequenceOfXids">
+ <doc>
+ The field table must contain a field called 'xids' of type sequence of longstrs representing the Xids that are in a prepared or heuristically completed state.
+ </doc>
+ </rule>
+ <assert check = "notnull" />
+ </field>
+ </method>
+
+
+ <!-- - - ROLLBACK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "rollback" synchronous = "1" index = "60" label = "Rollback a transaction branch">
+ <doc>
+ This method rolls back the work associated with xid. Any produced messages are discarded
+ and any consumed messages are re-enqueued.
+ </doc>
+
+ <rule name = "internalError">
+ <doc>
+ If an error occurs in rolling back the transaction branch then the server MUST raise a channel exception with reply code 541 (internal error)
+ </doc>
+ </rule>
+
+ <rule name = "commandInvalid">
+ <doc>
+ If the method is invoked in an improper context (see class grammar) then the server MUST raise a channel exception with reply code 503 (command invalid)
+ </doc>
+ </rule>
+
+ <chassis name = "server" implement = "MAY" />
+ <response name = "rollback-ok" />
+
+ <field name = "xid" domain = "Xid" label = "Rollback any work associated with Xid xid">
+ <doc>
+ Specifies the Xid of the transaction branch that can be rolled back.
+ </doc>
+ <assert check = "notnull" />
+ <!-- rules -->
+ <rule name = "unknownXid">
+ <doc>
+ If Xid is unknown (the transaction branch has not been started or has already been ended) then the server MUST raise a channel exception with reply code 404 (not found).
+ </doc>
+ </rule>
+ <rule name = "notdisassociated">
+ <doc>
+ If this method is called when Xid is still associated with a channel then the server MUST raise a channel exception with reply code 503 (command invalid)
+ </doc>
+ </rule>
+ </field>
+ </method>
+
+ <!-- - - - ROLLBACK-OK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "rollback-ok" synchronous = "1" index = "61" label = "confirm distributed transaction rollback">
+ <doc>
+ This method confirms to the client that the transaction branch is rolled back or specify the error condition.
+ </doc>
+ <chassis name = "client" implement = "MAY" />
+
+ <field name = "flags" domain = "short" label = "xa-ok, xa-heurhaz, xa-heurcom, xa-heurrb, xa-heurmix, xa-rbrollback">
+ <doc>
+ xa-ok: Normal execution,
+ xa-heurhaz: Due to some failure, the work done on behalf of the specified transaction branch may have been heuristically completed.
+ xa-heurcom: Due to a heuristic decision, the work done on behalf of the specified transaction
+ branch was committed.
+ xa-heurrb: Due to a heuristic decision, the work done on behalf of the specified transaction
+ branch was rolled back.
+ xa-heurmix: Due to a heuristic decision, the work done on behalf of the specified transaction
+ branch was partially committed and partially rolled back.
+ xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified reason.
+ xa-rbtimeout: The work represented by this transaction branch took too long.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+ </method>
+
+
+ <!-- - - SETTIMEOUT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "set-timeout" synchronous = "1" index = "70" label = "Set the transaction timeout value">
+ <doc>
+ Sets the specified transaction branch timeout value in seconds.
+ </doc>
+
+ <rule name = "internalError ">
+ <doc>
+ If an error occurs in setting the transaction timeout then the server MUST raise a channel exception with reply code 541 (internal error)
+ </doc>
+ </rule>
+
+ <rule name = "effective">
+ <doc>
+ Once set, this timeout value is effective until this method is reinvoked with a different value.
+ </doc>
+ </rule>
+
+ <rule name = "reset">
+ <doc>
+ A value of zero resets the timeout value to the default value.
+ </doc>
+ </rule>
+
+ <chassis name = "server" implement = "MAY" />
+ <response name = "set-timeout-ok" />
+
+ <field name = "xid" domain = "Xid" label = "Xid of the branch to set the timeout value">
+ <doc>
+ Specifies the Xid of the transaction branch for setting the timeout.
+ </doc>
+ <assert check = "notnull" />
+ <!-- rules -->
+ <rule name = "unknownXid">
+ <doc>
+ If Xid is unknown (the transaction branch has not been started or has already been ended) then the server MUST raise a channel exception with reply code 404 (not found).
+ </doc>
+ </rule>
+ </field>
+
+ <field name = "timeout" domain = "long" label = "The transaction timeout value in seconds">
+ <doc>
+ The transaction timeout value in seconds.
+ </doc>
+ <assert check = "notnull" />
+ </field>
+ </method>
+
+ <!-- - - - SETTIMEOUT-OK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <method name = "set-timeout-ok" synchronous = "1" index = "71" label = "confirm timeout set">
+ <doc>
+ This method confirms that the timeout has been set.
+ </doc>
+ <chassis name = "client" implement = "MAY" />
+ </method>
+</class>
+</amqp>
\ No newline at end of file