Weblogic服务器集群环境的一个问题

5
我正在使用Weblogic 10g集群环境来部署我的应用程序。在我的应用程序中,我使用了一个名为 Cache.java 的类,从数据库中惰性地加载一些属性。它的工作原理如下:Cache.java 是一个单例类,其实例变量是缓存对象。例如,其中一个实例变量是 List<String> STORES_IN_CITY。当集群启动时,此缓存为空值。实际值位于数据库中。以下是该类的实现:
public class Cache
{
    private List<String> STORES_IN_CITY;

    private static final Cache cache=new Cache();

    public static Cache getCache()
    {
        return cache;
    {

    private Cache()
    {
        // private constructor to have singleton class
    }

    public List<String> getStoresInCity()
    {
        if(null==STORES_IN_CITY || STORES_IN_CITY.size()==0){
             STORES_IN_CITY=getStoresFromDatabase();
        }
        return STORES_IN_CITY;
    }
}

我的问题是,为了获取缓存STORES_IN_CITY,需要多次调用数据库。我认为这是因为集群环境的原因,因为每个服务器都有一个不同的JVM实例和缓存副本。因此,在运行时取决于哪个服务器被请求命中,就会进行数据库调用。我希望在所有服务器之间拥有单个缓存。这种可能吗?
我希望我已经详细阐述了我的问题。如果需要进一步解释,请让我知道。
谢谢, Siddharth
1个回答

4
我认为这是由于集群环境引起的,因为每个服务器都有一个不同的JVM实例和缓存副本。
这是正确的。
我想在所有服务器上使用单个缓存。这可能吗?
您可以实现一个weblogic.cluster.singleton.SingletonService(单例服务是在托管服务器上运行的服务,仅在群集的一个成员上可用)。
资源 相关问题

非常感谢!这将会有所帮助。另外,是否有通用的 API 可以在符合 J2EE 标准的所有服务器上工作? - Sid
@SidCool 不完全是这样(尽管Java EE 6引入了@Singleton EJB,但在集群中的行为未指定)。 - Pascal Thivent
JBoss缓存和Hibernate缓存怎么样?我不太确定它们的作用是什么。 - Sid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接