【发布时间】:2013-09-26 07:40:25
【问题描述】:
我想要什么
我想办法在 Activiti 上下文到达等待状态之前回滚它。例如,我有:
public class MyService implements JavaDelegate {
@Override
public void execute(DelegateExecution execution) {
int a = calcA();
boolean res1 = saveToDB(a); // save to application context
execution.setVariable("a" , a); //save to activiti context
if (!a)
rollback(); //rollback execution contaxt
}
}
什么问题:
我不想手动删除执行变量。我已经尝试过普通交易 - 没有结果。现在我考虑补偿事件。
问题:
补偿事件是否回滚 Activiti 上下文,或者我应该在适当的 CompensationserviceTask 中手动执行?
【问题讨论】:
-
很好地表达了问题!
-
如果你在你的 Delegate Activiti 中抛出异常,将回滚并重试整个事务。这是你想要的吗?查看activiti.org/userguide/… 了解交易边界。
-
我已经读过了。我还阅读了关于 Activiti 和 Hibernate 的常见事务。似乎最后一个是一个神话,因为我在谷歌中没有找到任何例子,我浪费了大约两个星期没有结果。但关键是 Activiti 在我抛出异常后不会回滚它的上下文。能否为我提供工作示例的参考(希望使用 postgres 和 spring,但欢迎所有人)
-
除了其他属性外,您还需要为引擎配置使用以下属性。
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <property name="transactionManager" ref="transactionManager" /> <property name="jpaEntityManagerFactory" ref="entityManagerFactory" /> <property name="jpaHandleTransaction" value="true" /> <property name="jpaCloseEntityManager" value="true" /> </bean>