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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

EJB究竟是什么,真的那么神奇吗??

發(fā)布時間:2024/6/21 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 EJB究竟是什么,真的那么神奇吗?? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.我們不禁要問,什么是"服務集群"?什么是"企業(yè)級開發(fā)"?
既然說了EJB 是為了"服務集群"和"企業(yè)級開發(fā)",那么,總得說說什么是所謂的"服務
集群"和"企業(yè)級開發(fā)"吧!
這個問題事實上挺關鍵的,由于J2EE 中并沒有說明確,也沒有詳細的指標或者事例告訴
廣大程序猿什么時候用EJB 什么時候不用。于是大家都產生一些聯(lián)想,覺得EJB"分布式運
算"指得是"負載均衡"提高系統(tǒng)的執(zhí)行效率。然而,預計非常多人都搞錯了,這個"服務群集"
和"分布式運算"并沒有根本解決執(zhí)行負載的問題,尤其是針對數據庫的應用系統(tǒng)。
為什么?
我們先把EJB 打回原形給大家來慢慢分析。


2.把EJB 掰開了揉碎了
我們把EJB 的概念好好的分析一下,看看能發(fā)現(xiàn)些什么蛛絲馬跡。


3.1EJB 概念的剖析
我們先看一下,EJB 的官方解釋:
商務軟件的核心部分是它的業(yè)務邏輯。業(yè)務邏輯抽象了整個商務過程的流程,并使用計
算機語言將他們實現(xiàn)。
……
J2EE 對于這個問題的處理方法是將業(yè)務邏輯從client軟件中抽取出來,封裝在一個組
件中。這個組件執(zhí)行在一個獨立的server上,client軟件通過網絡調用組件提供的服務以實
現(xiàn)業(yè)務邏輯,而client軟件的功能單純到僅僅負責發(fā)送調用請求和顯示處理結果。在J2EE 中,
這個執(zhí)行在一個獨立的server上,并封裝了業(yè)務邏輯的組件就是EJB(Enterprise Java
Bean)組件。
這當中我們主要關注這么幾點,我們來逐條剖析:
剖析1:所謂:"業(yè)務邏輯"
我們注意到在EJB 的概念中主要提到的就是"業(yè)務邏輯"的封裝,而這個業(yè)務邏輯究竟是
什么?說的那么懸乎,事實上這個所謂的"業(yè)務邏輯"我們全然能夠理解成執(zhí)行特定任務的"類
"。
剖析2:所謂:"將業(yè)務邏輯從client軟件中抽取出來,封裝在組件中……執(zhí)行在一個服
務器上"
既然我們知道了"業(yè)務邏輯"的概念就是執(zhí)行特定任務的"類",那么,什么叫"從client
軟件中抽取出來"?事實上,這個就是把原來放到client的"類",拿出來不放到client了,放
到一個組件中,并將這個組件放到一個server上去執(zhí)行。
3.2 把EJB 這個概念變成大白話
變成大白話就是,"把你編寫的軟件中那些須要執(zhí)行制定的任務的類,不放到client軟
件上了,而是給他打成包放到一個server上了"。
3.3 發(fā)現(xiàn)問題了
無論是用"八股文"說,還是用大白話說這個EJB 概念都提到了一個詞--"client軟件"。
"client軟件"?難道EJB 的概念中說的是C/S 軟件?
是的,沒錯!
EJB 就是將那些"類"放到一個server上,用C/S 形式的軟件client對server上的"類"進
行調用。
快崩潰了吧!
EJB 和JSP 有什么關系?EJB 和JSP 有關系,可是關系還真不怎么大,至多是在JSP 的
server端調用遠端服務上的EJB 類,僅此而已。


4 .1 EJB 的最底層到底是什么
我們揭開了EJB"八股"概念的真諦,那么,再來分析EJB 的底層實現(xiàn)技術,通過底層實
現(xiàn)技術來分析EJB 的工作方式。


4.2 EJB 的實現(xiàn)技術
EJB 是執(zhí)行在獨立server上的組件,client是通過網絡對EJB 對象進行調用的。在Java
中,能夠實現(xiàn)遠程對象調用的技術是RMI,而EJB 技術基礎正是RMI。通過RMI 技術,J2EE
將EJB 組件創(chuàng)建為遠程對象,client就能夠通過網絡調用EJB 對象了。
4.3 看看RMI 是什么東東
在說RMI 之前,須要理解兩個名詞:
對象的序列化
分布式計算與RPC
名詞1:對象的序列化
對象的序列化概念:對象的序列化過程就是將對象狀態(tài)轉換成字節(jié)流和從字節(jié)流恢復對
象。將對象狀態(tài)轉換成字節(jié)流之后,能夠用java.io 包中的各種字節(jié)流類將其保存到文件里,
或者通過網絡連接將對象數據發(fā)送到還有一個主機。
上面的說法有點"八股",我們最好還是再用白話解釋一下:對象的序列化就是將你程序中實
例化的某個類的對象,比方,你自定一個類MyClass,或者不論什么一個類的對象,將它轉換成
字節(jié)數組,也就是說能夠放到一個byte 數組中,這時候,你既然已經把一個對象放到了byte
數組中,那么你當然就能夠隨便處置了它了,用得最多的就是把他發(fā)送到網絡上遠程的計算
機上了。如圖2 11所看到的。


名詞2:分布式計算與RPC
RPC 并非一個純粹的Java 概念,由于在Java 誕生之前就已經有了RPC 的這個概念,RPC
是"Remote Procedure Call"的縮寫,也就是"遠程過程調用"。在Java 之前的大多數編程語
言,如,F(xiàn)ortran、C、COBOL 等等,都是過程性的語言,而不是面向對象的。所以,這些編
程語言非常自然地用過程表示工作,如,函數或子程序,讓其在網絡上還有一臺機器上運行。說
白了,就是本地計算機調用遠程計算機上的一個函數。
如圖2 12所看到的。


名詞3:二者結合就是RMI
RMI 英文全稱是"Remote Method Invocation",它的中文名稱是"遠程方法調用",它就
是利用Java 對象序列化的機制實現(xiàn)分布式計算,實現(xiàn)遠程類對象的實例化以及調用的方法。
說的更清楚些,就是利用對象序列化來實現(xiàn)遠程調用,也就是上面兩個概念的結合體,利用
這種方法來調用遠程的類的時候,就不須要編寫Socket 程序了,也不須要把對象進行序列
化操作,直接調用即可了很方便。
遠程方法調用是一種計算機之間對象互相調用對方函數,啟動對方進程的一種機制,使用這
種機制,某一臺計算機上的對象在調用另外一臺計算機上的方法時,使用的程序語法規(guī)則和
在本地機上對象間的方法調用的語法規(guī)則一樣。
如圖2 13所看到的。

4.4 長處
這種機制給分布計算的系統(tǒng)設計、編程都帶來了極大的方便。僅僅要依照RMI 規(guī)則設計程
序,能夠不必再過問在RMI 之下的網絡細節(jié)了,如:TCP 和Socket 等等。隨意兩臺計算機
之間的通訊全然由RMI 負責。調用遠程計算機上的對象就像本地對象一樣方便。
RMI 可將完整的對象作為參數和返回值進行傳遞,而不僅僅是提前定義的數據類型。也就
是說,能夠將相似Java 哈西表這種復雜類型作為一個參數進行傳遞。
4.5 缺點
假設是較為簡單的方法調用,其運行效率或許會比本地運行慢非常多,即使和遠程Socket
機制的簡單數據返回的應用相比,也會慢一些,原因是,其在網絡間須要傳遞的信息不僅僅
包括該函數的返回值信息,還會包括該對象序列化后的字節(jié)內容。
4.6 EJB 是以RMI 為基礎的
通過RMI 技術,J2EE 將EJB 組件創(chuàng)建為遠程對象,EJB 盡管用了RMI 技術,可是卻僅僅需
要定義遠程接口而無需生成他們的實現(xiàn)類,這樣就將RMI 技術中的一些細節(jié)問題屏蔽了。
但無論怎么說,EJB 的基礎仍然是RMI,所以,假設你想了解EJB 的原理,僅僅要把RMI
的原理搞清楚即可了。你也就弄清楚了什么時候用EJB 什么時候不須要用EJB 了。


5.EJB 中所謂的"服務群集"
既然已經知道了,RMI 是將各種任務與功能的類放到不同的server上,然后通過各個服
務器間建立的調用規(guī)則實現(xiàn)分布式的運算,也就明確EJB 所謂的"服務群集"的概念。
就是將原來在一個計算機上運算的幾個類,分別放到其它計算機上去執(zhí)行,以便分擔運
行這幾個類所須要占用的CPU 和內存資源。同一時候,也能夠將不同的軟件功能模塊放到不同的
server上,當須要改動某些功能的時候直接改動這些server上的類即可了,改動以后全部客
戶端的軟件都被改動了。如圖2 14所看到的。

