【发布时间】:2019-12-20 16:36:07
【问题描述】:
我正在 Payara 5 服务器上开发 JEE8 应用程序。我在我的一个无状态 EJB 中有一个方法,我只调用一次(从 JSF 页面),但在服务器端它被调用多次执行。我也在 Payara5.192、Payara 5.193 和 Glassfish 5 上尝试过这种方法。但我一直遇到同样的问题。下面的代码 -
@Override
public List<Forum> getForums(int startIndex, int size) {
TypedQuery<Forum> tQ=em.createQuery("select f from Forum f", Forum.class);
tQ.setFirstResult(startIndex);
tQ.setMaxResults(size);
List<Forum> toReturn=tQ.getResultList();
LOGGER.info("Forums extracted "+toReturn.size());
return toReturn;
}
如果我从索引 0 开始分页,结果大小为 5,LOGGER.info 会生成以下日志,看起来很荒谬!
Info: Forums extracted 5
Info: Forums extracted 5
Info: Forums extracted 5
Info: Forums extracted 5
Info: Forums extracted 5
Info: Forums extracted 5
此外,这个循环的次数也不是固定的。它可以执行 15-30 次。而我显然只期望一条日志消息。
【问题讨论】:
-
还记录传入参数、startIndex 和大小。是同一个电话吗?
-
@pirho,是的,它们确实是相同的参数。事实上,我在问题陈述中确实提到了这一点——“如果我从索引 0 开始分页,结果大小为 5”。感谢您对此进行调查。
-
是的,我注意到了这一点,但实际上我想知道的是,如果唯一的调用 0/5 会以某种方式生成对 5/5 和 10/5 等的调用。 ..但显然事实并非如此。
-
您能否提供更多上下文信息,例如 JSF 视图、支持 bean 和您的无状态 EJB?