RE: [wsbpel] Issue 6 - Rough draft of proposal for vote

From
Bxel [artens
Date
2004-09-01T17:25:21+00:00
ID
Thread
RE: [wsbpel] Issue 6 - Rough draft of proposal for vote
Dear all:

I'd like to participate in your discussion
with a proposal that

comes with minimal changes to the current
BPEL specification but

is able to handle the mentioned use
cases, and even more.

First, I'd like to introduce myself.
I am a post-doc researcher at

IBM Watson, working in the group of
Paco Curbera. In my PhD thesis

I have dealt with Web service based
business processes and Petri

nets. Hence, I know the discussion on
the mismatch between BPEL

and the workflow pattern à la van der
Aalst quite well.

I completely agree on searching for
a general solution to the

request of issue 6 rather than fixing
distinguished cases. The

problem (or restriction) of BPEL is
that you can't enable or

disable an activity easily w.r.t. to
the complex context, like you

can do modeling with Petri nets or related
methods. The deferred

evaluation of the join condition (all
incoming links has to be

signaled first) is one of the mayor
reasons for it. Hence, our

group proposes to allow an immediate
evaluation of the join

condition, too. This feature was already
covered by IBM's Flow

Definition Language (FDL) and Web Service
Flow Language (WSFL).

The next paragraph explains the proposed
change to syntax and

semantics. Afterwards I show three examples
to demonstrate the

expressive power of this changes.

Syntax & semantics:

The changes to syntax are minimal. Each
activity gets a new

standard attribute "joinEvaluation"
- of course, this attribute

has only influence on activities that
are target of at least two

links. The attribute can have the values
"deferred" (the default

value) and "immediate".

As a kind of syntactical sugar, each
flow or the whole process

might redefine the default value for
all its child activities

through the additional attribute "defaultJoinEvaluation".
But, we

do not insist on this change.

In case, the attribute was set to "deferred",
the join behavior

stays untouched. If the attribute was
set to "immediate", the join

condition is evaluated each time one
of the incoming links has

changed its value. Some examples:

  "true" and "yet
undefined" yields "yet undefined"

  "false" and "yet
undefined" yields "false"

  "true" or "yet
undefined" yields "true"

  "false" or "yet
undefined" yields "yet undefined"

This evaluation may yield "yet
undefined", than nothing happens.

If the join condition could be evaluated
to "true" or "false", the

activity is executed or skipped, and
further changes to the link

values are ignored.

Because links are not allowed to cross
the borders of a while loop

and each time a while loop is entered,
its internal link value

should be cleared, there can't be any
confusion.

Examples:

This changes together with the already
existing concepts of scope

and fault handling allow an strait forward
mapping of the missing

pattern.

One-out-of-Many

First, we take a look on a selection
of one result out of three,

where the not chosen alternatives are
allowed to finish normally.

The following figure shows the example
of contacting three

airlines and booking the first available
(for reasons of clarity,

the bpel-code is not fully specified).

Because of the immediate evaluation
of the join condition, the

activity "InvokeBooking" is
started directly after the termination

of one preceding activity. Whereas the
flow is exited only if all

its child activities are terminated.
In case, the customer should

be informed as soon as possible, the
reply activity should be

moved into the flow in sequence to "InvokeBooking".

N-out-of-M

The second example shows two new aspects.
First, the join requires

at least two of the three referees to
have finished the review.

This is done by a modified join condition.
Second, after two

results are available, still running
activities of the flow are

explicitly terminated. This is modeled
by help of a scope around

the flow with an empty fault handler
that catches the

"forcedTemination" fault.

These mechanisms already exit. Hence,
no further changes to the

language itself are necessary. Of course,
a user should be

supported, e.g. by generating such structures
automatically on

demand, but this is a task of tooling
rather than language design.

More complex relations

Finally, the join condition can specify
precisely which

combination of link values is needed
to proceed, instead of just

the number. The last figure shows an
example employing this

feature: For booking a trip, it is necessary
to find an available

hotel and at least on kind of transportation.

This example mixes all concepts. In
case, no hotel or no

transportation is available, an information
for the customer is

generated ("assign") and the
flow is terminated ("throw").

Otherwise, the trip is booked ("InvokeBooking")
and still running

activities are allowed to terminate
on their own before the

customer is informed.

Summary

A minimal change to BPEL's syntax and
an easy to implement change

to its operational semantics enrich
the expressive power

enormously, such that more useful modeling
pattern could be mapped

into this language. To increase the
convenience of usage, tools

may provide predefined macros or generate
necessary structures

automatically on demand.

Regards, Axel.

----------------------------------------

Axel Martens

Post Doc Researcher

Component Systems Group

IBM TJ Watson Research Center 

Hawthorne, NY (USA)

Phone: (914) 784-7480

E-mail: 

"Trickovic, Ivana"
<> 

09/01/2004 10:32 AM

To

"''"
<>

cc

"''"
<>, "''" <>,
"''" <>

Subject

RE: [wsbpel] Issue 6 - Rough
draft of proposal for vote

Alex,

Regarding the proposed semantics:
Would you elaborate how the fault (bpws:earlyCompletionFault) will be signaled
to other incomplete flow activities? Those activities are enclosed within
the flow activity. If I understand the fault handling model correctly there
is no possibility to communicate faults to nested activities/scopes except
canceling the enclosing activity (in this case, the flow activity). 

Regards,

Ivana

-----Original Message-----

From: Alex Yiu [mailto:]

Sent: Mittwoch, 1. September 2004 04:28

To: Satish Thatte

Cc: ; ; Alex Yiu

Subject: Re: [wsbpel] Issue 6 - Rough draft of proposal for vote

Hi, Yaron and others, 

I agree with the concern of Edwin and Satish. We should define a general
mechansim to express early completion condition. Then, define the "orJoin"
attribute or other syntax as a macro/special syntax short cut.

If you guys don't mind, I can supplement some alternative ideas to this
issue. I am in the thinking-out-loud mode again. That means, I need to
verify whether this idea makes sense to other people at Oracle.  [
But, as Ron said, this thinking-out-loud mode has worked quite well for
me in the past. ;-) ]

