超過

2015-10-23 69 views
0

我發現有關此主題的一些信息,但多次戰爭(股類加載器)絕對單已暫時還沒有發現一個很好的解決方案:超過

比方說,我有3個項目:

  • 核心(JAVA)
  • 前端(jsp和餘燼)
  • WS(JAVA)

兩者WS以及前端含有一個行家d對核心的依賴。 在覈心,有一個單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(爪哇)和前端(JSP)使用SomeDao但由於,不同的類加載器,有是SomeDao的兩個實例。 SomeDao有他自己的緩存,因此在一段時間後變得不同步(WS < - > FrontEnd)。

我的問題:

  • 什麼是迫使只是一個instantation最好的方法(做父母的戰爭,融合了戰爭,使用相同的類加載器,一個Maven的解決方案,將核心在JBoss的lib中,部署核心在JBoss中是他自己的WAR),爲什麼?
  • 是否可以訪問JBoss中另一個WAR的類加載器?如果是這樣,怎麼樣?
+0

澄清:JBoss已經2場戰爭:前端和WS每個都有自己的依賴於核心 –

回答

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)); 
    } 
} 

來源:Simply Singleton - JavaWorld