我希望能够在登录页面上显示新闻。(例如,服务器维护等造成的停机)
新闻将从数据库中加载。但是,由于消息很少发生变化,所以它应该是缓存的,而不是每次加载应用程序时加载的。
这里是我被塞住的地方:,我如何缓存新闻?此外,我希望每10分钟从DB加载新闻,从缓存加载其他消息。这个是可能的吗?
或者你可以再建议我一个更好的灵魂。
在此之前,非常感谢您。
莱斯提奥
发布于 2013-07-11 11:15:18
如果您想跨页面存储数据,可以使用@SessionScoped bean来保存数据。
您可以使用Cookies在多个会话之间存储数据。
就每10分钟请求数据库而言.
通常每10分钟发送一次ajax调用,而可以使用PRIEMFACE的PRIME PUSH技术[链接]。
它是基于反向ajax技术构建的,在该技术中,当数据更新时,反向ajax调用将被发送到从托管bean更新JSF组件。
您可以同时使用数据库触发器。
编辑:正如Luiggi在下面的注释中所建议的那样,使用@ApplicationScope将修复这个问题。
发布于 2013-07-16 13:23:18
最后,我决定通过EJBTimerService进行刷新循环。
这是我的解决办法:
@ApplicationScoped Bean (NewsController)
@ApplicationScoped
public class NewsController extends BaseController implements Serializable {
private static final long serialVersionUID = 1L;
@PersistenceContext
protected EntityManager em;
private List<News> newsList;
public NewsController() {
}
@PostConstruct
public void init() throws ExecutionException {
getAvailableNews();
}
public void getAvailableNews() {
if (newsList == null) {
newsList = new LinkedList<News>();
Query q = em.createNativeQuery(
"SELECT * FROM news WHERE sysdate BETWEEN ab AND bis+1",
News.class);
@SuppressWarnings("unchecked")
List<News> result = q.getResultList();
for (News n : result)
newsList.add(n);
}
}
public List<News> getNewsList() {
return newsList;
}
public void setNewsList(List<News> newsList) {
this.newsList = newsList;
}
}另外,我还添加了一个@无状态Bean (NewsScheduler),它在NewsController中每10分钟调用一次my getAvailableNews():
@Stateless
public class NewsScheduler {
@Inject
NewsController newsController;
@Schedule(hour = "*", minute = "*/5")
public void reload() {
System.out.println("---------------- Laden der News aus der DB --------------");
newsController.setNewsList(null);
newsController.getAvailableNews();
}
}https://stackoverflow.com/questions/17591368
复制相似问题