从同步bpel进程调用异步bpel进程时的最佳实践

时间:2014-08-06 09:40:45

标签: oracle asynchronous synchronous bpel

我有一个同步进程,通过轮询数据库等待异步进程响应。基本上,异步进程将新记录插入到数据库中,同步进程会定期检查对其的更新,并在找到更新后继续执行。同步过程不会调用异步过程。

我相信这不是唯一可用的解决方案,关于等待异步的同步过程。我的问题是,有没有更好的方法呢?关于表现特别。

如果已经有了这个问题的答案,我很抱歉,但我还没找到。

1 个答案:

答案 0 :(得分:1)

更好的方法是从异步进程向同步进程发送消息。后者只能阻止receive活动,直到消息到达。从性能角度来看,这样做更好,因为同步过程不必定期唤醒并检查数据库。相反,它可能只是睡眠,直到引擎检测到消息到达并唤醒同步过程。

请注意,这意味着您必须在同步过程中使用correlationSets [1],这必须在等待之前的某个时间点启动实际消息(例如在您的初始receive期间)。这是必需的,以便引擎可以决定将消息转发到哪个流程实例。您还可能希望向同步过程添加一个partnerLink myRole,以便异步过程调用一个操作(然后还需要相应的partnerLink)。我的意思是同步过程的结构看起来像这样:

<sequence>
  <receive name="initialSyncReceive" createInstance="yes" partnerLink="originalPartnerLink" ... />
  <!-- some logic before waiting on async process -->
  <receive name="notificationFromAsync" partnerLink="newPartnerLinkForAsyncOnly" ... />
  <!-- some logic after notification from async process -->
  <reply name="replyToSyncRequest" partnerLink="originalPartnerLink" ... />
<sequence>

免责声明:这只是一个大纲,您不能只复制/粘贴代码。要使这种情况发挥作用,需要对这两个过程进行许多重要的更改,例如:添加correlationSets,其他WSDL,propertyAliasespartnerlinks