【问题标题】:Transaction mixing in Java EE ( container-managed beans method called inside bean managed method )Java EE 中的事务混合(在 bean 管理方法中调用容器管理的 bean 方法)
【发布时间】:2015-06-23 23:52:33
【问题描述】:

除了互联网上的无用教程以及规范中找不到任何相关信息。

我现在有一件事很苦恼,如果你能帮忙的话。

事情是这样的。

假设我们有两个 EJB 3.0 版本,带有关于它们的事务类型的注释,一个是 bean 管理的(让它成为 BeanManaged),第二个是容器管理的(让它成为 ContainerManaged,多么有创意)。

然后发生这种情况:

@TransactionBlahBlah(Type.BEAN)
class BeanManaged {

   @Inject
   private ContainerManaged contMngt; // here's the implicit container managed trnsactional bean ( not annotated or anything )

    void someMethod() {
         // some transaction creation and a bit of inserts and updates      
        contMngt.callingMethodThatIsGoingToCreateContainerManagedTransaction();

         // some batches that are inserts
        for( int y = 0 ; y < 100 ; y++ ) {
             for( int i = 100 ; i < 200 ; i ++ ) {
                    magicPreparedStatementOutOfNowhere.setParameter(666, "hell");
                    magicPreparedStatementOutOfNowhere.addBatch();
             }
             magicPreparedStatementOutOfNowhere.executeBatch();
        }
        transaction.commit(); // let's pretend it is not here
    }
}

在这一切的机制中发生了什么,bean 管理的事务会变成某种“孤立”的容器管理事务吗?他们混合吗?如果有的话,它们是如何交互的?一笔交易是否与另一笔交易分开

这是我的推论,但还有更多。

最后,当我尝试提交 bean 事务时,它显示“您好,先生,此事务是托管的,禁止手动提交”,SQLException 为沙漠。

然后是批次的东西,我以某种方式收集。添加100个批次后我想执行它们,但实际上只执行了最后一个,似乎addBatch根本不起作用。

欢迎任何人联系,或遇到类似的事情,每个巫师都会获得免费的 cookie。

【问题讨论】:

    标签: jdbc container-managed bean-managed-transactions


    【解决方案1】:

    您在容器管理的 bean 上指定了什么 TransactionAttribute?我建议强制。使用 Mandatory,容器不会为您启动事务。相反,它将通过确保除非事务正在进行,否则无法调用 bean 来保护您的 bean。

    This related question 也有一些有用的信息。

    【讨论】:

    • 实际上是没有的,默认情况下意味着容器管理的事务需要。我确实已经解决了我的问题,但是在了解 JDBC 的工作原理时我仍然感到困惑。未进入驱动程序的批次稍后在代码中以某种方式非常隐式地(通过删除查询)在同一事务中被删除,这就是交易,但它们甚至没有达到 JDBC 输出(它们被驱动程序截断) JDBC 驱动程序实现是否通过在之后删除时忽略插入来优化网络过热?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多