6

我想在一个产品中用 Activiti 或 jBPM-5 替换自定义 BPM 实现,该产品使用 Hibernate (No JPA) 和 Spring 来实现持久层。不幸的是,Activiti 和 jBPM5 都需要 JPA(根据他们的文档),并且不可能将所有现有的 Hibernate 实现迁移到产品中的 JPA。

  1. 有没有办法用 Spring 3 配置 JPA 2.0(JPA 提供者是 Hibernate)而不将 Hibernate 实现迁移到 JPA(即保留 .hbm 文件)?

注意:我知道应用程序将不符合 JPA,并且不能使用另一个 JPA 提供程序。

  1. 如果有办法,假设 Spring JTA 事务管理器配置了正确的设置。应用程序逻辑和 BPM 工作流逻辑可以在单个 Spring 事务中执行吗?
4

2 回答 2

1

关于事务,请参阅Activiti Spring Transaction Docs。如果您无法移植您的应用程序以使用 JPA,另一种选择是在您的 Hibernate 域上分层一个外观。Activiti 允许您调用 spring 托管 bean 上的方法,因此您可以创建外观或利用现有服务层。查看 Activity 附带的示例应用程序,了解 spring 集成是如何工作的。

于 2011-02-19T04:33:00.900 回答
0

jBPM w/JPA 可以使用 Spring 与旧的非 JPA 应用程序集成。与 jBPM 的交互使用 JPA,但您的应用程序将使用休眠。唯一的缺点是您必须处理 2 个不同的事务,但大多数问题都可以得到缓解。

在此处输入图像描述

  1. 首先启动您的 Hibernate 事务并执行您想要的任何业务逻辑

  2. 通过调用 JBPM API 启动流程或发送事件等来启动 JBPM 事务。

  3. 任何 WorkItemHandler 实现都需要使用会话工厂 API 加入外部事务

  4. 需要在每次 WorkItemHandler 执行结束时调用 Hibernate flush() 才能触发业务代码产生的大多数异常

  5. WorkItemHandler 应该捕获业务代码生成的任何异常并重新抛出它,以便 JBPM 事务也失败

于 2016-01-17T17:16:28.957 回答