【发布时间】: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