群集服务器上的单例

时间:2013-11-25 15:23:02

标签: java design-patterns websphere

我有一个应用程序,它将一组复杂的规则与事务进行比较。因为规则不经常更改并且有很多事务,所以我将数据库中的规则作为singelton(RuleInfo)获取。更改规则后,我调用updateRuleInfo。

 public static void updateRuleInfo(){
      instance = new RuleInfo();    

这在我的开发和测试环境中运行良好,因为它们都在单个服务器上,但是,我们的生产环境是WebSphere集群环境(2个服务器,每个服务器有2个节点)。因此,如果更新了个人或工具的规则,则更改会显示在一个节点上,但用户可能会尝试在另一个节点上进行事务并获取旧的规则集。每次有人登录应用程序时我都尝试调用updateRuleInfo,但这并不是一直都有效。

有没有办法在所有节点上更新单例?

2 个答案:

答案 0 :(得分:3)

据我所知,你正在使用你的单身人士作为数据缓存。因此,当原始数据发生变化时,您必须告诉所有单身人士使他们的数据无效,以便他们在下次访问时自行重新加载。

实现此目的的一种方法是使用JMS发布/订阅者模式。部署JMS主题;所有单件服务都订阅该主题,并在数据源发生变化时得到通知。

请参阅http://www.javaspecialists.eu/archive/Issue052.html(“分布式单例缓存”一章)。

答案 1 :(得分:0)

群集环境中的单身人士很棘手

检查此解决方案:

Singleton Service

Hazelcast with a distributed lock

Memcache(如果数据量适合内存)

最好是在每个节点上运行单例并从唯一的后端获取数据

此致