我在这个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;
}
}
答案 0 :(得分:1)
您无法在无状态会话Bean中维护public Iterable<VType> resultQuery;
等状态。这就是&#34;无国籍的&#34;装置
在实践中,实际发生的事情因实施而异。有些人每次打电话都会给你一个全新的豆子。其他人会从池中选择一个并给你那个,结果是每个客户可能得到resultQuery
的另一个实例。
如果要在EJB中维护状态,则必须使用@Stateful会话bean。
编辑:您无论如何都不需要维护resultQuery字段。只需在方法实现中将其设为本地。大概是你在for-each循环中使用它,因为这是他们的目的。