java - 如何通知 Glassfish 3.1 集群中的所有(相同)单例 bean ?

标签 java jakarta-ee synchronization glassfish cluster-computing

我有一个在 Glassfish 3.1.2 集群上运行的 JEE6 应用程序。 一个@Singleton Bean 包含某种(readolny)缓存。用户可以按下 GUI 中的按钮以使用数据库中的(更新的)内容更新缓存。

这在非集群环境中运行良好,但现在我们需要切换到集群。

所以我面临的问题是,当用户按下更新按钮时,只有来自他的服务器节点的缓存单例被更新。我的问题是,让其他单例(在其他节点中)也更新那里的数据的最简单方法是什么?

我知道问题 Singleton in Cluster environment ,但我的问题是针对 Glassfish 的(因为我希望有一些内置支持),另一个问题是用“Websphere”标记的。我的问题是关于 JEE6,另一个比 JEE6 更老。

最佳答案

GlassFish High Availability Administration Guide明确指出:

Restrictions

When configuring session persistence and failover, note the following restrictions:

  • When a session fails over, any references to open files or network connections are lost. Applications must be coded with this restriction in mind.

  • EJB Singletons are created for each server instance in a cluster, and not once per cluster.

另一个建议是使用 JMS 并按下 GUI 按钮向 JMS 主题发布消息。所有 Singleton bean 都可以订阅该主题,并且接收消息将导致它们几乎同时从数据库中更新。这种方法的好处是,它利用了 Glassfish 的更多内置功能,而不必引入另一个框架。

无论如何,从单实例迁移到多实例从来都不是真正的无缝更改,而且会带来一些困难。可能需要对应用程序进行更改,以确保所有相关状态( session 状态除外)都正确共享给集群中的所有实例。

关于java - 如何通知 Glassfish 3.1 集群中的所有(相同)单例 bean ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11070116/

相关文章:

postgresql - 这个互斥实现在 PostgreSQL 中有意义吗?

java - 如何将数据库服务器的更新反射(reflect)到网站和Android应用程序(即时)?

java - 查找包含可变数量元素的可变数量数组的排列的有效方法

java - "Class"类对象上的锁定实现以进行同步

Java将匹配模式的文件从多个文件夹复制到另一个文件夹

WAR 文件的 Java 类路径补丁概念

excel - 动态文件下载而不在服务器中保存文件

hibernate - EJB 3 或 Hibernate 3

java - 重绘不会更新屏幕

java - 无法在 iFrame 中找到元素