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