为什么回滚不适用于hibernate / osgi / karaf / JPA / mysql

时间:2015-04-08 16:11:55

标签: spring hibernate osgi karaf

我正在使用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成功运行事务时有什么问题?

  • 是否与跨包交易有关? (我的DAO和服务层位于不同的包中)

如果我在这里没有回复,我会更新更具体的信息,但首先我想看看这是否是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>

2 个答案:

答案 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?