如何为无状态EJB上的每次调用获取新的Iterable

时间:2014-11-02 01:23:11

标签: java ejb stateless-session-bean

我在这个EJB中查询数据库。结果是可以接受的(我无法改变)。

但是,由于EJB是@Stateless,它将重新使用" Iterable<>,并且查询结果只是添加到它。而不是一个新的"一个!

我怎么能避免这种情况?

我不知道是否有"修复"在Iterable上还是要用SessionBean做些什么?这是一个糟糕的组合吗?

@Stateless
public class StartSessionBean implements Serializable, StartSessionBeanLocal {
...
public Iterable<VType> resultQuery;
...
    public List<VType> queryThis(String this) {
...
        resultQuery = (Iterable<Type>) "query DB";
        //Do Things here
        return something;
    }
}     

1 个答案:

答案 0 :(得分:1)

您无法在无状态会话Bean中维护public Iterable<VType> resultQuery;等状态。这就是&#34;无国籍的&#34;装置

在实践中,实际发生的事情因实施而异。有些人每次打电话都会给你一个全新的豆子。其他人会从池中选择一个并给你那个,结果是每个客户可能得到resultQuery的另一个实例。

如果要在EJB中维护状态,则必须使用@Stateful会话bean。

编辑:您无论如何都不需要维护resultQuery字段。只需在方法实现中将其设为本地。大概是你在for-each循环中使用它,因为这是他们的目的。