We should allow a <completeCondition> subelement attached to parallel-flow-starter
activity (e.g. <flow> or future potential parallel <forEach>).

Syntax of completeCondition:

It has two forms:

(1) <completeCondition>a_boolean_expr</completeCondition> 

(2) <completeCondition minFlow="a_number" /> 

            ...  or ...

       <completeCondition countMinFlow="yes">a_number_expr</completeCondition>

The first form is the most generic form of completion condition. 

The second form provides a convienent shorthand to achieves the N out of
M semantics. 

The suggested orJoin="yes" is equivalent to: 

<flow>

    <completeCondition minFlow="1" /> 

     ... 

</flow>

Semantics of completeCondition:

The complete condition will be evaluated at the completion of each flow.
If the condition is true, a standard fault bpws:earlyCompletionFault will
be signaled to other incomplete flow activities. Each incomplete flow activity
can potentially be compensated if each flow is a scope activity. (Potentially,
we can add static analysis to enforce that when a completionCondition is
used in <flow>, <scope> must be used as activities within the
flow.) 

The completeCondition itself is executed in the same scope context of the
<flow> activity.  [ And, the completeCondition should be executed
serially, to avoid racing condition among flows (?)]

I hope this rough draft of ideas serves as a good base of discussion for
this issue.

Thanks!

Regards,

Alex Yiu

Satish Thatte wrote:

I echo Edwin's second question.
 Yaron, your proposal clearly doesn't address the intent of 6.  It
seems too narrow to just address this corner case of completion of one
among many (corner case from my perspective).

Satish

From: Edwin Khodabakchian [mailto:]

Sent: Friday, August 27, 2004 5:38 PM

To: 

Subject: RE: [wsbpel] Issue 6 - Rough draft of proposal for vote

Hi Yaron,

2 questions:

1) are we sure that termination is the desired
behavior for the non completed activity?

2) what happens if the join rule is: "the
first search result which is non empty or includes at least 3 entries with
more than 85% accuracy"? The point here is that a lot of join patterns
might have logic in them. I know that in the past we talked about having
something like <break> for flow. (This is something that a lot of
our customers are asking us and might address the same us case is a more
flexible way specially if the <break> can be configure to tell the
engine to compensate or terminate).

Best,

Edwin