国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
為什么要使用EJB?
為什么要使用EJB?

板橋里人 http://www.jdon.com 2004/03/08

  首先,我們必須明確,為什么要使用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重要的組成部分,可以說(shuō)沒(méi)有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,這種劃分沒(méi)有一種強(qiáng)制性和明顯標(biāo)志性,這樣的系統(tǒng)更換了主創(chuàng)人員或設(shè)計(jì)師,可能就會(huì)被新的程序員修改得非?;靵y。

  我們先看看一個(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í)和未來(lái)的擴(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清晰地分開(kāi),又如何保證在新的程序員不會(huì)破壞和打亂你精心布局的JavaBeans架構(gòu)?

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

  最主要的是性能問(wèn)題,由于以前國(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();

  但是,在高訪問(wèn)量的環(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è),這樣,就無(wú)需在使用時(shí)進(jìn)行New,節(jié)約了開(kāi)銷,提高了性能,因此,真正成熟性能解決方案都是需要對(duì)象池等支持。

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

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

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

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

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

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

  下圖是某個(gè)新的具體系統(tǒng)時(shí)應(yīng)用到的EJB組件圖,在這個(gè)新的應(yīng)用中,由于使用了以前大量可重用的EJB組件,新的開(kāi)發(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),提款人沒(méi)有拿到錢,但是卡上已經(jīng)扣款等不可思議的事情發(fā)生。

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

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

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

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

  由于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)更改的重要性不言而喻。

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

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

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

小結(jié)

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

  不要再被TSS那些狂熱的開(kāi)源先生誤導(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)然,我并不是說(shuō)純Web系統(tǒng)不能實(shí)現(xiàn)多層結(jié)構(gòu),但是至少在很多方面沒(méi)有Web+EJB結(jié)構(gòu)完善和清晰,所以,EJB不是J2EE可以忽視的部分,而是主要的重要的部分,重要業(yè)務(wù)功能核心都封裝在EJB中,相反Web層是一種次要的、和界面相關(guān)的層次。

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

相關(guān)文章:

J2EE集群原理

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

When to not use EJB

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


 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
12個(gè)最重要的J2EE最佳實(shí)踐
Servlet線程池和EJB對(duì)象池
Java企業(yè)系統(tǒng)架構(gòu)選擇考量
j2ee的學(xué)習(xí)路線目前JAVA主要分三個(gè)方向:J2EE(java2enterpriseeditio
揭開(kāi)J2EE集群的神秘面紗(七)
java學(xué)習(xí)入門建議-摘自CSDN熱心網(wǎng)友們的回復(fù)-感謝--
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服