ravenix

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

          Eclipse 應用可以使用Java Web Start部署,實現Rich Client。

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

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

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

          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使用調用者的classloader加載Log接口,這是最常見的類載入方法;但是加載具體的實現類是,用的是thread context classloader。

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

          關于JCL classloader問題更詳細解釋,請看log4j的創始人之一,Ceki Gülcü寫的文章

          為了解決這個問題,我啟動了一個項目,jcleclipse -- 重寫了JCL,固定實現為把所有的log寫到eclipse自己的ILog里。這樣就不用要求用戶在某個指定的地方建目錄來存儲log。

          jcleclipse項目主頁 http://jcleclipse.sourceforge.net/
          jcleclipse項目概要 http://sourceforge.net/projects/jcleclipse


          評論

          # re: 在Eclipse Java Web Start環境中使用commons-logging  回復  更多評論   

          2006-12-07 10:21 by xy
          我直接用rcp導出,沒什么問題。關鍵commons-logging.jar只能放在一個插件里面。

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 永登县| 陕西省| 兴安盟| 昌图县| 昂仁县| 惠水县| 区。| 孟村| 绵阳市| 尼玛县| 县级市| 同德县| 宣威市| 长岛县| 兰溪市| 城市| 南江县| 太仓市| 霍林郭勒市| 宁武县| 永清县| 潼南县| 红桥区| 金门县| 周口市| 武强县| 二连浩特市| 雅安市| 花莲县| 汽车| 衡水市| 航空| 吉木萨尔县| 绥芬河市| 广丰县| 泰顺县| 扎赉特旗| 阿拉尔市| 隆子县| 通化市| 唐海县|