为什么回滚不适用于 hibernate/osgi/karaf/JPA/mysql
Why does rollback not work with hibernate/osgi/karaf/JPA/mysql
我正在使用 karaf 3.0.3
以及以下 Hibernate 包:
161 |活跃| 80 | 4.2.12.Final |休眠核心
162 |活跃| 80 | 4.2.12.Final |休眠实体管理器
172 |活跃| 80 | 4.2.12.Final |休眠 osgi
虽然我可以将完全相同的组件(JPA DAO、服务层等)部署为独立的 Spring 应用程序,但使用此设置我无法使事务回滚工作,我明白了回滚正确执行。
尝试使交易成功地与 OSGI/hibernate 一起工作时有哪些陷阱?
- 是否与跨捆绑交易有关? (我的 DAO 和服务层在不同的包中)
如果我在这里没有得到回复,我会更新更具体的信息,但首先我想看看这是否是 OSGi/hibernate/jpa 的常见问题。
在 user2007829 的评论后编辑:
DAO 扩展 Spring 的 JpaRepository
,服务层方法用 Spring 的 @Transactional
注释。我相信这个设置,自动提交应该隐式关闭,独立 spring 应用程序设置按预期工作。那是错的吗?
持久化单元 XML 文件在 OSGI 案例中应该有何不同?现在唯一的区别是 karaf 案例中的事务类型是 JTA,我有这样的声明:
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/my-datasource)</jta-data-source>
你是怎么使用hibernate的?您是否创建交易并在其中工作,或者您的查询会话是否相关?另外,您是否将 autocommit 设置为 false?
发生这种情况的可能原因有很多。例如,您的数据源可能未正确包装 XADataSource。在这种情况下,可能会出现 EntityManager 未加入事务或未作为 XA 资源登记的情况。
看看这些教程。从工作基础开始更容易:
http://www.liquid-reality.de/x/LYBk
http://www.liquid-reality.de/x/C4DK
不幸的是,这些教程是基于 blueprint 和 aries jpa,所以它并不完全 spring。您仍然应该能够使用其中的一些信息。
此外,我只能建议从 spring 切换到蓝图,因为 spring 不再支持 OSGi。
对于蓝图,有教程基于的 apache aries 或 eclipse gemini。
我正在使用 karaf 3.0.3 以及以下 Hibernate 包:
161 |活跃| 80 | 4.2.12.Final |休眠核心
162 |活跃| 80 | 4.2.12.Final |休眠实体管理器
172 |活跃| 80 | 4.2.12.Final |休眠 osgi
虽然我可以将完全相同的组件(JPA DAO、服务层等)部署为独立的 Spring 应用程序,但使用此设置我无法使事务回滚工作,我明白了回滚正确执行。
尝试使交易成功地与 OSGI/hibernate 一起工作时有哪些陷阱?
- 是否与跨捆绑交易有关? (我的 DAO 和服务层在不同的包中)
如果我在这里没有得到回复,我会更新更具体的信息,但首先我想看看这是否是 OSGi/hibernate/jpa 的常见问题。
在 user2007829 的评论后编辑:
DAO 扩展 Spring 的 JpaRepository
,服务层方法用 Spring 的 @Transactional
注释。我相信这个设置,自动提交应该隐式关闭,独立 spring 应用程序设置按预期工作。那是错的吗?
持久化单元 XML 文件在 OSGI 案例中应该有何不同?现在唯一的区别是 karaf 案例中的事务类型是 JTA,我有这样的声明:
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/my-datasource)</jta-data-source>
你是怎么使用hibernate的?您是否创建交易并在其中工作,或者您的查询会话是否相关?另外,您是否将 autocommit 设置为 false?
发生这种情况的可能原因有很多。例如,您的数据源可能未正确包装 XADataSource。在这种情况下,可能会出现 EntityManager 未加入事务或未作为 XA 资源登记的情况。
看看这些教程。从工作基础开始更容易: http://www.liquid-reality.de/x/LYBk http://www.liquid-reality.de/x/C4DK
不幸的是,这些教程是基于 blueprint 和 aries jpa,所以它并不完全 spring。您仍然应该能够使用其中的一些信息。 此外,我只能建议从 spring 切换到蓝图,因为 spring 不再支持 OSGi。
对于蓝图,有教程基于的 apache aries 或 eclipse gemini。