我正在此 EJB 中查询数据库。结果是可迭代的(我无法更改它)。
但是由于 EJB 是 @Stateless,它将“重用”Iterable<>,并且查询结果会添加到其中。而不是成为一个"new"人!
我怎样才能避免这种情况?
我不知道 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;
}
}
最佳答案
您无法维护诸如public Iterable<VType> resultQuery;
之类的状态在无状态 session bean 中。这就是“无状态”的含义。
实际上,实际发生的情况因实现而异。有些人每次打电话都会给你一颗全新的 bean 。其他人会从池中选择一个并将其提供给您,结果每个客户端都可能获得另一个 resultQuery
的实例。 .
如果您想维护 EJB 中的状态,那么您必须使用 @Stateful session bean。
编辑:无论如何,您都不需要维护 resultQuery 字段。只需将其设置为方法实现中的本地即可。想必您在 for-each 循环中使用它,因为这就是它们的用途。
关于java - 如何为无状态 EJB 上的每次调用获取新的 Iterable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26695081/