日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

App Class Loader

發(fā)布時間:2024/4/17 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 App Class Loader 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

App Class Loader

作者:robbin (MSN:robbin_fan AT hotmail DOT com)

版權(quán)聲明:本文嚴(yán)禁轉(zhuǎn)載,如有轉(zhuǎn)載請求,請和作者聯(lián)系

Java本身是一種設(shè)計的非常簡單,非常精巧的語言,所以Java背后的原理也很簡單,歸結(jié)起來就是兩點:

1、JVM的內(nèi)存管理

理解了這一點,所有和對象相關(guān)的問題統(tǒng)統(tǒng)都能解決

2、JVM Class Loader

理解了這一點,所有和Java相關(guān)的配置問題,包括各種App Server的配置,應(yīng)用的發(fā)布問題統(tǒng)統(tǒng)都能解決

App Class Loader |----- EJB Class Loader |----- Web App Class Loader

如果在App Class Loader級別配置,是全局可見的。如果打包在EJB里面,那么就不會影響到Web Application,反之亦然,如果你在WEB-INF下面放置Hibernate,也不會影響到EJB。放在EJB Class Loader或者放在Web App Class Loader級別主要就是在局部范圍內(nèi)有效,不影響到其它的應(yīng)用。

試想,如果在一個Weblogic上面配置多個虛擬域,你使用www.bruce.com域名,開發(fā)你的網(wǎng)站,我使用www.fankai.com開發(fā)我的網(wǎng)站,那么當(dāng)然不希望我們的Hibernate相互干擾,所以就可以放在 EJB Class Loader級別來配置Hibernate。

進(jìn)一步闡述一下EJB Class Loader的問題:

先再次強(qiáng)調(diào)一下,Hibernate和EJB,和App Server不存在兼容性問題,他們本來就是不相關(guān)的東西,就好像JDBC,相信沒有人會認(rèn)為JDBC和EJB不兼容吧,Hibernate也是一樣,它只和JDBC驅(qū)動,和數(shù)據(jù)庫有兼容性問題,而和EJB,和App Server完全是不搭界的兩回事。凡是認(rèn)為Hibernate和EJB不兼容的人,其實是都是因為對EJB學(xué)習(xí)的不到家,把責(zé)任推到Hibernate身上了。

我前面提到過Class Loader的層次,這里不重復(fù)了,總之我們先來看看Class Loader的作用范圍:

((Boot Strap)) Class Loader: load JRE\lib\rt.jar, sunrsasign.jar, charsets.jar, jce.jar, jsse.jar, plugin.jar Ext Class Loader: load JRE\lib\ext目錄下的庫文件, load JRE\classes目錄下的類 App Class Loader: load CLASSPATH變量指定路徑下的類

以上的load路徑都是寫死在JVM的C++源代碼里面的,不能改變,詳細(xì)請見王森的《Java深度歷險》

在一個特定的App Server上,Class Loader會繼續(xù)向下繼承,繼承的層次會根據(jù)不同的App Server有所不同,但是肯定不會變的就是:

EJB Class Loader:繼承自App Class Loader,繼承層次根據(jù)App Server有所不同,一個EJB Class Loader它的load Class的范圍僅限于JAR或者EAR范圍之內(nèi)。Web App Class Loader:繼承自App Class Loader,繼承層次根據(jù)App Server有所不同,一個Web App Class Loader: 它的load Class的范圍在 WEB-INF\lib下的庫文件和WEB-INF\classes目錄下的class文件。

Web App Class Loader很好理解,大家畢竟用的很多,App Server上的一個Web Application會創(chuàng)建一個Web App Class Loader的實例去負(fù)責(zé)load class,所以如果你想讓Hibernate只在這個Web Application內(nèi)生效,把它放到WEB-INF\lib下去就好了。

如果你把Hibernate放到了CLASSPATH變量指定的路徑下,而你在WEB-INF\lib也放了一份,那么Web App Class Loader由于load范圍所限,它會首先找到WEB-INF\lib下的那份Hibernate,按照它的配置來初始化Hibernate。

