java - JSF,在 session 中存储数据与 JPA L2 缓存

标签 java jsf caching jpa ejb

我正在使用 SEAM 3 在 JAVA EE 6 上开发一个 Web 应用程序,在前端使用 glassfish 3 上的完整配置文件和 JSF。我在这里的主要问题是,每个登录的用户都有一个收件箱,非常像 facebook,它通过 ajax 不断更新,现在我的问题是。到目前为止,我有一个存储消息的 CDI @SessionScoped @Named bean,因此我通过将他的所有消息保存在这里来膨胀用户 session ,这些消息最终会同步。 我还可以调用 EJB 服务,该服务在每次调用 ajax 请求时为每个用户检索收件箱,并希望它将使用缓存从那里加载消息,而不是用每个 ajax 请求的查询淹没我的数据库。 我的问题是,我应该这样做吗:

在我的 cdi bean 中:

public List<Message> getInbox() {
  return inbox; //where inbox is a field that holds all the messages
}

或者这个:

public List<Message> getInbox() {
  return messagingService.findInbox(userdId); //stub to stateless EJB fetching the inbox
}

换句话说,我应该将收件箱存储在 session 中还是每次都获取它? (考虑我将使用 ajax 轮询并且每个用户每分钟有 10 个请求)

最佳答案

JPA 缓存适用于应用程序范围的受众,而HTTP session 仅适用于客户端 session 。换句话说, session 范围内的数据对于每个客户端都是重复的。它不是真正的缓存,它只是内存占用。仅将 session 范围用于真实 session 范围内的数据,例如登录用户、其首选项等。

关于java - JSF,在 session 中存储数据与 JPA L2 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9738702/

相关文章:

java - java中的助记符是什么?

css - JSF 输出文本溢出

jsf - 来自 bean 的 Primefaces 对话框只显示一次

javascript - 我如何强制客户端刷新在 Node.js 中使用 Jade 呈现的 JavaScript/CSS 文件?

java - 如何在 Java 窗口的 windowClosing 事件中关闭套接字或 I/O 流?

java - Android:按钮被禁用,仅在执行对话框功能后才起作用

java - 在 Java 1.8.0_152 中使用 Math.round(double d) 时转换为 int

javascript - Primefaces RowToggle - 如何区分行扩展和行折叠?

c# - 写入后 CPU 缓存行何时刷新到内存?

ios - 移除 UIWebView 的内部缓存