【发布时间】:2014-02-04 10:26:04
【问题描述】:
请看这个sn-p:
@Stateless
public class A {
@EJB
B b; // B is stateful EJB
b.init(); // initialize Sets and List that are used in doSthInB(C c)
public void doSthInA(){
for(C c){
b.doSthInB(c); // doSthInB use REQUIRES_NEW transaction type
}
}
}
我的目的是处理 C 类型对象的集合。doSthInB 方法修改实体,结果应该在方法调用结束时持久化(这就是我使用 REQUIRES_NEW 的原因)。 如果在处理输入集合中的某些元素期间发生错误,则不应仅保留此操作,应将其记录下来,并且不应停止其他元素的处理。
我在处理过程中得到的是:javax.ejb.EJBException: java.lang.IllegalStateException: Bean is associated with a different unfinished transaction
也许我的想法是错误的。有什么建议吗?
【问题讨论】:
-
好吧,我将 Stateful 更改为 Stateless。现在我得到了有趣的异常 NPE。似乎对于我在 b.init() 中初始化的某些迭代集合没有实例化。我在 for 循环中迭代了数百个对象,并且我认为 ejb 容器使用多个 ejb 来处理对 b.doSthInB(c) 的每一次调用。但只有第一个 ejb 调用 b.init() ,这就是我得到 NPE 的原因。我说的对吗?
标签: java transactions ejb stateless-session-bean stateful-session-bean