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