在EJB中缓存数据的最佳方法是什么?

时间:2011-10-19 14:59:01

标签: java-ee weblogic ehcache

我有一些所有EJB都需要的常见数据,因此我决定编写1个EJB来获取数据,而其他EJB将调用第一个EJB来获取数据。现在我想在EJB中缓存数据,这样每次要求数据时都不必返回数据库。

那么,我如何在EJB中缓存数据,并且每隔1小时左右就可以提取一份新的副本。 我可以用Ehcache做到这一点吗?或者我认为这一切都错了,而且还有更好的方法。

由于

2 个答案:

答案 0 :(得分:2)

我认为你必须使用已经完成这项工作的框架。例如:

  1. 如果您使用JPA访问数据库,则可以在persistence.xml中配置缓存,它将依赖于您的持久性提供程序(Hibernate,Toplink等)。
  2. 如果您使用的是Hibernate,它支持第三方缓存框架,如EHCache。
  3. 无论如何,您可以配置EHCache(或其他类似的)来完成这项工作。

答案 1 :(得分:1)

是的,您可以将ehcache用于此目的,但这仍然不会在EJB内“缓存”并保留在运行服务器的节点的内存中。

在无状态EJB中,您只有这个选项,而在有状态EJB中,您可以将数据保存在EJB中(但是长时间拥有有状态EJB只是愚蠢的),所以这不是一个真正的替代方案。 / p>

另一种方法是以静态方式在EJB中使用某些数据持有者。例如。创建一个保存数据或静态列表的静态映射。当然这只是每个类加载器,但只要不从类加载器中删除类,静态数据就会保留在那里。这真的是在记忆中。为了刷新,您可以创建一个石英作业,定期更新静态成员内的数据。