使用Hibernate + Bitronix的未提交事务

时间:2015-06-17 17:15:32

标签: hibernate transactions bitronix

大家好:我遇到使用Hibernate + Bitronix提交事务的问题,其中对persist的调用发生在另一个jar中。例如,如果我有jarA和jarB。 JarA开始一个事务并在jarB中调用一个方法。 jarB中的方法持久化其数据。最后jarA提交了交易。但是,由于Bitronix抛出一个说没有事务的异常,因此提交不会通过。

一些相关代码:

void doStuffInJarA() {
    BitronixTransactionManager btm = TransactionManagerServices.getTransactionManager();
    btm.begin();
    callMethodInJarB();
    btm.commit();
}
...
void callMethodInJarB() {
    MyDAO mydao = new MyDAO();
    mydao.persist(myObject);
}

1 个答案:

答案 0 :(得分:0)

这通常是因为您意外地实例化了两个(或更多)事务管理器。

您在一个事务管理器中开始了事务,并尝试在另一个事务管理器下执行它。确定哪个事务管理器是好的,并从项目中删除另一个事务管理器(代码/弹簧上下文/等)。

有时会发生这种情况是因为某些抽象库使用类加载器,因此调试起来很棘手。