我想在一个产品中用Activiti或jBPM-5替换自定义BPM实现,该产品使用Hibernate(No JPA)和Spring进行持久层实现 . 不幸的是,Activiti和jBPM5都需要JPA(根据他们的文档),并且不可能将所有现有的Hibernate实现迁移到产品中的JPA .
- 有没有办法用Spring 3配置JPA 2.0(JPA提供程序是Hibernate)而不将Hibernate实现迁移到JPA(即保留.hbm文件)?
注意:我知道应用程序不符合JPA,并且不能使用其他JPA提供程序 .
- 如果有方法,假设Spring JTA事务管理器配置了适当的设置 . 应用程序逻辑和BPM工作流逻辑可以在单个Spring事务中执行吗?
2 回答
关于交易,请参阅Activiti Spring Transaction文件 . 如果您无法移植应用程序以使用JPA,则另一个选项是在Hibernate域上层叠外观 . Activiti允许您在Spring托管bean上调用方法,因此您可以创建外观或使用现有服务层 . 查看Activity附带的示例应用程序,了解spring集成的工作原理 .
jAPM w / JPA可以使用Spring与旧的非JPA应用程序集成 . 与jBPM的交互使用JPA,但您的应用程序将使用hibernate . 唯一的缺点是你必须处理2个不同的交易,但任何问题都可以大多减轻 .
首先启动Hibernate事务并执行所需的任何业务逻辑
通过调用JBPM API启动进程或发送事件等来启动JBPM事务 .
任何WorkItemHandler实现都需要使用会话工厂API加入外部事务
需要在每个WorkItemHandler执行结束时调用Hibernate flush(),以触发业务代码生成的大多数异常
WorkItemHandler应捕获业务代码生成的任何异常并重新抛出它,以便JBPM事务也失败