首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓存新闻重新加载10兆位周期

缓存新闻重新加载10兆位周期
EN

Stack Overflow用户
提问于 2013-07-11 10:47:06
回答 2查看 67关注 0票数 1

我希望能够在登录页面上显示新闻。(例如,服务器维护等造成的停机)

新闻将从数据库中加载。但是,由于消息很少发生变化,所以它应该是缓存的,而不是每次加载应用程序时加载的。

这里是我被塞住的地方:,我如何缓存新闻?此外,我希望每10分钟从DB加载新闻,从缓存加载其他消息。这个是可能的吗?

或者你可以再建议我一个更好的灵魂。

在此之前,非常感谢您。

莱斯提奥

EN

回答 2

Stack Overflow用户

发布于 2013-07-11 11:15:18

如果您想跨页面存储数据,可以使用@SessionScoped bean来保存数据。

您可以使用Cookies在多个会话之间存储数据。

就每10分钟请求数据库而言.

通常每10分钟发送一次ajax调用,而可以使用PRIEMFACE的PRIME PUSH技术[链接]

它是基于反向ajax技术构建的,在该技术中,当数据更新时,反向ajax调用将被发送到从托管bean更新JSF组件。

您可以同时使用数据库触发器。

编辑:正如Luiggi在下面的注释中所建议的那样,使用@ApplicationScope将修复这个问题。

票数 0
EN

Stack Overflow用户

发布于 2013-07-16 13:23:18

最后,我决定通过EJBTimerService进行刷新循环。

这是我的解决办法:

@ApplicationScoped Bean (NewsController)

代码语言:javascript
复制
@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():

代码语言:javascript
复制
@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();
}

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17591368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档