composition, guards and choices

( I've been working with Tony Fletcher on the cdl : transactionality
stuff and getting back up to speed on cdl - apologies if the following
indicates radical misunderstanding or is already on the issues list -
I've looked, but not found answers. It isn't directly related to
transactions, rather to how things work generally)
 
The last example in (27 April) 2.5.1.3 on choice shows a choice of
unguarded activities where the selection criteria are non-observable,
but are obviously whether or not credit is approved: They show
interactions on different channels, but presumably it would be
reasonable for these to be the same but the operations different:
 
<choice>
   <interaction channelVariable="pointOfSaleCustomerRecords-channel"
operations="creditGood"
     ..
       </interaction>
   <interaction channelVariable="pointOfSaleCustomerRecords-channel"
operations="creditBad" 
   ..
       </interaction>
</choice>
 
So, within this choreography (which, let us assume is just two-party,
point-of-sale to custormer-records (expand to b2b equivalent as you
please)), the criteria used by customer records to establish the credit
are invisible. They decide somehow.
 
But now suppose we want to use this choreography as a component of a
wider one, where the interactions of customer-records with a credit
checking agency are also a component choreography.  In the combined
choreography, the criteria for the choice of interactions above will be
explicitly dependent on which message received from the credit agency.
 
It looks to me as though I would do that by creating a variable in the
encompassing choreography (accessed only at the customerrecords role)
which is set by the inner choreography to the credit agency and used in
the choice above. But now I have to re-write the choice to have guards
(there are some curiousities about blocking here; and where is appendix
B ?)
 
<choice>
    <workunit name="reportgood" 
         guard="cdl:getVariable("CreditReport","/result"), "good"
         block="true">
               <interaction
channelVariable="pointOfSaleCustomerRecords-channel"
operations="creditGood"
                 ..
               </interaction>
    </workunit>
    <workunit name="reportgood" 
         guard="cdl:getVariable("CreditReport","/result"), "bad"
         block="false">
               <interaction
channelVariable="pointOfSaleCustomerRecords-channel"
operations="creditBad"
                 ..
               </interaction>
    </workunit>
 </choice>
 
(actually, we might not need the guard on the bad interaction at all,
since it can't be accessed until the block on the first completes)
 
But wouldn't the original, single relationship choreography have been
clearer if it had had a good/bad credit variable , although that would
be set by non-observable means. It would be a sort of parameter of the
choreography,
 
There's several directions to go from here, but this is enough for a
first message that might be seriously offline.
 
 
Peter
 
------------------------------------------
Peter Furniss
Chief Scientist, Choreology Ltd
web: http://www.choreology.com <http://www.choreology.com/> 
email: peter.furniss@choreology.com
phone: +44 870 739 0066
mobile: +44 7951 536168

 

Received on Friday, 2 July 2004 07:11:20 UTC