【发布时间】:2016-03-28 18:47:16
【问题描述】:
我想使用 Activiti BPMN 流程来完成一些数据库更新任务。我的流程如下。
开始事件-> 服务任务 1 -> 服务任务 2 -> 服务任务 3 -> 结束事件
在Service task 1的服务实现类中:我为MySQL数据库创建了一个java.sql.Connection。我需要将相同的 Connection 对象传递给 Service Task 2 和 Service Task 3。基本上,这两个类将使用相同的 Connection 对象对数据库进行一些插入。
我尝试如下(dbConn是包含java.sql.Connection类型dbConnection的类)
execution.setVariable("DBConn",dbConn);
但它给出了一个异常,因为连接对象是不可序列化的。
"org.activiti.engine.ActivitiException: Couldn't serialize value"
那么在进程的服务任务之间传递此类不可序列化变量的最佳方式是什么?或者有没有办法在一个地方为多个服务任务定义这样的通用对象,并在服务任务中使用它们(类似于流程的全局变量)
【问题讨论】:
-
有什么特殊原因要传递相同的连接对象吗?
-
我想为服务任务 2 和服务任务 3 中的插入任务使用相同的连接。数据库连接是使用 setAutoCommit(false) 创建的。所以在执行服务任务 3 之后我想提交事务
-
如果 - 由于某种意外原因 - 服务器崩溃并且您必须重新启动它会发生什么?
-
那将是一个问题。您能否让我知道使用 activiti 处理数据库事务的任何其他方式。基本上我想创建一系列数据库更新,如果所有事务都成功,则最后提交事务,否则回滚所有事务。