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

标签 java ejb stateless-session-bean

我正在此 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/

相关文章:

java - 连接重置错误 - 运行 mvn clean install 来运行功能时

java - 在不知道类型的情况下如何使用类的方法?

java - 在 wildfly-9.0.2.Final 中未找到类型为 'javax.sql.DataSource' 的接口(interface)的 EJB

java - 为什么 Powermockito 调用我的模拟方法?

java - 我无法在以独立模式配置的 hadoop 上执行 map-reduce 作业

java - 交易回滚和网络服务

java - 如何在实体持久化或更新时自动更新实体

java - EJB 2.x "reentrant method call detected"异常的原因是什么?如何解决?

java - 更改数据库中用户的密码

dependency-injection - WELD-001408 注入(inject) EntityManager 时依赖关系不满足