除了互联网上的无用教程和规范之外,找不到任何相关信息。
我现在正在努力解决一件事,如果你能帮忙的话。
事情就是这样。
假设我们有两个 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 根本不起作用。
任何人都可以联系,或者遇到类似的事情是受欢迎的,每个巫师都会得到免费的饼干。