0

我想 1. 拦截事件和 2. 通过 BPEL 运行时引擎的事件控制行为。我可以知道哪个 BPEL 运行时引擎支持这个吗?

1. 例如,当调用服务名称“hello”时,我想从服务器接收事件“invoke_hello”。

对于 2. 例如,当服务器并行调用 3 个服务“invoke_hello1”、“invoke_hello2”和“invoke_hello3”时,我可以通过说我只允许运行“invoke_hello1”来控制行为。

我很感兴趣是否有任何支持 1 或 2 或两者的 BPEL 引擎,其文档页面大致讨论了这一点(所以我可以利用这个特性)。

4

1 回答 1

0

免责声明:我没有亲自使用过这些引擎的事件模块,所以我不能保证它们会按承诺工作。

关于问题 1(事件通知):

Apache ODE支持Execution Events。这些事件进入其数据库,您有多种检索事件的方法。你可以:

  1. 查询数据库以读取它们。
  2. 使用引擎管理 API通过 Web 服务执行此操作
  3. 将您自己的事件侦听器实现添加到引擎的类路径中。

ODE 的事件涉及 BPEL 中活动的生命周期。所以你的“invoke_hello”应该映射到ActivityXXXODE中的一个事件。

OpenESB 中包含的Sun BPEL 服务引擎对警报有一些支持,但是关于如何使用它的文档并没有那么详细。显然,您可以使用警报级别注释活动,并在执行活动时生成事件。

关于问题 2(控制行为):

这很难,我不确定是否有任何引擎在正常执行模式下真正支持这一点。实现此目的的一种直接方法是在调试模式下执行引擎并手动控制每个步骤。因此,您可以跳过“invoke_hello2”和“invoke_hello3”的继续,而继续“invoke_hello1”。

据我所知,ODE 没有调试器。另一方面,Sun BPEL 服务引擎有一个相当不错的. 它集成在 Netbeans 中的 BPEL 编辑器中,这是一个可视化编辑器(使用 BPMN 结构来可视化 BPEL 活动),让您可以在每个活动之间跳转。

另一种选择是手动编写您自己的 Web 服务来拦截消息并根据您的选择将这些消息转发到引擎。但是,据我了解您的问题,您更喜欢开箱即用的引擎。

显然,Oracle BPEL也支持事件,并且根据本教程还附带了一个调试器,但到目前为止我还没有亲自使用过这个引擎,所以我不会将它包含在这个答案中。

于 2013-02-06T11:17:21.427 回答