【问题标题】:Using External Databases with Activiti BPMN在 Activiti BPMN 中使用外部数据库
【发布时间】:2016-01-25 11:41:43
【问题描述】:

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

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

【问题讨论】:

  • 您能否提供有关您的用例的更多详细信息?您需要从某个外部数据库中获取一些数据并将其包含在您的工作流程中(例如显示一些信息以便经理做出决定)?
  • 是的。例如:假设我正在管理图书购买工作流程场景。我需要查询 mySQL 数据库以检查所请求书籍在库存中的可用性。就像在那个例子中一样,实际上我需要找到一种通用的方式来与 BPMN 流程中的外部数据库进行交互。因此,任何关于如何扩展 activiti 引擎以实现该功能的建议也会有所帮助
  • 我找到了以下与我的案例相匹配的示例。 link 不过是alfresco activiti 商业版。有什么办法可以将它添加到 apache 版本中。

标签: activiti bpmn


【解决方案1】:

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

这是一个示例 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);
  }
}

不要忘记管理您的数据库连接池等,以免在生产中出现任何不必要的问题

编辑:
我无法从您在 comment 中引用的 blog post 中检测到任何可能无法在 activiti 社区版中正常运行的内容,请记住让您的所有自定义类和依赖项在您的类路径中可用。

注意: 博客文章中的帖子是关于 alfresco 中的嵌入式 activiti 引擎(在这种情况下是企业版),但再一次,即使是社区版的 activiti,它也应该可以正常工作!

【讨论】:

  • 非常感谢您的指示和清晰的解释。我将研究 Java 服务任务并希望这对我的情况有用。
  • 我已经为此目的使用 Java Delegates 有一段时间了,但我避免直接​​从流程逻辑进行 DB 访问。只要有可能,我的代表就使用服务(REST 或 SOAP)。这种方法减少了耦合并简化了集成测试。
  • @PhilippeSevestre:完全同意!
【解决方案2】:

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

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

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

我们已经在许多客户中使用它并取得了很好的效果。

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

希望这会有所帮助。

【讨论】:

  • 非常感谢您提供的有用信息。将查看 iBatis 的详细信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多