在应用程序放在双机上时,使用静态的全局变量引发的问题?

06-04-27 imbetteroxcc
原来我们的Web 应用是放在一台机器上的,后来做了双机,起到均衡负载的作用,作了双机后,发现一些资源经常被重新创建,究其原因发现是一些全局的静态数据,虽然OOD不提倡使用这些静态的全局变量,可是项目中难免会用到。

在程序中记录:配置文件的一个实例

private static JPropertiesSetting _instance=null;

使用时通过调用如下代码:

JPropertiesSetting getPropertiesInstance(){

if(-instance!=null){_instance=new JPropertiesSetting() }

return -instance;

}

但是发现 有时候if(-instance!=null) 是不成立的,有时候是成立的,就是因为双机导致了 程序在创建实例是不一定会创建在那台机器上.

我想问一下,各位在项目处理中,遇到静态全局变量,尤其是在双机上运行时怎么处理的?谢谢

         

banq
2006-04-30 11:38
>虽然OOD不提倡使用这些静态的全局变量,可是项目中难免会用到。

这个概念就是错误的,完全可以避免使用全局变量。

这是涉及状态范围问题,全局其实就是状态的application scope,EJB这样分布式系统中是坚决杜绝静态变量的。

你现在这个问题只有重构,将全局状态变量放在application中,或者放入数据库中,或者放入一个统一的来源中(如JMS)。

通过架构上选择避免这些现实问题的发生,这其实就是架构的重要性。

banq
2006-04-30 11:40

Singleton 是邪恶的

http://www.jdon.com/jive/article.jsp?forum=91&thread=17578

猜你喜欢