【问题标题】:Why does rollback not work with hibernate/osgi/karaf/JPA/mysql为什么回滚不适用于 hibernate/osgi/karaf/JPA/mysql
【发布时间】:2015-06-13 17:18:59
【问题描述】:

我正在使用 karaf 3.0.3 以及以下 Hibernate 捆绑包:

161 |活跃 | 80 | 4.2.12.决赛 |休眠核心
162 |活跃 | 80 | 4.2.12.决赛 |休眠实体管理器
172 |活跃 | 80 | 4.2.12.决赛 |休眠-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>

【问题讨论】:

    标签: spring hibernate osgi karaf


    【解决方案1】:

    发生这种情况的可能原因有很多。例如,您的数据源可能无法正确包装 XADataSource。在这种情况下,可能会出现 EntityManager 未加入事务或未作为 XA 资源登记的情况。

    看看这些教程。从工作基础开始更容易: http://www.liquid-reality.de/x/LYBk http://www.liquid-reality.de/x/C4DK

    不幸的是,这些教程是基于 blueprint 和 aries jpa 的,所以它并不完全是 spring。您仍然应该能够使用其中的一些信息。 此外,我只能建议从 spring 切换到 blueprint,因为 spring 不再支持 OSGi。

    对于蓝图,有教程基于的 apache aries 或 eclipse Gemini。

    【讨论】:

    • 谢谢,您的评论和教程非常有用。我根据您的教程创建了数据源,并且我的应用程序的其余部分保持不变,并且我能够证明事务回滚正在工作。我怀疑“XA”是您怀疑的关键。即使我只有一个数据源并且应用程序在一个 JVM 中运行,您能否评论一下为什么我需要 XA 事务?是因为我的交易跨越了几个捆绑包吗?
    • 我不确定 spring 在内部是如何工作的。通常在 jpa 中,您可以使用事务类型 RESOURCE_LOCAL 或 JTA。在容器中运行时,建议使用需要 XADataSource 的 JTA。因此,您可能将 spring 设置为在 JTA 模式下运行。顺便提一句。 JTA 在容器中总是一个好主意,它没有真正的性能劣势。
    【解决方案2】:

    你如何使用休眠?您是创建一个事务并在其中工作还是您的查询会话相关?另外,您是否将自动提交设置为 false?

    【讨论】:

    • DAO 扩展了 Spring 的 JpaRepository,服务层方法使用 Spring 的 @Transactional 进行注解。我相信在这个设置中,自动提交应该被隐式关闭,并且独立的 spring 应用程序设置按预期工作。那是错的吗?在 OSGI 案例中,持久性单元 XML 文件应该有何不同?现在唯一的区别是在 karaf 情况下事务类型是 JTA,我有这样的声明: osgi:service/javax.sql.DataSource/(osgi.jndi.service.名称=jdbc/payliquid-datasource)
    猜你喜欢
    • 2015-04-19
    • 2012-04-14
    • 2015-07-08
    • 2011-02-19
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 2015-07-20
    相关资源
    最近更新 更多