ravenix

          魚如何控制自己的呼吸
          posts - 7, comments - 3, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          2005年9月9日

          Eclipse 應(yīng)用可以使用Java Web Start部署,實(shí)現(xiàn)Rich Client。

          這要求把所有的插件打包成獨(dú)立的jar,并且要簽署它。

          如果要用到別人開發(fā)的java庫,就要利用eclipse提供的Create a plug-in project from existing JAR archives 把它做成 eclipse plugin。

          Apache Jakarta有許多項(xiàng)目使用了commons-logging來寫log。如果用到了這樣的項(xiàng)目,你也需要把commons-logging做成一個(gè) plugin。但是commons-logging在使用eclispe plugin包裝并使用Java Web Start部署時(shí),它會(huì)拋出異常

          LogConfigurationException : Invalid class loader hierarchy. You have more than one version of org.apache.commons.logging.Log visible, which is not allowed.

          究其原因,是JCL(Jakarta Commons Logging)中一直存在的classloader問題。

          簡單來說,JCL使用調(diào)用者的classloader加載Log接口,這是最常見的類載入方法;但是加載具體的實(shí)現(xiàn)類是,用的是thread context classloader。

          通常情況下,這兩個(gè)classloader是同一個(gè)。但是Eclipse有一套插件類加載機(jī)制,每個(gè)插件使用不同的 classloader。在這個(gè)例子中,加載Log接口是EclipseClassLoader,加載Log實(shí)現(xiàn)類的thread context classloader是JNLPClassLoader,它們并不相同。問題就來了,用不同classloader加載的類被認(rèn)為是無關(guān)的,所以JCL 的實(shí)現(xiàn)類不能賦給Log接口類,就會(huì)拋出那個(gè)異常。

          關(guān)于JCL classloader問題更詳細(xì)解釋,請(qǐng)看log4j的創(chuàng)始人之一,Ceki Gülcü寫的文章

          為了解決這個(gè)問題,我啟動(dòng)了一個(gè)項(xiàng)目,jcleclipse -- 重寫了JCL,固定實(shí)現(xiàn)為把所有的log寫到eclipse自己的ILog里。這樣就不用要求用戶在某個(gè)指定的地方建目錄來存儲(chǔ)log。

          jcleclipse項(xiàng)目主頁 http://jcleclipse.sourceforge.net/
          jcleclipse項(xiàng)目概要 http://sourceforge.net/projects/jcleclipse

          posted @ 2005-09-09 14:30 ravenix 閱讀(1262) | 評(píng)論 (1)編輯 收藏

          主站蜘蛛池模板: 湖北省| 武冈市| 安仁县| 云南省| 柞水县| 北流市| 旬邑县| 尼玛县| 昭平县| 响水县| 敦煌市| 荆州市| 石景山区| 甘泉县| 习水县| 洛阳市| 加查县| 淳安县| 安康市| 藁城市| 荣成市| 海口市| 顺义区| 远安县| 石渠县| 瑞安市| 新田县| 龙门县| 历史| 宁武县| 海盐县| 雷州市| 桦南县| 上杭县| 江阴市| 苏尼特左旗| 湄潭县| 高安市| 龙川县| 西乌珠穆沁旗| 修水县|