[jbpm-dev] ServiceTask with web service support

Salaboy salaboy at gmail.com
Wed May 16 06:19:17 EDT 2012


Yes it sounds as a "good to have feature" and the first step to more advanced features. 

Sent from my iPhone

On 16 May 2012, at 05:43, Maciej Swiderski <mswiders at redhat.com> wrote:

> Hi there,
> 
> as briefly mentioned on IRC channel I would like to share some thoughts about web service support for service task. First of all motivation to add this feature is to be compliant with BPMN2 spec (in my opinion one of the main constructs) and its default implementation technology. Currently the default service task handler allows to execute java class based on defined interface and operation that maps to the class name and its method.
> 
> I would like to extend it to be able to support following scenarios:
> - if implementation attribute of the service task is set to ##other will use the current support to execute java method in the defined class
> - if implementation attribute of the service task is set to ##WebService will utilize dynamic client of apache cxf to make a call
> 
> In both cases interface and its operations need to be defined and in case of web service some additional steps needs to be taken:
> 1. import wsdl into bpmn2 file
> 2. make use of implementationRef attribute of the interface to point out the port type of the service from imported wsdl
> 3. make use of implementationRef attribute of the operation to specify operation declared in the wsdl
> 
> Simplified bpmn2 that declares web service service task will look like this:
> 
> <bpmn2:definitions>
> <bpmn2:import importType="http://schemas.xmlsoap.org/wsdl/" location="http://127.0.0.1:9876/HelloService/greeting?wsdl" namespace="http://objects.bpmn2.jbpm.org/"/>
> <!-- import wsdl -->
> <bpmn2:itemDefinition id="_2_InMessageType" structureRef="java.lang.String"/>
> <bpmn2:message id="_2_InMessage" itemRef="_2_InMessageType"/>
> <!-- declare interface with reference to the port type in wsdl -->
> <bpmn2:interface id="_2_ServiceInterface" implementationRef="SimpleService" name="">
> <!-- declare operation with reference to operation in wsdl -->
> <bpmn2:operation id="_2_ServiceOperation" implementationRef="hello" name="hello">
> <bpmn2:inMessageRef>_2_InMessage</bpmn2:inMessageRef>
> </bpmn2:operation>
> </bpmn2:interface>
> <bpmn2:process id="WebServiceTask" tns:version="1" tns:packageName="defaultPackage" name="WebServiceTask">
> <bpmn2:startEvent id="StartEvent_1">
> </bpmn2:startEvent>
> <!-- use implementation ##WebService" for service task -->
> <bpmn2:serviceTask id="ServiceTask_1" name="Service Task" implementation="##WebService" operationRef="_2_ServiceOperation">
> </bpmn2:serviceTask>
> 
> <bpmn2:sequenceFlow id="SequenceFlow_1" tns:priority="1" sourceRef="ServiceTask_1" targetRef="EndEvent_1"/>
> <bpmn2:sequenceFlow id="SequenceFlow_2" tns:priority="1" name="" sourceRef="StartEvent_1" targetRef="ServiceTask_1"/>
> <bpmn2:endEvent id="EndEvent_1">
> </bpmn2:endEvent>
> </bpmn2:process>
> </bpmn2:definitions>
> 
> Wdyt?
> 
> Of course this could be implemented using domain specific service that will be dedicated to web service invocations but I believe that aligning it with bpmn2 spec is what users would expect.
> 
> Cheers



More information about the jbpm-dev mailing list