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


Reply via email to