Jdbc JavaEE中的事务混合(称为内部bean管理方法的容器管理bean方法)

Jdbc JavaEE中的事务混合(称为内部bean管理方法的容器管理bean方法),jdbc,container-managed,bean-managed-transactions,Jdbc,Container Managed,Bean Managed Transactions,在互联网上以及说明书中,除了无用的教程之外,找不到任何相关信息 如果你能帮忙的话,我现在有一件事要处理 事情是这样的 假设我们有两个EJB版本3.0,其中有关于其事务类型的注释,一个是bean管理的(让它成为BeanManaged),第二个是容器管理的(让它成为ContainerManaged,多么有创意) 然后发生这种情况: @TransactionBlahBlah(Type.BEAN) class BeanManaged { @Inject private ContainerM

在互联网上以及说明书中,除了无用的教程之外,找不到任何相关信息

如果你能帮忙的话,我现在有一件事要处理

事情是这样的

假设我们有两个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
    }
}
@TransactionBlahBlah(Type.BEAN)
类BeanManaged{
@注入
private ContainerManaged contMngt;//这里是隐式容器管理的trnsAction bean(未注释或任何内容)
void方法(){
//一些事务创建和一些插入和更新
继续调用将要创建ContainerManagedTransaction()的方法;
//某些批次是插入的
对于(int y=0;y<100;y++){
对于(int i=100;i<200;i++){
设置参数(666,“地狱”);
magicpreparedstatementofNowhere.addBatch();
}
magicPreparedStatementOutOfNowhere.executeBatch();
}
transaction.commit();//让我们假设它不在这里
}
}
在这一切的机制中发生了什么,bean管理的事务是否成为某种“孤立的”容器管理的事务?他们混在一起吗?如果有的话,他们是如何互动的?一个事务与另一个事务分开吗

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

最后,当我尝试提交bean事务时,它会说“您好,先生,这个事务是被管理的,禁止手动提交”,SQLException为desert

然后是批量的东西,我不知怎么收集的。添加了100个批次后,我想执行它们,但实际上只执行最后一个,看起来addBatch根本不起作用


任何人都可以联系,或者遇到类似的事情,每个向导都可以得到免费的cookies。

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


也有一些有用的信息。

实际上没有,默认情况下,这意味着容器管理的事务是必需的。我已经解决了我的问题,但是当我理解JDBC是如何工作的时候,我仍然感到困惑。没有进入驱动程序的批处理在同一事务中被删除,稍后在代码中以某种方式非常隐式地(通过删除查询)删除,这就是该事务,但它们甚至没有到达JDBC输出(它们被驱动程序截断)JDBC驱动程序实现是否通过在删除之后忽略插入来优化网络过热?