jac*_*des 1 jsf cdi java-ee-6 ejb-3.1
在Web App中,需要通过每页JSF显示6个对象(表DB的行)的视图.为了进入下一个视图,将显示另一个不同的随机6个对象,依此类推......
所以我在具有思维@Singleton,查询与该表中的所有行@Schedule在给定的时间间隔工作,比方说,每隔1小时.它将有一个getCollection()方法.
然后每个访问者都会有一个@SessionScoped CDI bean,它将查询@Singleton的Collection ,然后将其随机播放以对特定用户进行随机查看.
与许多访问一样,将创建许多将同时访问getCollection()方法的CDI bean.
这是正确的吗?这种情况需要任何特定的注释吗?这样做的其他任何方式?
----- UPDATE ---
与朋友沟通后,特意Luiggi门多萨,他们告诉我,在这里最好的办法是使用的Ehcache或类似的,而不是Singleon.我认为就是这样.
你有一组网络服务器吗?在这种情况下,您需要分布式缓存,或者需要通过数据库更新状态.
另外,我只想在一个bean中找到一个简单的地图@ApplicationScoped.
我在一个解决方案中使用JPA,其中大量数据几乎总是相同的.有超过一个tomcat参与,因此bean中的纯缓存@ApplicationScoped将无法工作.要修复它,我没有二级缓存,而是缓存数据库查询的结果.这意味着每个tomcat都有自己的缓存.
对于每次登录,如果缓存中的数据不是陈旧的,则读取时间戳.否则缓存将更新.在数据库触发器的帮助下发生更改时,时间戳会更新.
@PrePersist
@PreUpdate
@PreRemove
public void newTimeStamp() {
// save a new timestamp
}
Run Code Online (Sandbox Code Playgroud)
@Singleton 不是CDI规范的一部分,所以我不会使用它.
此外,我会保留我的客户端bean @RequestScoped并重新加载6个对象@PostConstruct.这样你就可以获得每个请求的新鲜6.
或者,如果这是短暂的可能@ViewScoped(需要myfaces codi),@ConversationScoped或@ViewAccessScoped(需要myfaces codi).
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |