Цикл ожидания wso2 не работает после перезапуска

Я разработал логику объединения в процессе bpel на WSO2 BPS 3.0.0, подключенном к базе данных Postgresql 9. Это выглядит так:

<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>

I created a process instance and this loop worked fine. Later I restarted the WSO2 BPS server. In the moment of the restart the process instance was in the loop, but after restart the loop wasn't running anymore. The process is marked as active in the carbon console.

Я добавил свойство in-memory=false в файл deploy.xml, но это не помогло.

Я мог пропустить некоторые настройки, но с таким циклом также может быть проблема сохранения (вероятно, в Apache ODE).

Кто-нибудь знает решение этой проблемы? Спасибо заранее.


person user2119296    schedule 28.02.2013    source источник


Ответы (1)


Я обнаружил, что:
1. Все спящие операции, которые вы помещаете в процесс wso2 bpel, представлены в таблице ode_job. Атрибут ts содержит время пробуждения.
2. После перезапуска сервера bps все отложенные операции сна не продолжаются (операция сна откладывается, когда время пробуждения ‹ текущее время - смещение).
3 , После перезапуска сервера bps все неотложенные спящие операции продолжаются должным образом.

Теперь предположим, что:
- У вас есть экземпляр процесса bpel, ожидающий выполнения операции ожидания. Время пробуждения — X.
— Вы останавливаете сервер bps и запускаете его снова через X.
Из-за 2. экземпляр процесса не будет продолжаться после перезапуска. Это включает цикл, который я описал ранее.

Мое решение проблемы:
Каждый раз при перезапуске сервера wso2 bps я запускаю сценарий sql в базе данных, который обновляет атрибут пробуждения операций сна. (столбец ts в таблице ode_job). Время пробуждения установлено на ближайшее будущее.

Я не знаю, можно ли изменить поведение 2. / 3. с помощью конфигурации. Я не смог найти никакой документации об этом. Здесь необходим некоторый анализ кода. Что еще хуже, wso2 использует свою собственную ветку apache ode, так что вы не можете просто обновить библиотеку apache ode.

Я подозреваю, что может быть две причины для поведения, описанного в 2.:
- отложенные спящие операции отбрасываются
- отложенные спящие операции выполняются сразу после перезапуска, но определения процессов еще не загружены.

person user2119296    schedule 14.03.2013
comment
Сорри за оживление... какой у тебя sql скрипт? вы обновляете только ts или и другие culomns? - person gusto2; 12.02.2018