【问题标题】:Activiti compensation活动补偿
【发布时间】: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>

标签: activiti bpmn


【解决方案1】:

抛出异常就可以了,它会从引擎回滚整个事务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多