将外部数据库与 Activiti BPMN 结合使用

Using External Databases with Activiti BPMN

我目前正在使用 BPMN 和 Activiti 创建一些业务流程。对于该业务流程中的一个步骤,我需要查询数据库并在后续步骤中使用该结果。所以我正在寻找可能的解决方法,将 SQL 操作功能集成到 Activiti。 那么任何人都可以建议我是否有任何方法可以为 activiti 嵌入 sql 查询功能?非常感谢任何关于使用 Activiti 引擎的 BPMN 流程的外部数据库交互的建议。

如果不存在这样的解决方案,任何关于如何为 activiti 实现这样的功能的帮助也很有帮助

您可以设置 Java Service Task as instructed here 并实现您的自定义逻辑,这些逻辑可能包括也可能不包括与外部数据库的交互。请记住将服务任务的输出保存到流程变量(执行)中,以防您需要它进行进一步处理(例如,查看...)

这是一个示例 BPMN 服务任务:

   <serviceTask id="javaService"
         name="My Java Service Task"
         activiti:class="org.activiti.MyJavaDelegate" />

这是它的示例实现:

public class ToUppercase implements JavaDelegate {
  public void execute(DelegateExecution execution) throws Exception {
    String var = (String) execution.getVariable("input");
    var = var.toUpperCase();
    execution.setVariable("input", var);
  }
}

不要忘记管理您的数据库连接池等,这样您就不会在生产中遇到任何不必要的问题

编辑:
我无法从 blog post your referenced in your 中检测到任何可能在 activiti 社区版中无法正常运行的东西,请记住使所有自定义 类 和依赖项在类路径中可用。

注: 博客 post 中的 post 正在谈论 alfresco 中的嵌入式 activiti 引擎(在那种情况下它是企业版),但再一次强调,即使在 activiti 的社区版中它也应该可以正常工作!

从外部数据库访问数据是服务任务的一个非常常见的用例。 我看到其他人给你指出的方向是完全合理的。

但是,还有另一个选项使用与 Activiti 本身使用的相同的数据库层。该层是 iBatis,用于数据库引擎中的所有实体存储。

用户指南在此处描述了如何使用 iBatis:http://www.activiti.org/userguide/#advanced.custom.sql.queries

我们已经在许多客户身上使用了它,效果很好。

如果这不能满足您的要求,那么始终可以选择使用自定义 Java 服务 class(看看 Springs JDBCTemplate - 它非常易于使用).

希望这对您有所帮助。