2013-02-28 73 views
2

我在連接到Postgresql 9數據庫的WSO2 BPS 3.0.0上的bpel進程中開發了一個池化邏輯。 它看起來像這樣:wso2等待循環在重新啓動後不工作

<bpel:repeatUntil name="RepeatUntilIncidentCompleted"> 
<bpel:sequence name="CheckIncidentStatus"> 
    <bpel:wait name="Wait"> 
     <bpel:for expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA['PT1M']]></bpel:for> 
    </bpel:wait> 
    <!-- invoke a service, copy status to a vStatus variable --> 
</bpel:sequence> 
<bpel:condition expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[$vStatus=36]]></bpel:condition> 

我創建了一個流程實例和這個循環工作得很好。 後來我重新啓動了WSO2 BPS服務器。在重新啓動的時刻,流程實例在循環中,但是在重新啓動之後,循環不再運行。該過程在碳控制檯中標記爲活動。

我在deploy.xml中添加了in-memory = false屬性,但它沒有幫助。

我可能錯過了一些配置,但也可能存在這樣一個循環的持久性問題(可能在Apache ODE中)。

有沒有人知道這個問題的解決方案? Thx提前。

回答

0

我發現:
1.您放入wso2 bpel進程中的所有睡眠操作都在ode_job表中表示。屬性ts包含喚醒時間。
2.重新啓動bps服務器後,所有延遲的睡眠操作都不會繼續(當喚醒時間<當前時間 - 偏移量時,睡眠操作會延遲)。
3.重新啓動bps服務器後,所有未延遲的睡眠操作都可以正常進行。

現在我們假設:
- 您有一個等待等待操作的bpel流程實例。喚醒時間爲X.
- 您停止bps服務器,並在X後重新啓動它。
由於2.重新啓動後,流程實例將不會繼續。這包括我之前描述的循環。

我的解決方法的問題:
每次的WSO2 BPS服務器重新啓動我的是更新的睡眠操作的喚醒屬性(在ode_job表中的TS列)在數據庫中執行一個SQL腳本。起牀時間設定在不久的將來。

我不知道您是否可以通過配置更改2./3.行爲。我找不到任何有關它的文檔。這裏需要一些代碼分析。更糟糕的是,wso2使用它自己的apache ode分支,所以你不能只更新apache ode庫。

我猜想,可能有兩個原因2:
描述的行爲 - 延遲睡眠操作DROP掉
- 延遲睡眠操作重啓後立即執行,但過程的定義尚未加載。

+0

對不起,復興......你是什麼SQL腳本?你只更新ts或其他culomns? – gusto2 2018-02-12 18:51:48