You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ode.apache.org by Matthieu Riou <ma...@gmail.com> on 2009/07/10 01:36:35 UTC

Re: [DISCUSS] How to Provide External initialization of BPEL variables

On Thu, Jul 9, 2009 at 8:25 AM, Mike Edwards <
mike.edwards.inglenook@gmail.com> wrote:

> Hi folks,
>
> I am writing as one of the committers on Apache Tuscany, which is using ODE
> to provide SOA components using the BPEL langage, combined with other
> components written in many other languages.
>
> One of the capabilities that Tuscany provides, through its implementation
> of the Service Component Architecture (SCA) specification for BPEL, is the
> capability to provide "external initialization" of BPEL variables.  I am
> interested in getting a clean implementation of this capability with ODE.
>
> So, first, how is this capability described?
>
> The SCA BPEL spec has an extension attribute that is used on a BPEL
> variable declaration to indicate that its value should be initialized from
> SCA metadata, like this:
>
>    <variable name="testName" type="xsd:string" sca-bpel:property="yes"/>
>
> ...where sca-bpel is the prefix referring to an SCA namespace:
>
>    xmlns:sca-bpel="http://docs.oasis-open.org/ns/opencsa/sca-bpel/200801"
>
>
> The related SCA metadata might look something like this:
>
> <component name="TestClient">
>   <implementation.bpel process="bpel:ClientInterface_0002"/>
>   <service name="TestInvocation">
>      <interface.wsdl interface="
> http://test.sca.oasisopen.org/#wsdl.porttype(TestInvocation)<http://test.sca.oasisopen.org/#wsdl.porttype%28TestInvocation%29>"/>
>
>      <binding.ws/>
>   </service>
>   <reference name="reference1" target="TEST_ASM_4001Component1/Service1" />
>   <property name="testName">ASM_4001</property>
> </component>
>
> It's that <property/> element that drives the initializer value for the
> variable within the BPEL process. (Note - this is a trivial case, SCA allows
> for much more complex setting of data values...)
> Note that this DOES NOT imply that the variable is an "external variable"
> in the ODE sense - other than the initialization, the variable is a standard
> BPEL variable.
>
>
> At the moment, there is no clean way of performing this initialization
> using ODE.  The latest version of ODE does support the concept of
> initializer values - what we need is to have some "external code" invoked at
> the right time to fetch the data value and set the value into the BPEL
> variable.
>
> I'm interested to hear if you would be willing to consider adding a few
> extra capabilities to ODE to enable this feature.  I believe that much of
> what is needed is already in the latest ODE code, but it will need some
> extra code to organize things.  I think that it might be along these lines:
>
> 1) Tweak to the BPEL Compiler code to allow recognition of the
> sca-bpel:property extension attribute and for the compiler to generate code
> that will do initialization of the related variable, but through the
> invocation of some external extension code at runtime.
>
> 2) Tweak to the runtime code to allow for the invocation of external
> extension code during variable initialization, and for that code to be able
> to assign a value to the variable.
>
>
> Comments welcome - please tell me if I'm being insane here, for example! I
> would expect the Tuscany folks (probably me!) to write the actual external
> extension code called at runtime, but the plug points would have to be in
> the core ODE code, both for the compiler and for the runtime.
>

Hey Mike, the approach sounds reasonable and your two steps are correct.
About the addition of this feature, I personally doubt I'll have time for
this. But if anybody is willing to step up, please be my guest.

Cheers,
Matthieu


>
>
> Yours,  Mike.
>