The BPEL Service Provider ([com.fs.jlo.bpel.provider.BpelServiceProvider]) extends the PXE container to support BPEL processes execution. Installing this service provider in a PXE domain makes it possible to deploy BPEL process definitions as PXE services.
There are two questions that are answered at configuration time:
- Which persistence implementation should be used?
- Which expression / query languages will be supported?
Both of these questions are answered using the configuration properties described below.
| Property |
Description |
| stateStoreConnectionFactory |
The classname of the [StateStoreConnectionFactory] implementation that should be used for persistence. |
| expressionLanguageFactory |
The classname(s) of the [ExpressionLanguageRuntime] implementation(s) that are to be used for evaluation of BPEL expressions. If multiple classnames are specified they should be separated by either "," or ";". If no classnames are specified, the default XPath implementation will be used. |
The PXE stand-alone server uses a configuration file — pxe-config.properties — to configure service providers. The configuration for the BPEL Service Provider, should look something like:
A BPEL process definition must be pre-compiled into a compiled BPEL process (a .cbp file) before it can be deployed as a PXE service. This compilation can be performed either by the bpelc command or through [programmatic means]. The .cbp file must be placed in the resource repository of a PXE system, and is referenced (by URI) from the PXE service configuration in the system deployment descriptor.
| Property |
Description |
| compiledProcess |
URI of the compiled BPEL process. This URI is resolved using the system's resource repository |
A BPEL process communicates with external services through partner links, which can define a partner role and/or a my role. The partner role of a partner link is a reference to an external service, while the "my" role of a partner link represents an interface to the BPEL process. Each BPEL service must declare appropriate ports for each of these roles. Each my role must have a corresponding exported port declaration, while each partner role must have a corresponding imported port declaration.
The link between the ports and the BPEL partner-link roles is established through naming convention; a port name must take on one of the following forms:
- partnerLink.role : the role named role of partner link named partnerlink
- scope:partnerLink.role : the role named role of partner link named partnerLink declared in a scope named scopeName
- scope[m]:partnerLink.role : the role named role of partner link named partnerLink declared in the mth occurance of a scope named scopeName
- partnerLink[n].role : the role named role of the nth occurance of partner link named partnerLink declared anywhere in the process
If there are multiple partner links with the same name declared in a single process (as can happen when partner links are declared within a <scope>) then a form that unamigously selects a single partner link must be used. For example the following BPEL process:
<process name="HelloWorld" ....>
<partnerLinks>
<partnerLink name="helloPartnerLink"
partnerLinkType="test:HelloPartnerLinkType"
myRole="me" />
</partnerLinks>
<receive .../>
<reply .../>
</process>
could declare its port using the simplest (first) form:
<system-descriptor ....>
.
.
<services>
.
.
<service name="helloWorld.BpelService" provider="uri:bpelProvider">
<exports>
<port name="helloPartnerLink.me" type="hw:HelloPortType" ... />
</exports>
</service>
</services>
</system-descriptor>
However, the BPEL process:
<process name="HelloWorld" ....>
<partnerLinks>
<partnerLink name="helloPartnerLink"
partnerLinkType="test:HelloPartnerLinkType"
myRole="me" />
</partnerLinks>
<scope>
<partnerLinks>
<partnerLink name="helloPartnerLink"
partnerLinkType="test:HelloPartnerLinkType"
myRole="me" />
</partnerLinks>
.
.
</scope>
</process>
would have to use one of the more precise forms; for example:
<system-descriptor ....>
.
.
<services>
.
.
<service name="helloWorld.BpelService" provider="uri:bpelProvider">
<exports>
<port name="helloPartnerLink[1].me" type="hw:HelloPortType" ... />
<port name="helloPartnerLink[2].me" type="hw:HelloPortType" ... />
</exports>
</service>
</services>
</system-descriptor>
| Property |
Description |
| endpointReference |
String representation of an end-point reference to associate with this port. This property is used to establish the initial value of a partner link's end-point reference. This property is only relevant for imported ports. |