Java, Only Java!

          統(tǒng)計(jì)

          留言簿(20)

          積分與排名

          好友空間

          文檔技巧

          閱讀排行榜

          評(píng)論排行榜

          如何配置Apusic應(yīng)用服務(wù)器的類(lèi)裝載結(jié)構(gòu),實(shí)現(xiàn)jar包的類(lèi),訪(fǎng)問(wèn)classes中的類(lèi)(轉(zhuǎn)自王東明的文檔)

          作者:王東明上次修改時(shí)間: 2007-11-09 11:01

          Apusic應(yīng)用服務(wù)器目前在默認(rèn)情況下是三層類(lèi)裝在體系(具體介紹可參考知識(shí)庫(kù)中的相關(guān)文檔)。但是,默認(rèn)情況下,因?yàn)橛脩?hù)的應(yīng)用部署并不是一個(gè)理想狀況,他的一個(gè)相同的類(lèi),經(jīng)常部署到j(luò)ar包中,同時(shí)又在classes中存在,因此三層類(lèi)裝載體系下,經(jīng)常出現(xiàn)ClassNotFound的情況。

          典型的情況是:在很多的用戶(hù)代碼中,由于用戶(hù)代碼的設(shè)計(jì)考量不完善,經(jīng)常出現(xiàn)部署在WEB-INF/lib目錄下jar中的類(lèi)使用自身 ClassLoader裝載WEB-INF/classes下的類(lèi),此時(shí)容出現(xiàn)ClassNotFound異常,而這種情況在很多客戶(hù)應(yīng)用中是相當(dāng)普遍的。

          但是,這種情況,在其他的應(yīng)用服務(wù)器中卻很少出現(xiàn)異常,據(jù)此,我們有一個(gè)參數(shù)可以對(duì)Apusic應(yīng)用服務(wù)器的類(lèi)裝在體系進(jìn)行設(shè)置,這樣,可以很大程度上避免出現(xiàn)ClassNotFound的問(wèn)題:

          ServletClassLoader本身不再持有委派ClassLoader的實(shí)例,而持有一個(gè)delegate實(shí)例。所有行為都委派給delegate去完成,delegate有三種:
          ????SeparatedLoaderDelegate 分jsp、WEB-INF/classes和WEB-INF/lib三個(gè)層次的類(lèi)裝載體系
          ????IntegrateLoaderDelegate 分jsp和其他的兩個(gè)層次的類(lèi)裝載體系
          ????SimpleLoaderDelegate 不分層次,所有類(lèi)由一個(gè)ClassLoader裝載


          有兩種方式可以配置delegate的類(lèi)型。
          ????1、在web.xml中增加ContextInitParameter
          ????<context-param>
          ????????<description>
          ????????</description>
          ????????<param-name>com.apusic.web.ServletClassLoaderDelegate</param-name>
          ????????<param-value>
          ????????????com.apusic.servlet.http.IntegrateLoaderDelegate</param-value>
          ????</context-param>
          ????這樣的配置有效范圍只有當(dāng)前應(yīng)用

          ????2、通過(guò)VM參數(shù)指定 -Dcom.apusic.web.ServletClassLoaderDelegate=com.apusic.servlet.http.IntegrateLoaderDelegate
          ????這個(gè)配置,所有的應(yīng)用都適用
          ????兩種都指定的情況下,以web.xml中定義的為準(zhǔn)
          ????沒(méi)有任何配置,使用默認(rèn)的SeparatedLoaderDelegate


          注意,直到本篇文檔發(fā)稿為止(20071030),對(duì)于資源文件的處理在兩層和一層結(jié)構(gòu)下,如果在jar包和classes都存在該文件的情況下,先讀到是jar包中的資源文件。對(duì)于class則是先讀到的是classes中的。



          [楊威補(bǔ)充]:

          一個(gè)錯(cuò)誤的重現(xiàn):在開(kāi)源項(xiàng)目tobago中,訪(fǎng)問(wèn)http://localhost:6888/tobago/faces/overview/toolbar.jsp時(shí)會(huì)報(bào)java.lang.ClassNotFoundException: org.apache.myfaces.tobago.example.demo.actionlistener.SimpleTabChangeListener錯(cuò)誤。
          錯(cuò)誤原因:jar包中的TabChangeListenerTag類(lèi)調(diào)用createTabChangeListener時(shí),要訪(fǎng)問(wèn)classes目錄下的SimpleTabChangeListener類(lèi)。由于類(lèi)裝載機(jī)制,部署在WEB-INF/lib目錄下jar中的類(lèi)使用自身ClassLoader 裝載WEB-INF/classes下的類(lèi)會(huì)出現(xiàn)ClassNotFound。

          解決方法的補(bǔ)充:
          Apusic4.x startapusic中添加啟動(dòng)參數(shù):
          -Dcom.apusic.web.ServletClassLoaderDelegate=com.apusic.servlet.http.IntegrateLoaderDelegate

          Apusic5.1 startapusic中添加啟動(dòng)參數(shù):
          -Dcom.apusic.web.ServletClassLoaderDelegate=com.apusic.web.container.IntegrateLoaderDelegate

          posted on 2008-03-04 16:52 zYx.Tom 閱讀(1215) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: 如何配置Apusic應(yīng)用服務(wù)器的類(lèi)裝載結(jié)構(gòu),實(shí)現(xiàn)jar包的類(lèi),訪(fǎng)問(wèn)classes中的類(lèi)(轉(zhuǎn)自王東明的文檔) 2008-03-10 11:52 caven

          我首次用apusic,但在啟動(dòng)apusic的時(shí)候總是不成功,而且license項(xiàng)目也不知道更新是否成功?因?yàn)檫\(yùn)行窗口只閃了一下就會(huì)自動(dòng)關(guān)閉。
          請(qǐng)問(wèn)大哥這是怎么一回事?
          在線(xiàn)等。QQ54000030
          email:caven110@126.com
          謝謝  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 诏安县| 静海县| 凤城市| 遵义市| 海林市| 石门县| 永宁县| 游戏| 庆云县| 萨迦县| 马关县| 外汇| 涿州市| 德安县| 朝阳县| 二手房| 河间市| 峨山| 毕节市| 革吉县| 会东县| 大田县| 根河市| 双柏县| 淄博市| 深州市| 达州市| 平阳县| 台中县| 铅山县| 谢通门县| 上虞市| 曲周县| 安福县| 京山县| 宝鸡市| 清原| 灵寿县| 河北区| 乌拉特中旗| 环江|