如果你把Hibernate放到了CLASSPATH變量指定的路徑下,但你在WEB-INF\lib什么都沒有放,那么Web App Class Loader由于load范圍所限,它根本什么都找不到,于是它把load Hibernate的責(zé)任交給上一級的Class Loader,這樣直到App Class Loader,它找到了Hibernate,按照它的配置來初始化Hibernate。

EJB Class Loader稍微復(fù)雜一點,不那么容易理解。App Server會針對每一個EJB包文件創(chuàng)建一個EJB Class Loader的實例,例如:

((Hello Robbin)).jar ((Hello Bruce)).jar

當(dāng)你把這兩個jar發(fā)布到App Server上以后,會創(chuàng)建兩個EJB Class Loader的實例,分別去load這兩個EJB包,比如說:

CLEJB_Robbin是load ((Hello Robbin)).jar的 CLEJB_Bruce是load ((Hello Bruce)).jar的

那么CLEJB_Robbin的load范圍就僅僅限于HelloRobbin.jar之內(nèi),它load不到HelloRobbin.jar之外的任何文件,當(dāng)然它也load不到HelloBruce.jar。

說到這里,我相信大家應(yīng)該已經(jīng)明白為什么EJB規(guī)范不允許EJB有IO操作了吧?因為EJB Class Loader根本找不到j(luò)ar包之外的文件!!!

如果現(xiàn)在你想實現(xiàn)HelloRobbin.jar和HelloBruce.jar的互相調(diào)用,那么該怎么辦?他們使用了不同的EJB Class Loader,相互之間是找不到對方的。解決辦法就是使用EAR。

現(xiàn)在假設(shè)HelloRobbin.jar和HelloBruce.jar都使用了Hibernate,看看該怎么打包和發(fā)布:

HelloEJB.ear|------ ((Hello Robbin)).jar |------ ((Hello Bruce)).jar |------ Hibernate2.jar |------ pojo.jar (定義所有的持久對象和hbm文件的jar包) |------ cglib-asm.jar |------ commons-beanutils.jar |------ commons-collections.jar |------ commons-lang.jar |------ commons-logging.jar |------ dom4j.jar |------ odmg.jar |------ log4j.jar |------ jcs.jar |------ hibernate.properties |------ log4j.properties |------ cache.ccf |------ META-INF\application.xml (J2EE規(guī)范的要求,定義EAR包里面包括了哪幾個EJB)

除此之外,按照EJB規(guī)范要求,HelloRobbin.jar和HelloBruce.jar還必須指出調(diào)用jar包之外的類庫的名稱,這需要在jar包的manifest文件中定義:

((Hello Robbin)).jar |------ META-INF\MANIFEST.MF

MANIFEST.MF中必須包括如下一行:

Class-Path: log4j.jar hibernate2.jar cglib-asm.jar commons-beanutils.jar commons-collections.jar commons-lang.jar commons-logging.jar dom4j.jar jcs.jar odmg.jar jcs.jar pojo.jar

這樣就OK了,當(dāng)把HelloEJB.ear發(fā)布到App Server上以后,App Server創(chuàng)建一個EJB Class Loader實例load EAR包里面的EJB,再根據(jù)EJB的jar包里面的MANIFEST.MF指出的Class-Path去尋找相應(yīng)的jar包之外的類庫。

所以一個EAR包有點類似一個Web Application,EJB Class Loader的load范圍也就是EAR范圍之內(nèi),它load不到EAR之外的文件。除非把Hibernate定義到CLASSPATH指定的路徑下,在這種情況下,EJB Class Loader找不到Hibernate,只能交給上一級的Class Loader,最后由App Class Loader找到Hibernate,進(jìn)行初始化。

由于EAR這樣load Class規(guī)則,假設(shè)Robbin和Bruce都在同一個Weblogic上運(yùn)行自己的網(wǎng)站,而我們都不希望自己的程序里面的Hibernate配置被對方的搞亂掉,那么我們就可以這樣來做:

Robbin's Website:

Robbin.ear|-------- robbin.war (把Web Application打包) |-------- robbin.jar (把開發(fā)的EJB打包) |-------- Hibernate2.jar .......................... |-------- META-INF\application.xml

Bruce's Website:

Bruce.ear |-------- bruce.war (把Web Application打包) |-------- bruce.jar (把開發(fā)的EJB打包) |-------- Hibernate2.jar .......................... |-------- META-INF\application.xml

這樣在同一個App Server上運(yùn)行,就可以互相不干擾。

轉(zhuǎn)載于:https://www.cnblogs.com/sunsonbaby/archive/2004/09/10/41954.html

總結(jié)

以上是生活随笔為你收集整理的App Class Loader的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: fc2ppv色の美マンに中出し | 老女人乱淫 | 欧美在线播放视频 | 韩国主播青草55部完整 | 夜色福利 | 中文字幕人妻一区二区三区在线视频 | 国产片一区二区三区 | 午夜一级在线 | 精品人妻无码一区 | 成年人a级片| 好吊色视频988gao在线观看 | 性高跟鞋xxxxhd国产电影 | 少妇被又大又粗又爽毛片久久黑人 | 欧美日本国产 | 欧美一区二区大片 | 探花视频在线免费观看 | 午夜影院污| 韩国女同性做爰三级 | 日批免费观看 | 天堂网久久 | www久久久天天com | 无码国产精品久久一区免费 | 黄色链接视频 | 有码一区 | 国产精品视频一区二区三 | 国内毛片毛片 | av动漫网站 | 精品久久久久久久久久久久久久久久久久 | 狠狠干天天色 | 久久精品成人一区二区三区蜜臀 | av大全在线观看 | aaaa免费视频 | 91久久久久一区二区 | 伊人激情在线 | xvideos永久免费入口 | 久久久久噜噜噜亚洲熟女综合 | 特级毛片www | 伊人看片| 美女少妇毛片 | 真人毛片视频 | 婷婷中文字幕 | 国产av无码专区亚洲精品 | 高清不卡一区二区三区 | 日本在线精品 | 精品人妻在线一区二区三区 | 国产精品美女久久久久 | wwwxxxx在线观看| 黄页视频在线观看 | 啪啪网站大全 | yjizz国产 | 99在线观看免费 | 国产日韩在线观看视频 | 国产精品国产三级国产 | 亚洲一区有码 | 啪啪网站免费观看 | 欧美人一级淫片a免费播放 西方av在线 | 国产精品一区二区三区在线免费观看 | 91美女片黄在线观看 | 免费看欧美成人a片无码 | 国产乱码一区 | 实拍女处破www免费看 | 中文字幕在线影院 | 嫩草av在线 | 啪啪免费视频网站 | 爽好多水快深点欧美视频 | 成人免费版 | 麻豆视频免费观看 | 国产欧美久久久久 | 大桥未久中文字幕 | a级片中文字幕 | 亚洲三级伦理 | 都市激情国产精品 | 91亚洲成人| 中国女人毛片 | 国产乱xxⅹxx国语对白 | 亚洲图片 自拍偷拍 | 免费av网站在线播放 | 天天操天天射天天爽 | 精品无码人妻少妇久久久久久 | 97av超碰| 国产日产精品一区二区 | 久在线观看视频 | 卡一卡二卡三 | 天天爽天天爽天天爽 | 久久国产夫妻 | 在线天堂中文 | 三级黄色在线视频 | 毛片在线网站 | 国产成人在线精品 | 乳罩脱了喂男人吃奶视频 | 伊人网免费视频 | 欧美日韩xxx| 一区二区在线免费视频 | 麻豆福利在线观看 | 青青草免费在线观看视频 | 午夜精品国产 | 久久久久久久成人 | 婷婷激情综合 | 国产调教av |