Oracle SOA中同步BPEL流程的应答组件 是否有可能在同步BPEL过程中间向客户端返回结果?

Oracle SOA中同步BPEL流程的应答组件 是否有可能在同步BPEL过程中间向客户端返回结果?,oracle,soa,bpel,Oracle,Soa,Bpel,我将回复组件放在BPEL流程的中间,但客户端仍然等待整个过程完成。我想知道BPEL中的同步回复机制是如何工作的。您可以在任何地方使用回复活动将响应发送回客户端。回复活动之后的任何活动都会按预期执行 您需要确保的一件事是,每个接收活动只能有一个回复活动。是的,您可以放置回复活动并在其之后执行其他一些活动 但您必须在回复之后放置等待活动,以强制BPEL引擎实际发送回复消息 此外,还必须将等待活动配置为至少等待3秒,或在Oracle Enterprise Manager Fusion Middlewa

我将回复组件放在BPEL流程的中间,但客户端仍然等待整个过程完成。我想知道BPEL中的同步回复机制是如何工作的。

您可以在任何地方使用回复活动将响应发送回客户端。回复活动之后的任何活动都会按预期执行


您需要确保的一件事是,每个接收活动只能有一个回复活动。

是的,您可以放置回复活动并在其之后执行其他一些活动

但您必须在回复之后放置等待活动,以强制BPEL引擎实际发送回复消息

此外,还必须将等待活动配置为至少等待3秒,或在Oracle Enterprise Manager Fusion Middleware Control的系统MBean浏览器中等待MinBPELWait属性的值。否则服务器将忽略它


请参阅:

您可以使用脱水活动代替等待。其概念是,除非事务完成,否则bpel不会回复,因此您基本上需要在使用回复活动的地方结束事务。为此,您必须提交事务,以便新事务可以开始


注意:使用等待会减慢您的bpel流程。

在composite.xml中尝试修改同步bpel组件的以下属性,它应该在不添加脱水或等待的情况下工作,并且在客户端调用时不应该有等待

bpel.config.transaction = required
bpel.config.oneWayDeliveryPolicy=async.persist

最好的办法是在回复后添加脱水活动,这将迫使BPEL完成事务,然后启动一个新的事务

reply组件不会终止进程,因此您需要一个terminate组件。基本上,客户机应该在收到回复后立即得到回复。您能描述一下您的流程吗?但是如果我使用terminate组件,以下活动将不会执行,对吗?我只想先回复一个结果给客户端,然后继续其他活动。然后不要把终止组件。。。尝试以下操作:创建一个新的同步进程,添加一个asign组件将一些值复制到输出变量,在应答组件之后添加一个等待组件1分钟,然后从控制台启动它。您将看到,一旦收到回复,就会立即收到回复,但如果您检查流屏幕,它仍在运行