Hi Assaf,
>> --cut: http://ode.apache.org/bpel-simplified-syntax-simbpel.html---
>> The signal and join instructions are here to model links,
>> --end--
>>> Signal says when something is done, join says when we should hold
>>> until something is done.
>> This is a semantics different from BPEL!
>>> So if I just change labels in your example:
>>>
>>> parallel {
>>> put-pizza-in-oven;
>>> pizza-cooked;
>>> signal(diner-ready); } and { join(diner-ready, "beer.temperature <
>>> 10c");
>>> get-beer-in-fridge;
>>> drink-beer;
>>> }
>
> That depends no what the semantics of the beer (or was it speech?)
> condition is. In terms of blocking, DPEs, etc, there's added
> complexity in handling anything but boolean join expressions. Joining
> only when the beer gets cold is a tricky proposition.
>
> But joining when dinner is ready, and then reading the variable and
> deciding what to do next, that's easy. BPEL can do that, but in BPEL
> you'll have, in addition to the join condition, also an if/else
> statement.
What is put in the else statement?
With your reading, the BPEL code of the second sequence of statements in the
above example is
<sequence>
<if>
<targets>diner-ready</targets>
<condition> beer.temperature < 10c </condition>
get-beer-in-fridge;
</if>
drink-beer;
</sequence>
And if that is translated to simPEL (and no pattern-recognition-magic is
done), it looks like follows:
join(diner-ready);
if (beer.temperature < 10c) {
get-beer-in-fridge;
}
drink-beer;
Or did I get something wrong?
One implication is that the signal statement is bound to the activity before
and join to the activity after.
E.g.:
parallel {
a;
signal(l1);
b;
join(l1);
c;
}
translates to:
<flow>
<sequence>
<a>
<sources>l1</sources>
</a>
<b>
<c>
<targets>l1</targets>
</c>
</sequence>
</flow>
> The point of Simpel is to make it easier to write processes. If we
> insist on one-to-one mapping to BPEL syntax, we're limiting how well it
> can do that, we should be open to syntactic sugars and other
> simplifications.
Syntactic sugar is fine with me. As long as it can be translated to BPEL :).
And that BPEL can be fully translated to simPEL.
I'm currently thinking of simPEL profiles. Such as "strict" and "lax":
"strict" insits on a (close) 1:1 mapping to BPEL. "lax" allows all
simplifications... (which may generate a bunch of activities / eventhandlers
/ ... in a mapping to BPEL)
> So whenever I look at an example like this, my first question is:
> would anyone want to do that often enough that it should be considered
> into the syntax? If not, we have better things to worry about.
>
> If yes, are we taking existing BPEL semantics and applying them in
> more interesting ways, or inventing new semantics? Inventing new
> semantics has the downside that it takes considerable time, and could
> easily confuse people moving between the two languages. Doing
> syntactic sugar on top of existing semantics, not that hard.
Fully agree.
> So I'm wondering what part of this is different semantics and what
> part is just syntactic sugar.
Me too. - I think, it depends on whether the usage of arbitrary variables in
join conditions have blocking semantics (as in WS-CDL a blocking workunit)
or not (as the translation to <if> suggests).
Cheers,
Olly