【问题标题】:What is the best way to cache data in an EJB?在 EJB 中缓存数据的最佳方式是什么?
【发布时间】:2011-10-19 14:59:00
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 您的 Weblogic 版本是否兼容 Java EE 6?如果是这样,可能有一个更简单的解决方案,没有 ehcache 或石英或其他东西。
  • @BalusC 目前没有支持 JAVA EE 6 的 Weblogic Server
  • @Ernesto:好的,谢谢。我对 Weblogic 不太熟悉 :) 顺便说一句,“Java”不是首字母缩写词。

标签: jakarta-ee weblogic ehcache


【解决方案1】:

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

  1. 如果您使用 JPA 访问数据库,您可以在 persistence.xml 中配置缓存,它取决于您的 Persistence Provider(Hibernate、Toplink 等)。
  2. 如果您使用的是 Hibernate,它支持第三方缓存框架,例如 EHCache。
  3. 无论如何,您都可以配置 EHCache(或其他类似的)来完成这项工作。

【讨论】:

    【解决方案2】:

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

    在无状态 EJB 中,您只有这个选项,而在有状态 EJB 中,您可以将数据保存在 EJB 中(但有状态 EJB 这么长时间是愚蠢的),所以这不是一个真正的选择。

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

    【讨论】:

    • 我一开始在我的 EJB 中有一个枚举列表,但由于我在数据库中有这些数据,我不想在两个地方管理它。
    • 好的。但是您可以一次将枚举加载到 ejb 中(如果它们不更改)?
    猜你喜欢
    • 2021-05-17
    • 2012-09-28
    • 2021-10-22
    • 2010-09-05
    • 2012-07-31
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多