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

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

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

    Java技術(shù)專區(qū)--Hilly

    http://blog.duyouyou.com
       :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理

    為什么要使用EJB

    Posted on 2006-09-07 20:04 duyouyou.com 閱讀(548) 評(píng)論(0)  編輯  收藏 所屬分類: web技術(shù)

    為什么要使用EJB?

    來源:http://www.jdon.com/artichect/whyEJB.htm

      首先,我們必須明確,為什么要使用J2EE?J2EE優(yōu)點(diǎn)是什么?使用J2EE的主要原因是多層結(jié)構(gòu),傳統(tǒng)的兩層C/S結(jié)構(gòu)難于維護(hù),穩(wěn)定性極差,界面代碼和數(shù)據(jù)庫(kù)代碼混淆在一起,牽一動(dòng)百,多層結(jié)構(gòu)使得界面和數(shù)據(jù)庫(kù)完全分離,并且誕生了中間件這樣的技術(shù),如下圖:

    Web+EJB能組成真正的多層結(jié)構(gòu)

      為什么使用EJB我原先認(rèn)為這不是一個(gè)討論的話題,因?yàn)镋JB是J2EE重要的組成部分,可以說沒有EJB的J2EE只是一種Web系統(tǒng),這樣的系統(tǒng)非常容易喪失了多層結(jié)構(gòu)的大部分優(yōu)點(diǎn)(仔細(xì)想想那些混合多種層次功能JavaBeans和傳統(tǒng)兩層結(jié)構(gòu)有什么區(qū)別?)。

      當(dāng)然,可以人為地在Javabeans之間進(jìn)行層次劃分,例如Hibernate算數(shù)據(jù)持久層,某些JavaBeans是業(yè)務(wù)核心層,但是因?yàn)槎际瞧胀↗avaBeans,這種劃分沒有一種強(qiáng)制性和明顯標(biāo)志性,這樣的系統(tǒng)更換了主創(chuàng)人員或設(shè)計(jì)師,可能就會(huì)被新的程序員修改得非常混亂。

      我們先看看一個(gè)包含EJB的J2EE系統(tǒng)是如何清晰地表達(dá)層次。如下圖:

      Web完全只是一個(gè)MVC模式的實(shí)現(xiàn),關(guān)鍵業(yè)務(wù)核心是在EJB的服務(wù)層實(shí)現(xiàn),這樣做的優(yōu)點(diǎn)是,Web只負(fù)責(zé)界面相關(guān)部分,因?yàn)椋绻且粋€(gè)智能客戶端,如Swing或J2ME,在不需要修改任何業(yè)務(wù)核心的情況下能夠方便地更換。同樣,提供Web Services功能,也只是在 Web層修改,不會(huì)涉及EJB方面的修改,同樣保證了系統(tǒng)的穩(wěn)定性,保證了系統(tǒng)升級(jí)和未來的擴(kuò)展性。

      如果不使用EJB,在EJB服務(wù)層實(shí)現(xiàn)的業(yè)務(wù)核心將由普通JavaBeans實(shí)現(xiàn),使用何種架構(gòu)或設(shè)計(jì)能夠保證負(fù)責(zé)MVC的JavaBeans和負(fù)責(zé)業(yè)務(wù)核心的JavaBeans清晰地分開,又如何保證在新的程序員不會(huì)破壞和打亂你精心布局的JavaBeans架構(gòu)?

    EJB提供性能優(yōu)化支持

      最主要的是性能問題,由于以前國(guó)內(nèi)中文Java網(wǎng)站有些人彎曲EJB,認(rèn)為EJB性能低,其實(shí)這是一種非常膚淺錯(cuò)誤的認(rèn)識(shí),我們首先看看在一般Java環(huán)境中是如何提高性能。

      假定一個(gè)JavaBeans為A,那么一般使用這個(gè)JavaBeans命令如下:

      A a = new A();

      但是,在高訪問量的環(huán)境中,new A()其實(shí)是很費(fèi)時(shí)消耗系統(tǒng)性能的,因此,能不能在軟件系統(tǒng)啟動(dòng)時(shí)候就預(yù)先建立一些對(duì)象,這樣,系統(tǒng)運(yùn)行時(shí),從這些已經(jīng)生成的對(duì)象池中借用一個(gè),這樣,就無需在使用時(shí)進(jìn)行New,節(jié)約了開銷,提高了性能,因此,真正成熟性能解決方案都是需要對(duì)象池等支持。

      在一個(gè)純Web結(jié)構(gòu)的系統(tǒng)(也就是只能運(yùn)行在Tomat環(huán)境中),例如Struts + Hibernate等這樣的系統(tǒng),除非自己動(dòng)手做,一般是沒有對(duì)象池技術(shù)支持的,因此他們的性能只能算是Demo演示版本的性能,根本無法承受大容量并發(fā)訪問,也無法稱為一個(gè)成熟的系統(tǒng),所以,我們研究成熟的開源Web系統(tǒng),如Jive、OFBize,LifeRay等,他們都在Web層擁有自己的對(duì)象池和緩存池。

      對(duì)象池和緩存機(jī)制是J2EE必須的嗎?當(dāng)然,是所有成熟系統(tǒng)必須的,Windows系統(tǒng)如果去掉緩存將會(huì)變得怎樣?

      自己動(dòng)手開發(fā)對(duì)象池和緩存機(jī)制并不是一件簡(jiǎn)單的事情,需要對(duì)多線程以及同步鎖等底層原理有深層次的把握,這其實(shí)也是一門非常深入的Java研究分支,所以,你可以拋開你的客戶焦急的催促,精心研究開發(fā)自己的對(duì)象池和緩存池。

      但是,EJB容器(如JBoss)已經(jīng)提供了對(duì)象池和緩存機(jī)制,所以,沒有事務(wù)機(jī)制的無狀態(tài)Session Bean的性能肯定要強(qiáng)于普通JavaBeans。EJB容器不但在單機(jī)中提供了對(duì)象池和緩存,而且可以跨服務(wù)器實(shí)現(xiàn)動(dòng)態(tài)負(fù)載平衡,這些都無需開發(fā)者自己開發(fā)任何軟件代碼,結(jié)構(gòu)如下:

    EJB組件能提供真正的可重用框架

      每一個(gè)jar包代表一個(gè)EJB組件,一個(gè)系統(tǒng)可以由多個(gè)可重用的EJB組件構(gòu)成,例如:樹形結(jié)構(gòu)EJB組件;自增序號(hào)EJB組件;用戶資料EJB組件等,這樣的EJB組件可以象積木一樣搭配在大部分應(yīng)用系統(tǒng)中,提高了系統(tǒng)的開發(fā)效率,保證了開發(fā)質(zhì)量。

      下圖是某個(gè)新的具體系統(tǒng)時(shí)應(yīng)用到的EJB組件圖,在這個(gè)新的應(yīng)用中,由于使用了以前大量可重用的EJB組件,新的開發(fā)工作基本集中在界面設(shè)計(jì)和流程安排上:

    EJB提供了事務(wù)機(jī)制

      事務(wù)機(jī)制對(duì)于一些關(guān)鍵事務(wù)是很重要的,例如ATM機(jī)提款,提款有多個(gè)動(dòng)作:修改數(shù)據(jù)庫(kù)以及數(shù)錢等,如果這其中有任何一個(gè)環(huán)節(jié)出錯(cuò),那么其它已經(jīng)實(shí)現(xiàn)的操作必須還原,否則,就會(huì)出現(xiàn),提款人沒有拿到錢,但是卡上已經(jīng)扣款等不可思議的事情發(fā)生。

      EJB提供的事務(wù)機(jī)制非常周全,但事務(wù)機(jī)制帶來的缺點(diǎn)是性能的降低,因此,有些人認(rèn)為EJB很重,因?yàn)樵趯?shí)際應(yīng)用中,有的用戶系統(tǒng)可能不需要事務(wù)機(jī)制,只是需要EJB提供的性能優(yōu)化機(jī)制,這樣,如果使用EJB,就象叫一個(gè)人來背東西,他除了背著我要的東西外,還背著我不要的東西。

      除非你是一個(gè)完美主義,在一般企業(yè)應(yīng)用或數(shù)據(jù)庫(kù)系統(tǒng)應(yīng)用中,EJB不會(huì)對(duì)你構(gòu)成很重的包袱。

    CMP獨(dú)特的優(yōu)點(diǎn)

      開源以及一些數(shù)據(jù)庫(kù)持久層技術(shù)崇拜者,一直抨擊CMP,認(rèn)為CMP慢無用,實(shí)際最大的問題是他們的設(shè)計(jì)和使用問題。

      由于EJB容器(如JBoss)對(duì)CMP實(shí)現(xiàn)有事務(wù)機(jī)制的緩存優(yōu)化,因此,CMP特別適合多個(gè)用戶同時(shí)更新同一個(gè)數(shù)據(jù)源的情況,CMP這種嚴(yán)格的事務(wù)完整性保證多個(gè)用戶同時(shí)操作一個(gè)數(shù)據(jù)記錄時(shí),能夠保證性能優(yōu)化和數(shù)據(jù)的完整性,如果這個(gè)數(shù)據(jù)記錄是是軟件系統(tǒng)的狀態(tài)標(biāo)志,它的狀態(tài)會(huì)影響系統(tǒng)中很多的環(huán)節(jié),那么狀態(tài)更改的重要性不言而喻。

      如果沒有事務(wù)完整性支持,你的軟件系統(tǒng)在用戶訪問量變大,就會(huì)變得發(fā)生各種不可能發(fā)生的邏輯錯(cuò)誤,查看程序邏輯是正確的,那么問題出在哪里?出在數(shù)據(jù)完整性上。

      由于每個(gè)CMP在內(nèi)存中都有一個(gè)緩存,在實(shí)際應(yīng)用中,如果使用CMP批量讀數(shù)據(jù)庫(kù)數(shù)據(jù),幾萬條查詢完畢,內(nèi)存中充滿了幾萬條CMP緩存,如果這時(shí)你的EJB容器設(shè)置不當(dāng)(如使用JBoss缺省配置),那么JVM的垃圾回收機(jī)制就會(huì)頻繁啟動(dòng),導(dǎo)致你的系統(tǒng)變慢甚至死機(jī),這也是一些人抨擊CMP慢的原因所在,其實(shí)他們使用方法不當(dāng),或者沒有正確配置EJB容器CMP緩存。

      對(duì)于這種情況,根據(jù)J2EE核心模式,推薦使用DAO+JDBC方式。

    小結(jié)

      除非你對(duì)設(shè)計(jì)模式非常精深,能夠?qū)⒆约合到y(tǒng)中的JavaBeans使用模式或某種框架進(jìn)行固定分層,同時(shí),你孜孜不倦研發(fā)出對(duì)象池,又熟練于JTA等事務(wù)機(jī)制,你可以選擇沒有EJB的純Web結(jié)構(gòu),就象Jive、OFBiz那樣。當(dāng)然還有一個(gè)前提,老板不懂或者非常有挑戰(zhàn)性(做與IBM SUN 微軟齊名的公司和技術(shù))。

      不要再被TSS那些狂熱的開源先生誤導(dǎo),他們有時(shí)間有保障可以做他們喜歡的事情,作為專業(yè)的J2EE程序員,按照J(rèn)2EE標(biāo)準(zhǔn)去學(xué)習(xí)去行動(dòng),也不要認(rèn)為,只要使用了J2EE其中某個(gè)技術(shù)如Jsp或JavaBeans就心安理得認(rèn)為自己的系統(tǒng)是J2EE了。

      當(dāng)然,我并不是說純Web系統(tǒng)不能實(shí)現(xiàn)多層結(jié)構(gòu),但是至少在很多方面沒有Web+EJB結(jié)構(gòu)完善和清晰,所以,EJB不是J2EE可以忽視的部分,而是主要的重要的部分,重要業(yè)務(wù)功能核心都封裝在EJB中,相反Web層是一種次要的、和界面相關(guān)的層次。

      補(bǔ)充:什么情況下不需要EJB,在SUN的SECA架構(gòu)師試卷中回答:小型系統(tǒng)和不需要事務(wù)。另外過去那種認(rèn)為“EJB有性能問題”根本是一種繆誤,具體可參考下面有關(guān)問題。

    相關(guān)文章:

    J2EE集群原理

    為什么需要有態(tài)Session Bean

    When to not use EJB

    關(guān)于SPING與EJB的胡言亂語(yǔ)--重和輕永恒的話題


    Hold住
    主站蜘蛛池模板: 亚洲色欲久久久综合网| 国产一区二区视频免费| 亚洲gv猛男gv无码男同短文| 国产视频精品免费视频| 亚洲国产精品成人网址天堂 | 国产人妖ts在线观看免费视频| 亚洲国产成人精品久久| 国产91色综合久久免费| 亚洲熟妇色自偷自拍另类| 亚洲免费在线观看视频| 亚洲av永久无码精品三区在线4 | 91免费精品国自产拍在线不卡| 亚洲sss综合天堂久久久| 毛片免费vip会员在线看| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 久久精品蜜芽亚洲国产AV| 曰批全过程免费视频播放网站| 久久亚洲AV无码精品色午夜麻豆 | 亚洲色偷拍另类无码专区| 三级网站免费观看| 青青草原精品国产亚洲av| 91久久精品国产免费直播| 亚洲人成网站999久久久综合| 国产成人啪精品视频免费网| 亚洲精品黄色视频在线观看免费资源| 亚洲欧洲成人精品香蕉网| 日本免费一区二区三区| 久久精品国产亚洲AV蜜臀色欲 | 久久精品国产亚洲一区二区| 鲁大师在线影院免费观看| 亚洲精品人成网在线播放影院| 国产精品久久香蕉免费播放| 久青草视频在线观看免费| 亚洲资源在线观看| 特级淫片国产免费高清视频| 国产日韩AV免费无码一区二区三区| 久久久久亚洲精品影视| 免费看的一级毛片| 男人天堂免费视频| 亚洲日韩乱码中文字幕| 亚洲日韩精品无码专区网址|