使用Activiti工作流重启应用程序的正确方法

时间:2013-09-25 13:52:22

标签: activiti bpmn

我在我的应用程序中使用Activiti框架。 Activiti通过Activiti API进行管理。

出了什么问题:

我需要使用应用程序重启服务器。这意味着两件事:

  1. 我需要正确暂停/停止所有有效活动
  2. 我需要正确更新所有已停止的活动
  3. 目前我的应用程序已通过 System.exit(0)

    停止

    问题:

    1. 我怎么能这样做? (表示上述两项)
    2. System.exit(0)会遇到什么问题?
    3. 修改

      1. 是的,谢谢。但我使用嵌入式Activiti。这些是适用于嵌入式还是仅适用于独立(通过REST)?
      2. async 任务怎么样?
      3. 我看过ProcessEngine .close函数。它是为了什么?我需要吗?
      4. EDIT2:

        我做了一个演示,说明了异步任务挂起的问题。你可以输入:

        来获得它
        git clone https://github.com/JOLO-/Activiti-Process-Suspend-Renew-Demo.git
        

        关于演示:

        我的工作流程看起来像:[Main Process] => [Asyncronous Subprocess] => [返回主流程]

        每个异步进程都包含每秒打印一次的 infiniti loop AddCandidateService.java )。

        你应该看看Main class。在那里,我做了下一件事:

        1. 启动两个主要流程
        2. 对于每个主要进程,我启动一个异步子进程(带有无限循环)
        3. 暂停所有有效流程
        4. [预期结果]:

          所有流程&子进程停止计算

          [实际结果]:

          异步子进程继续进行计算

1 个答案:

答案 0 :(得分:2)

Activiti framework,因为您必须知道,运行和功能完全基于its database,已配置。

因此,当您启动流程时,会创建流程实例并将其与当前taskactivitiy以及其他相关信息一起存储在数据库中。即使您停止服务器并再次启动它,数据也将在数据库中可用。

如果你想暂停和续订活动,你可以这样做:

使用Activiti 5.13

列出商品

运行所有流程实例

GET runtime/process-instances,它将列出所有流程实例

暂停实例

PUT runtime/process-instances/{processInstanceId}

请求正文是: { "action":"suspend" }

续订实例或激活流程实例

PUT runtime/process-instances/{processInstanceId}

{ "action":"activate" }

供参考:usenter code hereer guide

您也可以在嵌入式中使用,如下所示:

暂停流程实例:

RuntimeService runtimeService = processEngine.getRuntimeService();
runtimeService.suspendProcessInstanceById(processInstanceid)

TO激活流程实例

RuntimeService runtimeService = processEngine.getRuntimeService();
runtimeService.activateProcessInstanceById(processInstanceid)

我不太确定processEngine.close()方法,但如果您不打算使用,我认为它就像closing the connection。我从来没有在我的应用程序中尝试或使用它。

我希望它有所帮助。