BPEL,初始化变量并重复onAlarm eventHandler

时间:2012-08-08 09:40:35

标签: initialization bpel

我有一个问题,到目前为止我无法解决。在BPEL中,我想创建一个onAlarm eventHandler,它立即触发(即“for”元素设置为'PT0S')并每2秒重复一次。这个eventHandler应该包含一个计数器,每当闹钟触发时它会递增。

问题是:如何初始化计数器?如果变量将在onAlarm范围内初始化,则该值不再增加。在“正常”控制流中,该值也无法初始化,因为如果进程或onAlarm作用域首先运行,则不会定义该值。所以我会偶尔得到一个uninitializedVariable异常。

我的解决方案是既不在进程范围也不在onAlarm范围初始化变量,而是创建一个faultHandler,其中变量将被初始化,之后将执行onAlarm流程。问题是这个faultHandler现在将捕获每个未初始化的变量执行,并且可能还有另一个。

那么还有另一种可能性来处理这个问题,还是我可以找出哪个变量未正确初始化,以便faultHandler可以得到两个控制流?

解决方案应该适用于每个BPEL引擎。

谢谢,迈克尔

1 个答案:

答案 0 :(得分:1)

您可以使用from-spec在其定义中使用默认值初始化变量,就像在赋值中一样。有关详细信息,请参阅section 8.4.1 of the spec

默认初始化可能如下所示:

<variables>
    <variable name="Default" type="xsd:int" >
        <from>5</from>
    </variable>
</variables>

这应该在进程的启动活动完成后安装eventHandlers时有效。到那时,根范围中定义的变量已经初始化。引用spec, section 12.1

  

范围初始化包括实例化和初始化   范围的变量和合作伙伴链接; ...如果范围包含   初始启动活动然后开始活动必须在之前完成   事件处理程序已安装。

这么多规格。我想没有人能分辨出这是否“适用于每个BPEL引擎”。据我所知,它适用于bpel-g,Orchestra和EasyBPEL,但不适用于Apache ODE或OpenESB。