WebLogic 12c 上的 SOA Suite 在从 BPEL 流程调用 TaskService 时创建额外的人工任务

SOA Suite on WebLogic 12c creates extra human task when calling TaskService from a BPEL process

这是将应用程序从 WebLogic 11g 迁移到 WebLogic 12c 后出现的问题,我使用 JDeveloper 12c 和 2 个 BPEL 流程重现了它。

我创建了 BPEL 流程 CreateTask,它向 TaskService 发送 initiateTask 请求以创建人工任务,然后等待任务完成。此屏幕截图中的流程编号 4,它在等待任务完成时处于 运行 状态:

我打开那个流,可以看到 CreateTask 已经创建了人工任务,BPEL 流程和工作流都处于 运行 状态:

我点击人工任务,取工作流编号:

现在我可以使用该工作流编号向 TaskService 发送 updateTaskOutcome 请求以完成任务(在 SoapUI 中完成):

我返回企业管理器并看到流程 4 现已完成:

目前一切顺利。

我创建了第二个 BPEL 流程 CompleteTask,它向我从 SoapUI 发送的相同请求发送到 TaskService。在 运行 CreateTask 之后,然后 运行 CompleteTask 使用新的工作流程编号,我们有流程 5,即 CreateTask 和流程 6,即 CompleteTask:

流程 5 已按预期更改为已完成,但流程 6 没有等待任何事情,因此它也应该完成。

查看流程 6 的详细信息,BPEL 流程已完成,但其下仍有人工任务 运行:

那个人工任务不应该存在,因为这个进程只是在完成已经创建的任务。如果我打开那个任务,它是完全空白的:

从 BPEL 流程对 TaskService 进行其他调用,即使只是 requestInfoForTask,也会做同样的事情。

这不会发生在 WebLogic 11g 中。未创建空人工任务,并且两个流程都已完成。为什么它会发生在 12c 中,对此可以做些什么?

解决该问题的一种方法是将 TaskService 作为外部服务而不是人工任务组件的一部分来调用。

将新的 SOAP 引用添加到您的组合中:

TaskService.wsdl中的URL用于localhost:8888,部署时请按照您的项目示例正确配置。 (例如,更改组合中的引用以使用 WSDL 的项目副本并将值替换为配置计划)

对于使用 initiateTask 以外的操作的任何 BPEL 流程,link 将它们发送到外部 TaskService 而不是人工任务(或两者,如果需要)。我已经完全替换了 link,因为我的过程只使用 updateTaskOutcome。

之前

之后

在 BPEL 流程中,将调用步骤中的 partnerLink 从 HumanTask.TaskService 更改为 TaskService。

现在完成任务的进程将正确完成: