gpt4 book ai didi

jakarta-ee - 如何在ejb 3.0中实现缓存?

转载 作者:行者123 更新时间:2023-12-03 01:17:22 25 4
gpt4 key购买 nike

我有一位客户陷入 EJB 3.0 环境中。没有@Singleton,没有bean管理的并发:-(

考虑到ejb规范禁止线程管理和同步,如何实现缓存?本质上,我想要一个非同步对象缓存来执行一些昂贵的操作。

最佳答案

EJB 3.0 规范第 21.1.2 章中规定了使用静态字段和同步的限制。它还解释了原因。

• An enterprise bean must not use read/write static fields. Using read-only static fields is allowed. Therefore, it is recommended that all static fields in the enterprise bean class be declared as final.

This rule is required to ensure consistent runtime semantics because while some EJB containers may use a single JVM to execute all enterprise bean’s instances, others may distribute the instances across multiple JVMs.

• An enterprise bean must not use thread synchronization primitives to synchronize execution of multiple instances.

This is for the same reason as above. Synchronization would not work if the EJB container distributed enterprise bean’s instances across multiple JVMs.

如果您通过单例 POJO 实现缓存,并且 EJB 容器将 EJB 实例分布在多个 JVM 上(例如在集群环境中),那么您可能会面临每个 JVM 中实际上存在多个缓存实例的风险。

所以这取决于,

  • 如果应用程序未部署在集群环境中,您可以这样做。据我所知,WebLogic 和 GlassFish 在一个 JVM 中运行一个服务器实例。
  • 如果不限制数据一致性,您也可以这样做。通常在谈论“缓存”时是允许的。

如果它不适合您,您可能应该考虑在 EJB 容器之外缓存数据,例如放入 Redis 或 Hazelcast。

关于jakarta-ee - 如何在ejb 3.0中实现缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20782345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com