6.這樣的部署難道是無懈可擊
圖2 14所看到的的這個"服務群集"看似"無懈可擊",事實上是它這個圖沒有畫完整,我們來
把這個圖畫完整,再來看看有什么問題沒有。
6.1 瓶頸在數據庫端
細致觀察之后,發(fā)現(xiàn)這樣的配置是有瓶頸的,如圖2 15所看到的。


我們看看圖2 15的結構圖,如今假設想實現(xiàn)各個server針對同一個數據庫的查詢,那
么,無論你部署多少個功能server,都須要針對一個數據庫server進行查詢操作。也就是說,
無論你的"計算"有多么"分布"也相同須要從一臺server中取得數據。盡管,看起來將各個功
能模塊分布在不同的server上從而分擔了各個主計算機的CPU 資源,然而,真正的瓶頸并不
在這里,而是,數據庫server那里。數據庫server都會很忙的應付各個server的查詢及操
作請求。
因此,通過這個結構圖使我們了解到了EJB 根本不能全然解決負載的問題,由于,瓶頸
并不在功能模塊的所在位置,而是在數據庫server這里。
6.2 假如分開數據庫,數據共享怎么辦
有的讀者一定會想到以下的這個應用結構,如圖2 16所看到的。


就是把每個功能server后面都部署一個數據庫,這樣不就攻克了上節(jié)所說的問題了
嗎?是的攻克了數據庫查詢負載的問題,然而又出現(xiàn)了新的問題,就是"數據共享"的問題就
又不easy攻克了。
6.3 網絡面臨較大壓力,讓你的應用慢如老牛
我們再向前翻看看如圖2 15所看到的的這樣的架構中存在兩個網絡,一個是"A 網"一個是"B
網",這兩個網絡是不同的。"B 網"往往是局域網,一般帶寬是10M/100M,速度較快,因此
到還好說,然而,"A 網"往往是互聯(lián)網或者是利用電信網絡互聯(lián)VPN 網或稱廣域網。"A 網"
的特點是帶寬一般較窄,如ADSL 的網絡唯獨512K-2M 的帶寬,由于廣域網互聯(lián)的成本較
高,所以一般不會有較高的帶寬。
而在這個網絡上恰恰跑的是功能模塊和client軟件之間交換的數據,而這部分數據恰恰
優(yōu)勢很占用帶寬的。
因此,這個應用架構其執(zhí)行速度能夠想見是多么的慢了。說句不夸張的話,有點想老牛
拉破車一樣的慢。
一個如老牛的系統(tǒng):
眼下在中國互聯(lián)網做運營商網絡管理系統(tǒng)的一個大公司,它的一個早期的網管軟件就是
採用了這樣的架構來做的C/S 結構的應用系統(tǒng)。
有一次,我作為評估者來對其應用系統(tǒng)進行評估,將其部署到一個非運營商大型的網絡
中的時候,便出現(xiàn)了我們上述描寫敘述的情況,速度已經到了難以忍受的地步,打開一個流量圖,
有時候須要用15分鐘的時間才干呈現(xiàn)完整。然而,該系統(tǒng)在開發(fā)階段并沒有發(fā)現(xiàn)這個問題,
為什么呢?由于,他們沒有考慮到應用的實際用戶連接網絡的復雜性,從而給該公司造成較
大損失,以至于,這個開發(fā)架構被終于遺棄。

7.EJB 活學活用,J2EE 不是必須使用EJB
通過上面小節(jié)的解說似乎好像EJB 和開發(fā)Web 應用的B/S 結構的系統(tǒng)關系并不大,事實上
倒也不然。我們假設把"client程序"理解成某一臺server,這樣也是能夠被應用的,并且,
假設是server互相之間做EJB 的調用的話,也就不存在廣域網帶寬限制的問題了。
可是,例如以下情況盡量就不要使用EJB 了:
1、較為簡單的純Web 應用開發(fā),不須要用EJB。
2、須要與其它服務程序配合使用的應用,但調用或返回的自己定義的網絡協(xié)議能夠解決
的應用程序,不須要使用EJB。
3、較多人并發(fā)訪問的C/S 結構的應用程序,盡量不要使用EJB。

總結:

a.EJB實現(xiàn)原理: 就是把原來放到client實現(xiàn)的代碼放到server端,并依靠RMI進行通信。

b.RMI實現(xiàn)原理 :就是通過Java對象可序列化機制實現(xiàn)分布計算。

c.server集群: 就是通過RMI的通信,連接不同功能模塊的server,以實現(xiàn)一個完整的功能。

總結

以上是生活随笔為你收集整理的EJB究竟是什么,真的那么神奇吗??的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。