- From: Furniss, Peter <Peter.Furniss@choreology.com>
- Date: Thu, 22 May 2003 13:56:56 +0100
- To: "Mark Little" <mark.little@arjuna.com>, "Bob Haugen" <rhaugen@speakeasy.net>, <public-ws-chor@w3.org>, "Ricky Ho" <riho@cisco.com>
Mark Little's message distinguished a "two-phase coordination protocol"
case from a "lightweight correlation" case. I don't believe these are
genuinely different - in implementation, they are just alternative
partitionings of the same work and, in message exchange/protocol terms,
OASIS BTP was specifically designed to do both. (WS-T isn't currently
quite as flexible)
Taking the "correlation" pattern:
> application service
> start business relationship
> place order--------------correlation id--------->
> <-----------------------------------------------order placed
> (can be undone later, with some guarantees)
> do some other work
> confirm order-----------correlation id---------->
> <-----------------------------------------------order confirmed
> order will be fulfilled
That's exactly the pattern of the BTP "one-shot", where the prepared
signal is piggy-backed on the order placed message. Using a coordination
protocol avoids having to re-invent in the application protocol the
collision, recovery and error cases and allows the implementations on
each side to take advantage of features of the coordination
implementations. Of course, you *can* do it for yourself, (if you're on
this list), you'll probably get it right. But you will find you are
re-specifying and reimplementing something that already exists.
Actually, I'm especially intrigued that Mark doesn't count that as being
"two-phase". There's obviously a double exchange, and it's clear the
service passes through a "doubt phase", where it's waiting on the
leftside to confirm (or presumably, cancel) the order. To me, that's
two-phase - there's a request for work to be performed contingent on a
later yes/no, then the yes/no. Whether there's an explicit prepare
signal, or whether the coordinator could be separated (or, as here, is
integrated on the left-side) are particulars that don't affect the
principal.
Peter
------------------------------------------
Peter Furniss
Chief Scientist, Choreology Ltd
Cohesions 1.0 (TM)
Business transaction management software for application coordination
web: http://www.choreology.com
email: peter.furniss@choreology.com
phone: +44 20 7670 1679
direct: +44 20 7670 1783
mobile: +44 7951 536168
13 Austin Friars, London EC2N 2JX
> -----Original Message-----
> From: Mark Little [mailto:mark.little@arjuna.com]
> Sent: 20 May 2003 10:29
> To: Bob Haugen; public-ws-chor@w3.org; Ricky Ho
> Subject: Re: Global view requires transactions (RE: Use Cases )
>
>
>
> > > I think the "shared state" in this context means "shared
> visibility"
> > rather
> > > than "transactional update". In other words, it is OK to have one
> > role
> > > just update its state unilaterally and communicate that result to
> > relevant
> > > partners. Of course for certain business-specific process, the
> > > state change may need co-ordination among partners (e.g. how do I
> > > know my PO
> > has
> > > been accepted).
> >
> > Those are exactly the kinds of state changes I have in
> mind. A PO is
> > an offer to buy. Acceptance forms a contract. State changes to a
> > contract need to be agreed upon by all parties to the
> contract. Call
> > it what you will: transaction, coordination, synchronization,
> > agreement... it's too common and critical to code adhoc every time.
> >
> > Shared visibility would be true for a REST model
> > where all partners could GET a representation
> > of the current state of all shared resources.
> >
> > Otherwise, all you got is messages over the wire
> > and maybe an agreed state chart.
> >
> > The business transaction models I cited arose
> > from those situations: contracts between partners,
> > agreed or standardized state chart, state changes effected
> > by message exchange in a set pattern.
> >
> > They're related to but not the same as private
> > local transactions.
> >
> > I'm not advocating a particular solution in this message.
> Just raising
> > the issue.
>
> Actually, what you need first and foremost is context to
> correlate messages. What the messages say ("can you fulfill
> the order") implicitly requires some form of correlation (in
> this example, with the aforementioned "order"). Coordination,
> whether it is done by some stand-alone coordinator technology
> (e.g., WS-C or BTP) or as a more natural part of the business
> interactions, utilises that correlation information.
>
> What I mean by the latter style of interaction is that, with
> a correlation id I don't need to have a "coordinator" and
> related "participants" (things that are coordinated) that are
> outside of the application; I can keep my application and
> services and structure the interactions to talk in terms of
> this correlation id.
>
> For example, in a "transactional" interaction with a separate
> coordinator (whether as a separate service or co-located with
> the user doesn't matter for this discussion), I'd typically
> get (assuming a two-phase protocol):
>
> application coordinator service
> participant
> start tx------------------->
> <-------------------------get context
> place order----------------with context--------->
>
> enlist------------->
>
> <----------------------------------------enlist
> some other work
> commit tx----------------->
>
> prepare-------------------------------->
>
> <------------------------------------OK
>
> commit-------------------------------->
>
> <------------------------------------OK
> <--------------------------committed
> order will be fulfilled
>
> whereas if I have a correlation id I may use a more
> lightweight approach in some situations:
>
> application service
> start business relationship
> place order--------------correlation id--------->
> <-----------------------------------------------order placed
> (can be undone later, with some guarantees) do some other
> work confirm order-----------correlation id---------->
> <-----------------------------------------------order
> confirmed order will be fulfilled
>
> In this particular case, how "service" agrees to tentatively
> place the order and under what constraints is a business
> level decision and may well be exposed to the application
> through some bind-time metrics.
>
> Now this is not to say that coordination as presented
> previously isn't required. It is (and with transactions).
> What I'm trying to illustrate is that all
> business-to-business interactions don't necessitate a
> coordinator (or transactions). The context is the fundamental
> issue (correlation above is just a context).
>
> Now, if you think coordination is being done in an ad hoc
> manner, consider context! As an example, both WS-C and BTP
> have their own notion of context. At least WS-C doesn't tie
> it to two-phase as BTP does, so there is a little more leeway
> in what type of coordination protocol you can implement using WS-C.
>
> Mark.
>
>
Received on Thursday, 22 May 2003 08:57:07 UTC