<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Leo's Blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      13 隨筆 :: 3 文章 :: 18 評(píng)論 :: 0 Trackbacks
    時(shí)間:2005-11-04
    作者:juxtapose


     如果大家對一般類的裝載器熟悉的話,就知道在java中類的裝載采用“代理機(jī)制”,即子裝載器如果需要裝載一個(gè)類文件,首先會(huì)將此任務(wù)提交給父 裝載器,如果父裝載器找不到此類文件,才有子裝載器來裝載類文件,如果子裝載器也找不到,那么就會(huì)報(bào)告ClassNotFoundException異 常。下面簡單談一下我對weblogic server的類裝載器原理的了解,希望能和大家分享。

    1.Weblogic允許定制的類裝載器,同時(shí)也有一個(gè)默認(rèn)的類裝載器。其默認(rèn)的裝載器的結(jié)構(gòu)分層如下:

     

      當(dāng)部署一個(gè)應(yīng)用的時(shí)候,weblogic server會(huì)自動(dòng)創(chuàng)建一個(gè)具有層次結(jié)構(gòu)的類裝載器。在圖中,a.Application Classloader負(fù)責(zé)裝載應(yīng)用中的所有的EJB JAR文件;

      b.Web Application Classloader負(fù)責(zé)裝載所有的Web application 中的WAR 文件(所有得jsp文件除外);

      c.Jsp Classloader 負(fù)責(zé)裝載Web application 中的所有的jsp 文件;

      這樣的分層結(jié)構(gòu)有一個(gè)好處,就是在Jsp,Servlet中可以直接訪問EJB的接口。這種上層裝載EJB,下層裝載servlet等,最下面裝載jsp文件的結(jié)構(gòu),使得經(jīng)常變動(dòng)的jsp,servlet等可以被重新裝載而不會(huì)涉及到EJB層。

    在這種默認(rèn)的類裝載器結(jié)構(gòu)下,有一點(diǎn)需要提出的是:

      a. 我們的應(yīng)用必須打包成一個(gè)EAR文件,才會(huì)允許我們應(yīng)用中的jsp和servlet文件直接訪問ejb;如果將WAR與JAR文件分別打包。 Weblogic server會(huì)為他們分別生成一個(gè)類裝載器,作為兄弟節(jié)點(diǎn),這時(shí)如果需要在jsp或者servlet中使用ejb,就必須將EJB的Home接口與 remote接口打包到WAR中才可以。后面這種情況,適合用在將EJB的客戶端和EJB部署在不同的JVM中;

      b.web application classloader中,不會(huì)裝載jsp文件,jsp文件由web application classloader的子裝載器Jsp classloader負(fù)責(zé)裝載,因?yàn)閖sp文件經(jīng)常的變動(dòng),通過為jsp設(shè)立一個(gè)單獨(dú)的classloader可以避免對jsp的裝載影響到其他的 java class或者ejb;

    默認(rèn)裝載器的優(yōu)點(diǎn):

      a. 調(diào)用ejb的時(shí)候可以采用call-by-referrence的方式;

      b. 允許web module獨(dú)立的裝載,不影響其它的web module;

    • 通過在將整個(gè)應(yīng)用打包成一個(gè)EAR文件,可以方便的不用再web module中包含EJB的home和remote接口,就可以方便的通過call-by-referrence來調(diào)用ejb;

    2. 定制classloader
      如果覺得默認(rèn)的類裝載器不能滿足需要,weblogic server支持定制的類裝載器。在weblogic的文檔中指出,自定義的classloader多用于開發(fā)者使用,當(dāng)應(yīng)用發(fā)布之后,不推薦使用。自定 義的類裝載器通過xml文件來描述。描述文件放在weblogic-application.xml中。Weblogic官方提供的DTD描述文件如下:

    <classloader-structure> 
        
    <module-ref> 
            
    <module-uri>ejba.jar</module-uri> 
        
    </module-ref> 
        
    <module-ref> 
            
    <module-uri>webc.war</module-uri> 
        
    </module-ref>
        
    <classloader-structure> 
            
    <module-ref> 
                
    <module-uri>weba.war</module-uri> 
            
    </module-ref> 
        
    </classloader-structure>
        
    <classloader-structure> 
            
    <module-ref> 
                
    <module-uri>ejbc.jar</module-uri> 
            
    </module-ref> 
            
    <module-ref> 
                
    <module-uri>webb.war</module-uri> 
            
    </module-ref>
            
    <classloader-structure> 
                
    <module-ref> 
        
    <module-uri>webd.war</module-uri> 
                
    </module-ref> 
            
    </classloader-structure> 
            
    <classloader-structure> 
                
    <module-ref> 
        
    <module-uri>ejbb.jar</module-uri> 
                
    </module-ref> 
            
    </classloader-structure>
        
    </classloader-structure>
    </classloader-structure>

      通過我們給出的配置文件,我們自定義的classloader的層次結(jié)構(gòu)如下圖:

     

      在J2EE的規(guī)范中明確的指出,J2EE應(yīng)用不應(yīng)該依賴于任一個(gè)給定的類裝載器。所以,我們自定義的類裝載器,在開發(fā)過程中還是可以使用的,但一定不要應(yīng)用于發(fā)布后的應(yīng)用中。

    自定義的類裝載器有如下得限制:
      a.不能夠裝載servlet;

      b.嵌套的深度最大為3,也就是說,最多只能夠嵌套三層;

      c.自定義裝載器的module類型僅限于 Web和 EJB這兩種;

      d.Jsp Classloader不受此自定義類裝載器的影響,它永遠(yuǎn)都是web module的子類裝載器;

    • 相同的類可能導(dǎo)致部署異常;
    • 在自定義的類裝載器中,如果要使用EJB,就必須將EJB的home和remote接口打包到相應(yīng)的web module中去;
    •  

    3.Ejb的單獨(dú)加載
      
    有時(shí)候我們可能需要單獨(dú)加載某個(gè)EJB,這個(gè)時(shí)候我們可以通過以下兩種方法來實(shí)現(xiàn):

      第一:將應(yīng)用需要的jar文件放在APP-INF/lib中,或者將類文件放在APP-INF/classes中,這些類文件和JAR文件會(huì)被root classloader進(jìn)行裝載,可以被多個(gè)應(yīng)用共享;

      第二:可以通過META-INF/MANIFEST.MF文件來指定需要的classes。通常的用法是在META-INF/MANIFEST.MF文件中增加Class-Path:一行。舉例如下:

      Class-Path:/d:ejb/add.jar

      這樣就會(huì)在當(dāng)前的jar包中可以找到我們需要的add.jar文件。需要說明的是,在Class-Path:行的最后一定要有一個(gè)換行,否則會(huì)發(fā)生錯(cuò)誤。還有,通過Class-Path只能指定本地的JAR文件。

      如果能對應(yīng)用服務(wù)器的類裝載原理有了較清楚地了解,會(huì)對我們的應(yīng)用移植,在開發(fā)中避免不必要的類裝載的錯(cuò)誤會(huì)有很大的幫助。

    轉(zhuǎn)載自:http://dev2dev.bea.com.cn/bbsdoc/20051104121.html

    posted on 2006-02-23 18:37 Leo 閱讀(399) 評(píng)論(0)  編輯  收藏 所屬分類: 技術(shù)隨文
    主站蜘蛛池模板: 久久av无码专区亚洲av桃花岛| 亚洲日韩VA无码中文字幕 | 亚洲AV成人片色在线观看高潮 | 亚洲激情视频图片| 一级毛片人与动免费观看| 成av免费大片黄在线观看| 五月婷婷综合免费| 久久久久国产成人精品亚洲午夜| 亚洲精品在线不卡| 免费夜色污私人影院网站电影| 4hu四虎最新免费地址| 中文字幕亚洲不卡在线亚瑟| 国产精品无码免费专区午夜 | 亚洲黄色三级网站| av网站免费线看| 国产av天堂亚洲国产av天堂| 亚洲av午夜国产精品无码中文字| 青娱分类视频精品免费2| 亚洲制服丝袜一区二区三区| 中文字幕免费在线播放| 亚洲va久久久噜噜噜久久狠狠| 免费无码又爽又黄又刺激网站| 亚洲愉拍99热成人精品热久久 | 日韩免费一区二区三区在线播放| 亚洲一区二区影视| 国产在线一区二区综合免费视频 | 在线观看人成网站深夜免费| 久久精品国产精品亚洲色婷婷| **一级一级毛片免费观看| 亚洲精品无码精品mV在线观看| 成a人片亚洲日本久久| 最近免费中文字幕视频高清在线看| 九月丁香婷婷亚洲综合色| 最近免费中文字幕mv电影| 亚洲va国产va天堂va久久| 18禁免费无码无遮挡不卡网站| 羞羞漫画小舞被黄漫免费| 成人啪精品视频免费网站| WWW国产成人免费观看视频| 亚洲电影在线播放| 亚洲?V无码成人精品区日韩|