The advantage of using a task service out of the box is its ease of use and clean integration with the BPEL spec today. A task can carry standard properties, such as creator, assignee, duration, etc, as well as support arbitrary data as a payload. Customers who opt to port their applications to another BPEL platform, can either (1) Implement their own task service with the same API (the task service publishes a WSDL like any other Web service), (2) continue using the task service as a legacy, yet fully interoperable Web service, on the original BPEL engine, or (3) Modify their processes to not use the task service.
The following BPEL code example shows how to define a user task as part of a process with a task service:
<!-- initiate the remote process --> <invoke name="invokeTaskService" partnerLink="ConfirmationTask" portType="service:TaskService" operation="initiateTask" inputVariable="taskRequest"/>