我正在使用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
答案 0 :(得分:4)
(...)我认为这是因为集群环境,对于每个服务器,都有一个不同的JVM实例和一个缓存副本。
这是正确的。
我希望在服务器之间有一个缓存。这可能吗?
您可以实现weblogic.cluster.singleton.SingletonService
(单件服务是在托管服务器上运行的服务,一次只能在群集的一个成员上使用)。