
调用任务的状态过渡图
在人员调用服务时,可以借助于调用任务。 在调用任务生命周期内,特定交互只能在特定任务状态下进行,而这些交互又会影响任务的状态。
创建和启动调用任务的人员将成为任务发起者。 此任务启动时,它将自动调用该服务并等待其结果。 当服务结果可用时,调用任务将存储该结果,只要此任务存在,发起者就可以检索该结果。
下图显示了调用任务生命周期中可能发生的状态过渡:

任务在创建后将进入“不活动”状态。 在此状态下,您可以更新任务属性或设置定制属性。 要调用该服务,必须启动此任务。 此任务可以由发起者或其中一个潜在启动者启动。
任务启动后,它将进入“正在运行”状态。 在此状态下,此任务将等待所调用的服务返回。 在此状态下,可能会发生下列异常事件:
- 此任务可能会因为该服务未及时返回而升级。 它会进入“已升级”子状态,并在其余任务生命周期内保持此状态。
- 此任务可能会失效。 此状态更改将使此任务结束。
- 您可以使用终止操作手动终止此任务。 此状态更改将使此任务结束。
正常的任务流程是,该服务返回输出消息或故障消息。 然后,如果返回了输出消息,那么此任务将进入“已完成”状态;如果返回了故障消息,那么此任务将进入“已失败”状态。 在这两种情况下,该消息都可供任务发起者和启动者使用。
“已失败”、“已终止”、“已完成”和“已失效”状态都是结束状态。 如果任务模板指定了自动删除,那么此任务将在删除计时器失效后删除或者手动删除。 缺省情况下,调用任务不会自动删除,因此被调用服务的结果可供访问。
可以重新启动处于某个结束状态的任务。 该任务将重新进入“正在运行”状态。 与该任务相关联的升级将取消,删除计时器也将取消。
还有其他一些规则适用于内联调用任务。 这些任务是 BPEL 流程的不可缺少部分,因此流程可以控制它们的生命周期:
- 如果使用业务流程管理器 API 或 SCA 客户机启动了 BPEL 流程,那么 BPEL 流程将创建并隐式启动该活动的创建流程实例的任务。 调用任务还可以由已在运行的流程实例使用。 在这种情况下,它们由流程创建,并且与接收或选取(接收选择)活动或者 on-event 事件处理程序相关联。
- 任务在 BPEL 流程中表示为接收或选取(接收选择)活动或者 on-event 事件处理程序。 如果对活动定义了内联调用任务,那么还将对此活动定义授权。
- 如果调用任务由 BPEL 流程创建并启动,那么其生命周期由该流程决定,并且它们与该流程一起删除。 如果调用任务是使用人员任务管理器 API 启动的,那么无论其创建方式如何,其生命周期都独立于该流程,并且即使在删除该流程后,也能显示它们的结果。
- 无论以何种方式启动内联调用任务,都可以重新安排该任务的到期时间。
- 可以使用失效前持续时间和删除前持续时间的值对内联调用任务进行建模。 这些设置仅在使用人员任务管理器 API 创建任务的情况下可用。 这些持续时间可以在任务启动之前进行更新,并在任务已启动后进行重新安排。