我找到了一些关于这个主题的信息,但还没有找到一个好的解决方案:
假设我有3个项目:
WS和FrontEnd都包含对Core的maven依赖。 在Core中,有一个像这样的单身SomeDao:
private static SomeDao _instance = null;
public static SomeDao getInstance() {
if (_instance != null)
return _instance;
synchronized (SomeDao.class) {
if (_instance == null)
_instance = new SomeDao();
return _instance;
}
}
应用程序托管在JBoss WildFly中,WS(java)和FrontEnd(jsp)都使用SomeDao,但由于不同的类加载器,SomeDao有两个实例。 SomeDao有自己的缓存,因此在一段时间后变得不同步(WS< - > FrontEnd)。
我的问题:
答案 0 :(得分:0)
这样的事可能适合你:
因为许多类通常使用多个类加载器 情况 - 包括servlet容器 - 你可以结束多个 单身实例,无论你多么谨慎地实施你的 单身课程。如果要确保加载相同的类加载器 你的单身人士,你必须自己指定班长;对于 例如:
private static Class getClass(String classname)
throws ClassNotFoundException {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if(classLoader == null)
classLoader = Singleton.class.getClassLoader();
return (classLoader.loadClass(classname));
}
}