将外部数据库与Activiti BPMN一起使用

时间:2016-01-25 11:41:43

标签: activiti bpmn

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

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

2 个答案:

答案 0 :(得分:2)

您可以按照说明Java Service Task设置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中引用的comment中可能无法在activiti社区版中正常运行的任何内容,只需记住在类路径中提供所有自定义类和依赖项。

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

答案 1 :(得分:1)

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

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

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

我们在很多客户身上都使用了这个效果。

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

希望这有帮助。