OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.


Help: OASIS Mailing Lists Help | MarkMail Help

wsbpel message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]

Subject: Re: [wsbpel] Issue 147 - Proposal For Vote

 > -1 to the notion of spelling out the "returned set" and removing
 > elements from it.  Why specify to such detail how the iterator works?

Can you please explain how it is possible to portably define for-each 
without specifying this behavior?

 > -1 to the above paragraph.

Um... o.k. Would you like to explain why? And how you would replace it 
and still have for-each work efficiently?

 > All this talk of references/aliases is going to expand the scope of the
 > spec.  I'm sure you have a proposal in the wings, but why not alias
 > variables?

I think that introducing a generic mechanism to alias variables would 
expand the scope of the spec and not necessarily in a way useful enough 
to be justified for a 1.0 spec (no matter what we named the silly 
thing). On the other hand what is proposed in for-each is a very limited 
mechanism that exactly replicates the behavior of two processes 
manipulating the same variable.


Danny van der Rijn wrote:
> Yaron Y. Goland wrote:
>  > 147 - Serial and Parallel For-Each
>  >
>  > Proposal: Introduce a foreach to BPEL with both serial and parallel
>  > semantics.
>  >
>  > Rationale: Just check the issue list for issue 147. There is a whole
>  > series of mails attesting to how important this activity is.
>  >
>  > Introduce a section 12.6
>  >
>  > Note: This proposal assumes that issue 126 is adopted.
>  >
>  > 12.6 - Foreach
>  >
>  > <foreach iteratorVariableName="ncname" iteratorVariableType="qname"\
>  >            parallel="xs:Boolean" validate="yes|no"? standard-attributes>
>  >      standard-elements
>  >      <expression expressionLanguage="anyURI">...</query>
>  >      activity
>  > </foreach>
>  >
>  > A foreach activity is used to iterate over a variable, either serially
>  > or in parallel. The foreach activity specifies an expression that is
>  > to return a set of element information items (EIIs). The foreach also
>  > specifies a variable name in the iteratorVariableName attribute and a
>  > variable type in the iteratorVariableType attribute. All the EIIs
>  > returned by the expression MUST be of the type specified by the
>  > variable type. By default however a BPEL engine is not required to
>  > validate variable types, if the programmer wishes to guarantee that
>  > the output of the expression will be validated to be of the
>  > appropriate type then the validate attribute should be set to 'yes'.
>  > If the validate attribute is set to 'yes' and the output of the
>  > expression are not all EIIs of the type specified by
>  > iteratorVariableType then a mismatchedAssignment failure MUST be
>  > thrown. Note that variable validation, if activated, is performed
>  > before any of the 'notional' virtual scopes described below are created.
>  >
>  > If parallel="no" then the foreach is a serial foreach. In that case,
>  > conceptually, a new 'notional' virtual scope is created that does not
>  > contain a fault handler nor a compensation handler. In fact, this
>  > 'notional' virtual scope cannot be said to exist for purposes of
>  > determining which scopes are children of other scopes. Please refer to
>  > section 13.5.1 for a full description of the compensation handle of
>  > this 'notional' virtual scope. This 'notional' virtual scope contains
>  > a single variable declaration with the name given in
>  > iteratorVariableName and the type given in iteratorVariableType. The
>  > virtual scope conceptually contains a virtual sequence. The first
>  > entry in the sequence is an assign that assigns an EII from the
>  > returned set, in document order where possible, in random order where
>  > not, to the scope's only variable. Once an EII from the return set is
>  > assigned to the local variable that EII is removed from the return
>  > set. The next activity in the sequence is then the activity specified
>  > in the body of the foreach activity. If the virtual scope exits
>  > without error and if there are remaining EIIs in the returned set then
>  > the process repeats until the returned set is empty.
> -1 to the notion of spelling out the "returned set" and removing
> elements from it.  Why specify to such detail how the iterator works?
>  >
>  > The EIIs in the returned set are aliases to real EII instances held in
>  > BPEL variables. It is possible for one of the EIIs being pointed to,
>  > to be deleted while the for-each is executing. Such a deletion would
>  > occur if the EII being pointed to was removed from the BPEL variable
>  > that contained it. In that case the EII disappears from the returned
>  > set and is not iterated over.
> -1 to the above paragraph.
>  >
>  > The foreach virtual scope local variable in the foreach iteration
>  > instance is also an alias to an actual EII in a BPEL variable. While
>  > the iteration instance is executing the EII could have its value
>  > changed. If that happens then the situation is similar to what happens
>  > if a BPEL variable is shared by two simultaneously executing sections
>  > of a BPEL, the change made in one section is instantly visible to the
>  > other. If, however, the EII instance is deleted then the virtual scope
>  > local variable will become null. It is legal to assign to the virtual
>  > scope local variable after it becomes null but the value will be lost
>  > when that iteration ends, just as with any other scope local variable.
>  > To prevent other parts of a BPEL from altering the return set or the
>  > scope local variable the foreach can be placed in a serialized scope.
> All this talk of references/aliases is going to expand the scope of the
> spec.  I'm sure you have a proposal in the wings, but why not alias
> variables?
>  >
>  > If the parallel attribute is set to 'yes' then a parallel foreach is
>  > created. In a parallel foreach a virtual flow is created that contains
>  > a series of virtual scopes, one for each EII in the returned value
>  > set, defined as given previously. As with a serial foreach the local
>  > variables in the parallel scopes are aliases to actual BPEL values
>  > with the same behavior as given above. While the possibility of
>  > interference can be reduced by placing a parallel foreach into a
>  > serialized scope this cannot prevent parallel virtual scopes generated
>  > by the foreach from interfering with each other since they all exist
>  > inside of the same serialized scope. A parallel foreach ends using the
>  > same logic that controls any flow's behavior. That is, either all the
>  > scopes in the flow successfully exit or one of the scopes throws an
>  > unhandled fault and the flow is terminated.
>  >
>  > Addition to Appendix A:
>  >
>  > mismatchedAssignment  Thrown from a for-each if the returned iterator
>  > set is validated and contains entries of a type other than that
>  > specified in iteratorVariableType.
>  >
>  >
>  > ---------------------------------------------------------------------
>  > To unsubscribe, e-mail: wsbpel-unsubscribe@lists.oasis-open.org
>  > For additional commands, e-mail: wsbpel-help@lists.oasis-open.org
>  >
>  >

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]