JSF,在Session与JPA L2缓存中存储数据

时间:2012-03-16 14:05:01

标签: java jsf caching jpa ejb

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

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

1 个答案:

答案 0 :(得分:4)

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