Choreography Definition Language Example
<package name="ConsumerRetailerChoreo" version="1.0"
<informationType name="purchaseOrderType" type="pons:PurchaseOrderMsg"/>
<informationType name="purchaseOrderAckType" type="pons:PurchaseOrderAckMsg"/>
<token name="purchaseOrderID" informationType="tns:intType"/>
<token name="retailerRef" informationType="tns:uriType"/>
<tokenLocator tokenName="tns:purchaseOrderID"
informationType="tns:purchaseOrderType" query="/PO/orderId"/>
<tokenLocator tokenName="tns:purchaseOrderID"
informationType="tns:purchaseOrderAckType" query="/PO/orderId"/>
<role name="Consumer">
<behavior name="consumerForRetailer" interface="cns:ConsumerRetailerPT"/>
<behavior name="consumerForWarehouse" interface="cns:ConsumerWarehousePT"/>
</role>
<role name="Retailer">
<behavior name="retailerForConsumer" interface="rns:RetailerConsumerPT"/>
</role>
<relationship name="ConsumerRetailerRelationship">
<role type="tns:Consumer" behavior="consumerForRetailer"/>
<role type="tns:Retailer" behavior="retailerForConsumer"/>
</relationship>
<channelType name="ConsumerChannel">
<role type="tns:Consumer"/>
<reference>
<token type="tns:consumerRef"/>
</reference>
<identity>
<token type="tns:purchaseOrderID"/>
</identity>
</channelType>
<channelType name="RetailerChannel">
<passing channel="ConsumerChannel" action="request" />
<role type="tns:Retailer" behavior="retailerForConsumer"/>
<reference>
<token type="tns:retailerRef"/>
</reference>
<identity>
<token type="tns:purchaseOrderID"/>
</identity>
</channelType>
<choreography name="ConsumerRetailerChoreo" root="true">
<relationship type="tns:ConsumerRetailerRelationship"/>
<variableDefinitions>
<variable name="purchaseOrder" informationType="tns:purchaseOrderType"
silent-action="true" />
<variable name="purchaseOrderAck" informationType="tns:purchaseOrderAckType" />
<variable name="retailer-channel" channelType="tns:RetailerChannel"/>
<variable name="consumer-channel" channelType="tns:ConsumerChannel"/>
<interaction channelVariable="tns:retailer-channel "
operation="handlePurchaseOrder" align="true"
initiateChoreography="true">
<participate relationship="tns:ConsumerRetailerRelationship"
fromRole="tns:Consumer" toRole="tns:Retailer"/>
<exchange messageContentType="tns:purchaseOrderType" action="request">
<use variable="cdl:getVariable(tns:purchaseOrder, tns:Consumer)"/>
<populate variable="cdl:getVariable(tns:purchaseOrder, tns:Retailer)"/>
</exchange>
<exchange messageContentType="purchaseOrderAckType" action="respond">
<use variable="cdl:getVariable(tns:purchaseOrderAck, tns:Retailer)"/>
<populate variable="cdl:getVariable(tns:purchaseOrderAck, tns:Consumer)"/>
</exchange>
<record role="tns:Retailer" action="request">
<source variable="cdl:getVariable(tns:purchaseOrder, PO/CustomerRef,
tns:Retailer)"/>
<target variable="cdl:getVariable(tns:consumer-channel, tns:Retailer)"/>
</record>
</interaction>
</choreography>
</package>