binggege 2010-09-13
比如用spring声明了OrderServiceImp中takeOrder采用事务管理,如果手工地抛出一个runtimeException,只有我自己管理的数据库事务会回滚,但jbpm的事务没有被回滚。
比如执行下面的代码,会发现order1并没有被提交,符合期望
但在数据库中可以看到这个processInstance被创建,而且执行正常,相关history表中也有相应记录
而我期望的是jbpm的数据要和业务的数据统一提交或回退
publicclassOrderServiceImpextendsHibernateDaoSupportimplementsOrderService{
publicvoidtakeOrder(Orderorder1,Orderorder2){
getHibernateTemplate().save(order1);
ProcessInstanceprocessInstance=executionService
.startProcessInstanceByKey("StateSequence");
ExecutionexecutionInA=processInstance.findActiveExecutionIn("a");
processInstance=executionService.signalExecutionById(executionInA
.getId());
if(true)
thrownewRuntimeException();
getHibernateTemplate().save(order1);
}
}最后发现是犯了一个低级错误,初始化executionService这些jbpmservice时重新new了一个ApplicationContext,这样就搞了两个容器,当然事务不能整合了
第一次用spring,汗。。。