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


Yaron,

In case of parallel for-each multiple instances of the enclosed activity
may be executed. The number of these instances is not specified at
design time (otherwise, the <flow> element would be sufficient). 

Let's assume we have the following simple example:

<foreach iteratorVariableName="sendPO" iteratorVariableType="..."
parallel="yes">
      <expression
expressionLanguage="...">for_each_element_in_the_list_of_POs</expression
>
      <scope>
            <variables>
               <variable name="getResponse" messageType="..."/>
            </variables>
      	<invoke partnerLink="Seller" 
	  	  portType="..."
		  operation="SyncPurchase"
		  inputVariable="sendPO"
		  outputVariable="getResponse">
	      </invoke>
      </scope>
</foreach>

The question is how these multiple outcomes -getResponses- will be
collected. The proposal is silent on that. The BPEL language does not
provide such a capability. So, it seems to me that we need a proprietary
extension to deal with data aggregation/collection. It seems to me that
the parallel for-each is not really usefully without proper data
handling capabilities. Or?

>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.

What would be the scenario where this complex behavior is needed?

Regards,

Ivana


>-----Original Message-----
>From: Yaron Y. Goland [mailto:ygoland@bea.com] 
>Sent: Tuesday, March 15, 2005 10:34 PM
>To: wsbpeltc
>Subject: [wsbpel] Issue 147 - Proposal For Vote
>
>
>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.
>
>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.
>
>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.
>
>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]