You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2007/05/29 20:47:41 UTC

svn commit: r542620 - /incubator/qpid/trunk/qpid/specs/amqp-dtx-preview.xml

Author: gsim
Date: Tue May 29 11:47:40 2007
New Revision: 542620

URL: http://svn.apache.org/viewvc?view=rev&rev=542620
Log:
new dtx class definitions


Added:
    incubator/qpid/trunk/qpid/specs/amqp-dtx-preview.xml   (with props)

Added: incubator/qpid/trunk/qpid/specs/amqp-dtx-preview.xml
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/specs/amqp-dtx-preview.xml?view=auto&rev=542620
==============================================================================
--- incubator/qpid/trunk/qpid/specs/amqp-dtx-preview.xml (added)
+++ incubator/qpid/trunk/qpid/specs/amqp-dtx-preview.xml Tue May 29 11:47:40 2007
@@ -0,0 +1,878 @@
+<?xml version = "1.0"?>
+<!--
+ -
+ - Licensed to the Apache Software Foundation (ASF) under one
+ - or more contributor license agreements.  See the NOTICE file
+ - distributed with this work for additional information
+ - regarding copyright ownership.  The ASF licenses this file
+ - to you under the Apache License, Version 2.0 (the
+ - "License"); you may not use this file except in compliance
+ - with the License.  You may obtain a copy of the License at
+ - 
+ -   http://www.apache.org/licenses/LICENSE-2.0
+ - 
+ - Unless required by applicable law or agreed to in writing,
+ - software distributed under the License is distributed on an
+ - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ - KIND, either express or implied.  See the License for the
+ - specific language governing permissions and limitations
+ - under the License.
+ -
+ -->
+<amqp major = "0" minor = "9" port = "5672" comment = "AMQ Protocol version 0-9">
+
+  <!-- ==  DTX SUPPORT, 0-10 PREVIEW ========================================== -->
+
+  
+<!--
+   This xml describes the dtx classes: dtxDemarcation and dtxCoordination 
+   version: 1.6 by Arnaud Simon 
+-->
+
+  <!--
+      ======================================================
+      ==       CONSTANTS
+      ======================================================
+  -->
+
+ <!-- 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>
+
+  
+  <!--
+      ======================================================
+      ==       DOMAIN TYPES
+      ======================================================
+  -->
+
+  <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>
+ 
+  <!-- ==  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" />
+
+    <rule name = "access-control">
+      <doc>
+ 	Access-tickets are propagated with XA association methods with the aim of 
+	restricting which users are allowed to control which transactions. 
+	The server MAY restrict transaction association to a particular identity.       
+      </doc>
+    </rule>   	
+
+    <rule name = "transactionality">
+      <doc>
+ 	Enabling XA transaction support on a channel implies that the server MUST manage transactions demarcated by start-end blocks. That is to say that on this XA-enabled channel, work undergone within transactional blocks is performed on behalf a transaction branch whereas work performed outside of transactional blocks is NOT transactional.     
+      </doc>
+    </rule>   	
+
+ 
+    <!-- - - - 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" />
+      <!-- rules -->
+      <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 = "alreadyAssociated">
+        <doc>
+         If neither join nor resume is specified is specified and the transaction branch specified by xid has previously been seen then the server MUST raise a channel exception with reply code 530 (not allowed).
+	 </doc>
+      </rule>	
+        <rule name = "joinAndresume">
+         <doc>
+        If join and resume are specified then the server MUST raise a channel exception with reply code 503 (command invalid)
+         </doc>
+      </rule>   
+
+      <field name = "ticket" domain = "access-ticket" label = "Access-ticket granted by the server for a specific realm">
+        <doc>
+          Access-ticket granted by the server for a specific realm. 
+        </doc>
+        <assert check = "notnull" />	
+      </field>
+
+      <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" />
+	 <!-- rules -->
+	<rule name = "unknownXid">
+        <doc>
+         If Xid is already known by the broker then the server MUST raise a channel exception with reply code 530 (not allowed).
+	 </doc>
+        </rule>		
+      </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>	
+      <!-- rules -->     
+      <rule name = "unsupported">
+        <doc>        
+	  If the broker does not support join the server MUST raise a channel exception with reply code 540 (not implemented).
+	</doc>
+      </rule>
+        <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" />
+
+      <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 = "suspendAndfail">
+         <doc>
+        If suspend and fail are specified then the server MUST raise a channel exception with reply code 503 (command invalid)
+         </doc>
+      </rule>    
+	 
+      <rule name = "internalError ">
+         <doc>
+        If an error occurs in ending the transaction branch then the server MUST raise a channel exception with reply code 541 (internal error)
+         </doc>
+      </rule> 
+
+      <rule name = "success ">
+         <doc>
+        If neither fail nor suspend are specified then the portion of work has completed successfully
+         </doc>
+      </rule> 
+
+      <field name = "ticket" domain = "access-ticket" label = "Access-ticket granted by the server for a specific realm">
+        <doc>
+          Access-ticket granted by the server for a specific realm. 
+        </doc>
+        <assert check = "notnull" />	
+      </field>
+
+      <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" />	
+	 <!-- 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 = "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>	     
+      <rule name = "failure">
+        <doc>
+         If fail is specified then the transaction should be marked as rollback-only.     
+	 </doc>
+      </rule>
+        <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>	     
+      <rule name = "resume">
+        <doc>
+         The transaction context is in a suspended state and must be resumed via the start method with resume specified.   
+	 </doc>
+      </rule>
+        <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 = "ticket" domain = "access-ticket" label = "Access-ticket granted by the server for a specific realm">
+        <doc>
+          Access-ticket granted by the server for a specific realm. 
+        </doc>
+        <assert check = "notnull" />	
+      </field>
+
+      <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 = "ticket" domain = "access-ticket" label = "Access-ticket granted by the server for a specific realm">
+        <doc>
+          Access-ticket granted by the server for a specific realm. 
+        </doc>
+        <assert check = "notnull" />	
+      </field>
+
+      <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 = "ticket" domain = "access-ticket" label = "Access-ticket granted by the server for a specific realm">
+        <doc>
+          Access-ticket granted by the server for a specific realm. 
+        </doc>
+        <assert check = "notnull" />	
+      </field>
+
+      <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 = "ticket" domain = "access-ticket" label = "Access-ticket granted by the server for a specific realm">
+        <doc>
+          Access-ticket granted by the server for a specific realm. 
+        </doc>
+        <assert check = "notnull" />	
+      </field>
+
+      <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 of transaction Xids that are in a prepared or heuristically completed state.
+      </doc>
+
+      <chassis name = "client" implement = "MAY" />
+     
+      <field name = "xids" domain = "table" label = "Table of xids to be recovered">
+        <doc>
+          table containing transaction Xids that are in a prepared or heuristically completed state.
+        </doc>
+        <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 = "ticket" domain = "access-ticket" label = "Access-ticket granted by the server for a specific realm">
+        <doc>
+          Access-ticket granted by the server for a specific realm. 
+        </doc>
+        <assert check = "notnull" />	
+      </field>
+
+      <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 = "ticket" domain = "access-ticket" label = "Access-ticket granted by the server for a specific realm">
+        <doc>
+          Access-ticket granted by the server for a specific realm. 
+        </doc>
+        <assert check = "notnull" />	
+      </field>
+
+       <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 = "select-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>

Propchange: incubator/qpid/trunk/qpid/specs/amqp-dtx-preview.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/specs/amqp-dtx-preview.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: incubator/qpid/trunk/qpid/specs/amqp-dtx-preview.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml