Oracle BPEL事件处理“onEvent”活动和业务事件

时间:2011-10-22 13:59:50

标签: oracle bpel soa-suite

我正试图在soa套件11g ps3下使用bpel扩展来进行事件处理。我正在尝试订阅事件传递网络中的事件,但是我收到了错误。

这就是代码:

<eventHandlers>
  <onEvent bpelx:eventName="ns4:discountEvent" variable="discEvent" >
    <scope name="Scope1">
      <sequence name="Sequence1">
        <exit name="Exit1"/>
      </sequence>
    </scope>
  </onEvent>
</eventHandlers>

编译器给出了以下错误:

Error(52): Activity <bpel:onEvent> must have "element", "messageType" attribute present.

我无法在“onEvent”活动中找到有关使用扩展程序的任何信息。

任何帮助表示赞赏!

谢谢,克里斯

1 个答案:

答案 0 :(得分:1)

事件处理程序的工作方式与其他交互活动略有不同。当receive,invoke等对先前定义的变量起作用时,事件处理程序定义它自己的变量,该变量在onEvent的子活动的范围内可见。为了给这个变量一个类型,需要将messageType或元素标识为变量的声明类型。这就是需要element或messageType的原因。

请在下面找到BPEL 2.0规范的相关引用:

  

变量属性(如果存在)标识事件处理程序的本地变量,该变量将包含从伙伴接收的消息。 [SA00087] messageType属性通过使用其QName引用消息类型定义来指定变量的类型。变量的类型(由messageType属性指定)必须与操作属性引用的操作定义的输入消息的类型相同。可选地,可以省略messageType属性,而是如果要接收的消息具有单个部分并且该部分用元素类型定义,则替换元素属性。该元素类型必须与element属性引用的元素类型完全匹配。变量和messageType / element属性构成该名称的变量的隐式声明,并在与事件处理程序关联的关联作用域内键入。如果使用了element属性,那么传入消息与事件处理程序中声明的变量的绑定将按照10.4节中的receive活动指定的那样进行。提供Web服务操作 - 接收和回复。