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

From
"Srickovic, Jvana"
Date
2004-09-08T12:52:29+00:00
ID
Thread
RE: [wsbpel] Issue 6 - Rough draft of proposal for vote
Axel,

 

I 
find the idea interesting. In fact, I was discussing the completion 
condition issue with Dieter Koenig during the last f2f meeting and his 
suggestion was also to try to resolve this issue using links. And we identified 
that several changes need to be done, including removing restriction for 
jonCondition, that "the join condition is evaluated as soon as all incoming 
links of the activity are determined" - so definitely "immediate" semantics 
needs to be introduced. 

 

I 
have the following comments on your proposal.

1. 
In your proposal you are using a fault (bpws:forcedTermination) to terminate all 
active parallel branches. But this changes the outcome of the flow 
activity. It will always end abnormally and compensation handler 
(if it is defined) will never be installed. Although completion condition 
has evaluated to true and needed activities have completed the enclosing 
flow activity will end abnormally. Is this really intended semantics? 

  

2. 
Your proposal does not address some pain points. For example, in case of "N out 
of M", N<M there many possible "variations":

(A) 
One enclosed activity may experience problems but the <flow> activity may 
succeed

(B) 
One of enclosed activities may experience a severe error, which may have impact 
on the <flow> activity

The 
question is what to do with running activities? In 
the latter case, reasonable behavior would be: if one enclosed activity does not 
succeed other running activities should be cancelled and the flow activity 
should try to recover. In 
the former case, we should allow active parallel activities to complete their 
work. This is not supported in your proposal. 

 

Regards,

 

Ivana

  
-----Original Message-----
From: Axel Martens 
  [mailto:]
Sent: Mittwoch, 1. September 2004 
  19:25
To: Trickovic, Ivana
Cc: ''; 
  ''; ''; 
  ''
Subject: 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