如何从weblogic集群环境中获得一个唯一对象

我需要在服务器上启动一个对象,当客户端applet多次打开服务器端的连接时始终跟一个对象进行交互,但是现在的情况是因为集群的问题导致出现了多个对象,这样就出现了数据不同步的问题。我该怎么实现这个功能?

补充说明一下,是在服务器端做了一个servlet,专门负责从客户端接受数据,servlet里面启动了一个线程对象,然后将线程对象放到了servletconfig里面,实际运行的时候发现很多时候无法从servletconfig里面取得放进去得对象。

放置对象得代码


request.getSession().getServletContext()


1。由于是群集,所以你每次请求到的servlet肯定不会是同一台服务器,所以它记录的时候肯定是先记录到某一台服务器上
2。weblogic群集有一个session复制的过程,但在这个复制的间隙中读取
保存的session内容肯定没法子同步的

最好的方法是是使用JMS,或者记录到DB中

jms如何使用能不能详细讲解一下,也就是说我无法从服务器这个层次上考虑获得全局对象。

我昨天本来想不行就把信息写到文件中,然后每次都作个同步去读文件,写文件。

但是这样会不会效率太低了,还有更好的办法吗

使用JSM,其实就是建立一个消息队列,另外写一个消息消费者。你前端所有的数据都可以写入这个消息队列中(包含对象),而后在消费者中读取这些消息并处理。这个消费者一般可以是Message Bean,而且你最好只部署在一台服务器上。至于具体如何部署,这个和你使用的平台有关系,有些专业的比如WEBLOGIC等,本身就带这方面的实现,配置也很简单(可以在控制台中直接配置就可以了)。如果是其他开源产品,因为工作性质关系,没用过。不知道哪位大侠可以协助说明一下

如果一定要在集群环境获得一个"唯一对象,只有两个方式:
1. 通过JNDI获得.
2. 通过数据库获得.

如果上述方式不能完成,只有更改我们的设计,也就是说,你要获得一个唯一对象的设计目的可能是错误的,需要更正,可以通过其他设计方式实现你的需求.这也是为什么说单态模式是邪恶的一个原因.

根据我的实践,基本都可以通过其他方式实现,除非是根本结构问题,如需要使用P2P结构等.

JMS也是一种变通方式,具体如何使用要看你的需求.

非常感谢banq的回复,偶现在又碰到新的问题了。


看了回复后,决定采用其他方式解决,现在有点不明白,比如我在一个类里面定义一个同步方法对一个服务器端的文件进行写操作,我在客户端启了几个线程同时连接服务器端调用该同步方法,我想问一下,在集群的环境下,是否能够正确的执行同步方法?

会不会只能同步某一个weblogic服务器上的对该文件的访问?