[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: RE: [wsbpel] Issue 6.2 - Proposal For Vote
Alex,
The current answers to your questions re Example #1 is NO for both
The flow is completed successfully so A just proceeds, it is not terminated. This is not a problem, I believe this is what you intend for early completion.
The premature termination of a sequence does not involve any backward work, hence no compensation for B1SS1. And if the branch were a scope this issue would not arise. But of course, scope can be used consciously by the process designer if one does not like this behavior. The question is, do we believe the process designer should be *forced* to express their intentions for premature termination handling explicitly by enforcing a scope boundary for each branch so that the termination behavior for each branch must be defined either by defining a termination handler or by consciously choosing to omit it thereby invoking default behavior (which would then cause compensation for B1SS1). In other words the issue is not so much “is the behavior well-defined” — the issue is “should we protect the naļve process designer from unintended pitfalls by enforcing a scope boundary for branches that may be prematurely terminated by early completion”.
I am so far carefully avoiding expressing any opinions on this whole issue (issue 6) and I will continue in that vein for the moment ;-)
Satish
From: Alex Yiu [mailto:alex.yiu@oracle.com]
Motivation =========== The current semantics of the flow activity is that it completes when all its (directly) nested activities have completed, either successfully or unsuccessfully. However, there are scenarios where it is necessary to have ability to complete the flow activity before all its nested activities complete in order to speed up the process execution. For example, a process waits in parallel for 3 reviews of a paper. If 2 positive reviews are received the process may continue with the execution without waiting for the last, third response. The completion condition of may have the following flavors: * Wait for N out of M nested activities to complete * Wait until after boolean condition C evaluates to true The completion condition is interesting for a flow activity enclosing identical nested activities and for the parallel for-each activity (still under discussion). Proposal ========= Syntax: <flow standard-attributes> standard-elements <links>? <link name="ncname">+ </links> <completionCondition>? activity+ </flow> <completionCondition> <branches expressionLanguage="URI"? countCompletedBranchesOnly="yes|no"?> an-integer-expression </branches>? <booleanExpression expressionLanguage="URI"?> a-boolean-expression </booleanExpression>? </completionCondition> Semantics: (1) The completionCondition element is an optional element of the flow activity. Default behavior of the flow activity is that it waits for all its nested activities to complete. (2) There are two kinds of completion condition: A> <booleanExpression>: A boolean condition operating upon process variables. It is evaluated at the end of execution of each nested activity. B> <branches>: 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 nested activity. This condition has "at least N out of M" semantics. (The exact N out of M condition semantics involve resolving racing condition among nested activities.) (3) Both conditions (<branches> and <booleanExpression>) may be specified at the same time. They will be evaluated at the end of execution of each nested activity. If at least one condition evaluates to true the <flow> activity completes successfully terminating all remaining running nested activities. If both conditions are specified, the <branches> will be evaluated first. If the boolean condition is specified the evaluation of the condition is done in a serialized fashion with respect to the nested activities directly enclosed in the flow activity. (4) If the integer value evaluated from the <branches> expression is larger than the number of nested activities in the <flow>, 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. (E.g. when the branches expression is a constant.) (5) <branches> expression 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. (6) If flow activity specifies a completionCondition element the completion condition is evaluated each time a nested activity completes. If the completion condition evaluates to true the flow activity completes successfully. All still running nested activities will be terminated. (7) Standard BPEL termination semantics applies to running nested 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). (8) If all nested activities of the flow activity have been completed but the completion condition evaluates to false the "bpws:completionConditionFailure" MUST be thrown by the flow activity. (end) ---------------- Ivana --------------------------------------------------------------------- To unsubscribe from this mail list, you must leave the OASIS TC that generates this mail. You may a link to this group and all your TCs in OASIS at: https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php
|
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]