RE: [wsbpel] Issue 6.2 - Updated Proposal For Vote

From
Chris Keller <>
Date
2005-09-14T16:13:18+00:00
ID
Thread
RE: [wsbpel] Issue 6.2 - Updated Proposal For Vote
Hi Ivana,

 

Some questions/comments:

 

1. Is the branches expression evaluated
each time a directly enclosed activity completes or is the test evaluated each
time?  It is unclear in your description below.  It would seem better
if the expression was evaluated once prior to the flow executing.

 

2. What happens if the flow or parallel
forEach completes, but the completion condition is not met?

 

3. If this is adopted we would also have
to change section 13.4.4 Semantics
of Activity Termination from:

 "However, a termination handler
cannot throw any fault. Even if an uncaught fault occurs during its behavior,
it is not rethrown to the next enclosing scope. This is because the enclosing
scope has already either faulted or is in the process of being terminated,
which is what is causing the forced termination of the nested scope."

to just:

 "However, a termination handler
cannot throw any fault. Even if an uncaught fault occurs during its behavior,
it is not rethrown to the next enclosing scope."

 

4. Is branches the most suitable name for the
element name?

 

Regards,

Chris Keller

 

 

Regards,

Chris

 

 

 

From: Trickovic, Ivana [mailto:] 

Sent: Wednesday, September 14,
2005 3:15 AM

To: 

Cc: 

Subject: [wsbpel] Issue 6.2 -
Updated Proposal For Vote

 

Below please find an updated
proposal for issue 6.2.

 

Kind regards,

 

Ivana

 

 

 

Issue 6.2: Updated proposal:

Last modified: Sept 13, 2005 - 23:30 PDT 

Motivation 

===========

The current semantics of the flow activity is that it completes when all

its (directly) enclosed activities have completed, either successfully

or unsuccessfully. However, there are scenarios where it is necessary to

have ability to (successfully) complete the flow activity before all its

directly enclosed activities complete in order to speed up the process

execution. 

The completion condition may have different flavors:

(1) Wait for N out of M nested activities to complete

(2) Wait until after boolean condition C evaluates to true

This updated proposal is restricted to case (1). 

The completion condition is interesting for the flow activity and for

the parallel forEach activity.

Proposal 

=========

Syntax:

<flow standard-attributes>

standard-elements

      <links>?

         <link
name="ncname">+

      </links>

      <completionCondition>?

      activity+

</flow>

<forEach counterName="ncname" ...>

     standard-elements

     <iterator>

        <startCounterValue
expressionLanguage="anyURI">

           ...

        </startCounterValue>?

        <finalCounterValue expressionLanguage="anyURI">

           ...

        </finalCounterValue>?

     </iterator>

     <completionCondition>?

     Scope

</foreach>

<completionCondition extension-attribute>

      extension-element

      <branches expressionLanguage="URI"?

countCompletedBranchesOnly="yes|no"?>

          an-integer-expression

      </branches>

</completionCondition>

Semantics:

(1) The completionCondition element is an optional element of the flow

activity and the parallel forEach activity. Default behavior of the flow

activity and the parallel forEach activity is they wait for all their

directly enclosed activities to complete. Optional <completionCondition>

is applicable to parallel forEach only, and not serial forEach. This

restriction MUST be enforced by static analysis. 

(2) <branches> is an integer value expression which is used to define

condition of flavor N out of M. It is evaluated at the end of execution

of each directly enclosed activity. This condition has "at least N out

of M" semantics. (The exact N out of M condition semantics involve

resolving racing condition among directly enclosed activities.)

(3) If the integer value is larger than the number of directly enclosed

activities, then bpws:invalidBranchCondition fault MUST be thrown. Note

that the number of branches may be known only during runtime in some

cases. Static analysis should be encouraged to detect this erroneous

situation at design time when possible. (For example, when the branches

expression is a constant.)

(4) Element <branches> has an optional attribute

"countCompletedBranchesOnly". Its default value is "no". If

countCompletedBranchesOnly is "no", it means the BPEL processor will

count branches which have completed (either successfully or

unsuccessfully). If countCompletedBranchesOnly is "yes", it means the

BPEL processor will count branches which have completed successfully

only.

(5) If flow/parallel forEach activity specifies a completionCondition

element the completion condition is evaluated each time a directly

enclosed activity completes. If the completion condition evaluates to

true the flow/parallel forEach activity completes successfully. All

still running directly enclosed activities will be terminated. This

means that the flow/parallel forEach activity begins implicitly

terminating the directly enclosed activities that are still active.

(6) Standard BPEL termination semantics applies to running directly

enclosed activities when the completion condition is met. The

termination of running nested activities follows the termination

semantics defined in the specification (see section 13.4.4 Semantics of

Activity Termination). 

(end)

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