0

请看这个片段:

@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

也许我的想法是错误的。有小费吗?

4

1 回答 1

2

我看到您在无状态 bean 中注入有状态。尽管在大多数情况下规范允许这样做,但这是一个错误。

我不知道你是否完全了解这个设计决定意味着什么。如果不是尽量避免使用这种方法。我认为这可能是您异常的原因。

于 2014-02-04T11:27:31.093 回答