我正在 Java EE 中开发一个应用程序,我想使用 @Singleton
EJB 实现缓存。这会缓存引用数据,因此我只需要从数据库中检索一次,然后将其存储在内存中。
我想从实现的角度知道使用 @Singleton
EJB 这是否正确?或者你能推荐我另一种方法吗?从 OOP 的角度来看这是否正确?
并且 @Singleton
EJB 是只读的,我可能会遇到任何并发问题吗?
问候,
最佳答案
这个方法还可以,但缺点是以后增强解决方案并不简单——没有漂亮的界面。 但每个 JavaEE 服务器都可以实现,无需任何迁移工作,因为它是标准 JavaEE。
另一个解决方案有点取决于您使用的服务器。
WildFly(社区):您可以使用内部 infinispan 子系统并以 HashMap 方式使用。如果缓存增长并且您需要更多内存来缓存它,您可以简单地在本地使用它,然后将配置更改为集群(复制或分发)。
JBoss EAP(企业产品):这里您不能使用Infinispan 子系统,技术上可以,但不支持。您需要使用基于 infinispan 的附加 JBossDataGrid (JDG)。 这里你有更多的选择,与上面相同,在同一个 JVM 本地或 dist/repl 中使用缓存。或者在具有远程访问缓存的不同实例上 - 通常足够快,但您有一个远程访问 - 但 JVM 与服务器完全分离,并且可以以不同的方式启动和维护。而且服务器和缓存不会影响彼此的内存。
对于其他供应商,您也可以使用 JDG 方法(或 Infinispan 作为 OpenSource)。
关于caching - 用于缓存的 Java EE @Singleton EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38520317/