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)"/>
<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.
Yours, Mike.