一、Server方組件結(jié)構(gòu)
EJB是一種Server方的組件結(jié)構(gòu),它可以非常簡(jiǎn)單的開(kāi)發(fā)基于Java的企業(yè)級(jí)的分布式對(duì)象應(yīng)用。使用EJB可以開(kāi)發(fā)出易升級(jí)的、可靠的、安全的應(yīng)用程序,而不用獨(dú)立開(kāi)發(fā)復(fù)雜的分布式對(duì)象框架;EJB可以迅速開(kāi)發(fā)服務(wù)方應(yīng)用程序,快速建立基于Java的服務(wù)方組件。EJB被設(shè)計(jì)用來(lái)實(shí)現(xiàn)企業(yè)中間件服務(wù)的可移植和可重用性。
如果你對(duì)企業(yè)計(jì)算很陌生,這些概念對(duì)你很有用,EJB是個(gè)很復(fù)雜的主題,應(yīng)該被充分的解釋。在這一章我們討論有關(guān)EJB的主要概念。首先,我們先討論開(kāi)發(fā)企業(yè)級(jí)軟件是為了干什么?為什么說(shuō)像EJB的預(yù)包裝的分布式對(duì)象體系可以簡(jiǎn)化你的生活?在討論中,你將會(huì)對(duì)服務(wù)端的組件結(jié)構(gòu)有宏觀的了解。
服務(wù)端組件結(jié)構(gòu)的需要,我們必須首先了解開(kāi)發(fā)者在建立和配置服務(wù)端環(huán)境下的組件時(shí)通常需要什么?同時(shí),我們將解決圍繞服務(wù)端開(kāi)發(fā)所出現(xiàn)的問(wèn)題,將看到建立一套像EJB標(biāo)準(zhǔn)體系結(jié)構(gòu)的必要性。
軟件組件是一個(gè)軟件組件是一段代碼,它用來(lái)實(shí)現(xiàn)一系列定義好的接口。組件不是完整的。應(yīng)用程序,它們不能被獨(dú)立運(yùn)行。更貼切的說(shuō),它們是看作是許多大型問(wèn)題分割成的小問(wèn)題。軟件組件的思想非常有用。公司可以買來(lái)定義好的可用來(lái)解決某一問(wèn)題的模塊,將它和其他組件一起編譯用以解決大型問(wèn)題。
組件結(jié)構(gòu)是為了使組件開(kāi)發(fā)過(guò)程更加容易,需要為建立、管理、維持組件建立規(guī)范。開(kāi)發(fā)組件的開(kāi)發(fā)工具,是在建立組件時(shí),應(yīng)該允許開(kāi)發(fā)者集中精力在組件的背后開(kāi)發(fā)核心邏輯,使開(kāi)發(fā)者不需要考慮太多的標(biāo)準(zhǔn)細(xì)節(jié)問(wèn)題,從而快速開(kāi)發(fā)應(yīng)用程序。例如IDE:Symantec的Visual Cafe,IBM的VisualAge for Java,Inprise的Jbuilder 2,這些工具可以幫助你快速的建立和調(diào)試組件。
管理配置好的組件容器,組件容器為你的組件運(yùn)行提供了一個(gè)運(yùn)行時(shí)環(huán)境。同時(shí)也提供了一套供大多數(shù)組件使用的通用服務(wù)。配置和維持組件工具,從組件提供商購(gòu)買了組件后,還需要有一套工具來(lái)幫助配置和維持這些組件。
Java:完美實(shí)現(xiàn)組件結(jié)構(gòu)
對(duì)于成功運(yùn)用在解決商業(yè)問(wèn)題的一個(gè)組件,無(wú)論是組件開(kāi)發(fā)商還是使用組件的客戶都必須遵守調(diào)用組件方法的語(yǔ)法和語(yǔ)義。開(kāi)發(fā)商出版有關(guān)調(diào)用組件的規(guī)范,客戶代碼必須遵守它們。為了防止當(dāng)開(kāi)發(fā)商提供了一個(gè)新版本的組件,或更改了組件規(guī)范,客戶方就必須重新編寫或編譯它們的代碼,因此面向?qū)ο笤O(shè)計(jì)提出了一種新的設(shè)計(jì)方法:通過(guò)從組件的實(shí)現(xiàn)中分離出接口。
組件接口和組件邏輯,為了使接口/實(shí)現(xiàn)分離這種方式變得更有效,開(kāi)發(fā)者必須為組件接口寫客戶代碼(這被稱為基于接口的程序設(shè)計(jì)),通過(guò)這種分離,可以改變服務(wù)方邏輯而不用更改客戶方代碼。
Java中的組件結(jié)構(gòu)
現(xiàn)在讓我們了解什么是組件結(jié)構(gòu),看看在Java世界里存在那些組件結(jié)構(gòu)。首先,你應(yīng)該了解什么是JavaBeans,JavaBeans組件是小的應(yīng)用程序塊,可以使用JavaBean去集合成大型的組件,從而編譯完整的應(yīng)用程序。然而,你不能配置一個(gè)JavaBean,因?yàn)橐粋€(gè)JavaBean不是一個(gè)完全的應(yīng)用程序。JavaBean可以幫助你構(gòu)建更大的可配置的軟件。因?yàn)椴恍枰渲茫琂avaBean不需要運(yùn)行時(shí)環(huán)境,也不需要容器來(lái)對(duì)它進(jìn)行實(shí)例化、破壞、提供其他服務(wù)的操作。應(yīng)用程序本身是由許多JavaBean構(gòu)成的。
相比較,EJB標(biāo)準(zhǔn)定義了一個(gè)組件結(jié)構(gòu)來(lái)配置組件,被稱為企業(yè)級(jí)的Beans。企業(yè)級(jí)的Beans是比較大的、粗糙的被用來(lái)配置的應(yīng)用程序組件。他們能被破壞,也能被用來(lái)和其他組件組合成更大的應(yīng)用程序系統(tǒng)。可配置組件在容器內(nèi)被配置,容器提供了對(duì)組件的運(yùn)行時(shí)服務(wù)。例如實(shí)例化。
企業(yè)級(jí)Beans和兩種其他的Java組件十分相似:applets和servlets。Applets可以在Web頁(yè)中配置,瀏覽器的Appletviewer為其提供了運(yùn)行時(shí)的容器。Servlets可以在Web Server中被配置,Webserver的servlet engine為提供運(yùn)行時(shí)的容器。企業(yè)級(jí)Beans可以在應(yīng)用程序服務(wù)器中被配置,應(yīng)用服務(wù)器為其提供了運(yùn)行時(shí)的容器。
它們?nèi)咧g真正的不同是每個(gè)組件類型可以延伸的域大小。 Applets是輕便Java程序,它能夠被任意的下載和運(yùn)行。例如它可以從Web Server中下載到瀏覽器。 Servlets是可以被用來(lái)延伸Web server功能的網(wǎng)絡(luò)組件。它是面向請(qǐng)求/回答的,從許多客戶端獲得請(qǐng)求,再給它們發(fā)應(yīng)答。這樣使得它被廣泛用于執(zhí)行Web任務(wù)。 Applets和servlets適用于客戶方操作。而企業(yè)級(jí)Bean不擴(kuò)展客戶端操作,它是服務(wù)端組件,執(zhí)行服務(wù)端操作;例如執(zhí)行復(fù)雜運(yùn)算、執(zhí)行大量的商業(yè)傳輸。
服務(wù)端所需一個(gè)完整的組件結(jié)構(gòu)遵循以下方式:
開(kāi)發(fā)者寫可重用組件;
提供商寫組件容器:用以給組件提供運(yùn)行時(shí)環(huán)境和服務(wù);
提供商提供開(kāi)發(fā)、配置和維持工具;
這些方式保證了可重用性;
多層結(jié)構(gòu)
服務(wù)方配置是用來(lái)支持用戶同時(shí)執(zhí)行并發(fā)、安全、可靠、有效的操作的軟件。服務(wù)方配置一般被分成多層。每層實(shí)現(xiàn)不同的功能,每層有一個(gè)或多個(gè)組件。注意:層是個(gè)抽象的概念,在物理上它并不存在。下面有個(gè)分層的例子:
代表層:這些容器組件處理用戶接口和用戶交互。例如,代表層是一個(gè)單獨(dú)的應(yīng)用程序,可以用VB來(lái)寫。基于Web配置的代表層可以使用Java servlets,Java server pages或Java applets。
業(yè)務(wù)邏輯層:是用來(lái)解決業(yè)務(wù)問(wèn)題的容器組件的集合。這些組件常被用來(lái)處理高執(zhí)行度的工作,它們常用安全性的語(yǔ)言來(lái)寫,例如:Java、C。
數(shù)據(jù)層:被業(yè)務(wù)邏輯層用來(lái)保持狀態(tài)的持久性。數(shù)據(jù)層的中心是一個(gè)或多個(gè)數(shù)據(jù)庫(kù)。分層的優(yōu)點(diǎn)是盡量隔離各層。
兩層結(jié)構(gòu),通常,大多數(shù)配置是兩層結(jié)構(gòu)。將業(yè)務(wù)邏輯層和另外兩層的一個(gè)合并:可能和代表層合并。可能和數(shù)據(jù)層合并。代表層和業(yè)務(wù)邏輯層合并。如把代表層和業(yè)務(wù)邏輯層這一層作為客戶端,數(shù)據(jù)層作為服務(wù)端,則形成fat客戶端,而thin服務(wù)端的情況。在兩層結(jié)構(gòu)中,客戶端應(yīng)用程序通過(guò)數(shù)據(jù)庫(kù)橋API與數(shù)據(jù)層相連。例如:ODBC、JDBC。
這樣的兩層結(jié)構(gòu)有以下特征:
配置代價(jià)非常高。數(shù)據(jù)庫(kù)驅(qū)動(dòng)必須在每一個(gè)客戶層上安裝和配置。
數(shù)據(jù)庫(kù)驅(qū)動(dòng)交換代價(jià)高。轉(zhuǎn)接一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng),需要在各個(gè)客戶端重新安裝客戶端驅(qū)動(dòng)。
數(shù)據(jù)庫(kù)類型轉(zhuǎn)型代價(jià)高。
業(yè)務(wù)邏輯移植代價(jià)高。
數(shù)據(jù)庫(kù)連接代價(jià)高。
網(wǎng)絡(luò)性能發(fā)揮低。
將業(yè)務(wù)邏輯層部分并入數(shù)據(jù)層。
形成客戶端thin,而服務(wù)端fat的情況。
N層結(jié)構(gòu),其中將代表層、業(yè)務(wù)邏輯層、數(shù)據(jù)層各自為一層。
特點(diǎn):
配置代價(jià)低。
數(shù)據(jù)庫(kù)交換代價(jià)低。
業(yè)務(wù)邏輯移植代價(jià)低。
可以和防火墻結(jié)合配置安全部分。
資源可以被重用。
每層都有較大的靈活性。
J2EE技術(shù):
J2EE是中間件服務(wù)套件,對(duì)于服務(wù)端應(yīng)用的開(kāi)發(fā)者來(lái)說(shuō),使開(kāi)發(fā)變得更容易。它包含:
EJB:它定義了怎樣去寫服務(wù)方組件、提供了一個(gè)在組件和管理它們的應(yīng)用服務(wù)器之間的標(biāo)準(zhǔn)。EJB是J2EE的核心。
RMI和RMI-IIOP:RMI??遠(yuǎn)程過(guò)程調(diào)用;RMI-IIOP是RMI的擴(kuò)展,它可以使用IIOP協(xié)議,可以被CORBA整合使用。
JNDI:JNDI用來(lái)在網(wǎng)絡(luò)上區(qū)分組件和其他資源的位置。
JDBC:是聯(lián)系數(shù)據(jù)庫(kù)的橋梁。
推出EJB1.0后的幾個(gè)月,第一個(gè)基于EJB的應(yīng)用服務(wù)BEA’s WebLogic就誕生了。
二、EJB總攬
EJB采用divide-and-conquer的方式來(lái)實(shí)現(xiàn)服務(wù)方的計(jì)算。事實(shí)上,EJB標(biāo)準(zhǔn)定義了6個(gè)不同的部分協(xié)同工作。每個(gè)部分都被作為EJB配置成功的關(guān)鍵。在這兒,我們分別討論它們的作用。
在EJB的世界里,業(yè)務(wù)解決方案被分為四個(gè)階段發(fā)展:
1、業(yè)務(wù)邏輯模塊化。ERP、金融、電子商務(wù)提供商將產(chǎn)品模塊化,集成在可重用EJB組件中,這樣就意味著任何有EJB和J2EE知識(shí)的人都可以使用這些組件。
2、業(yè)務(wù)組件需要運(yùn)行在分布式的、企業(yè)級(jí)配置的多層環(huán)境中。這樣就需要不同的中間件,推動(dòng)了中間件的發(fā)展。
3、應(yīng)用服務(wù)器和可重用組件捆綁。
4、完整的系統(tǒng)配置。
EJB有好的可移植性,它被分為完全不同的6個(gè)部分,6個(gè)部分之間的關(guān)系:
EJB規(guī)范定義了完成一個(gè)基于EJB組件的分布式應(yīng)用所需要的六個(gè)角色,這六個(gè)角色可以由不同的廠商來(lái)?yè)?dān)當(dāng),也可以某個(gè)廠商擔(dān)當(dāng)多個(gè)角色。這六個(gè)角色是:
Enterprise Bean Provider: EJB組件開(kāi)發(fā)者,負(fù)責(zé)編寫EJB組件,EJB組件開(kāi)發(fā)者是應(yīng)用領(lǐng)域的專家。
Application Assembler: 應(yīng)用組合者,負(fù)責(zé)將各種EJB組合成一個(gè)完整的應(yīng)用系統(tǒng)。
Deployer 部署者:負(fù)責(zé)將包含EJB組件的eJb-Jar文件部署到應(yīng)用服務(wù)器中。
EJB Server Provider: EJB服務(wù)器提供者,負(fù)責(zé)實(shí)現(xiàn)一些底層的系統(tǒng)服務(wù),如交易管理等。EJB服務(wù)器提供者是系統(tǒng)領(lǐng)域的專家。
EJB Container Provider: EJB容器提供者,負(fù)責(zé)提供EJB組件的運(yùn)行環(huán)境,EJB容器提供者和EJB服務(wù)器提供者一般是由相同的廠商擔(dān)當(dāng),提供的產(chǎn)品叫應(yīng)用服務(wù)器。
System Administrator: 系統(tǒng)管理員負(fù)責(zé)為EJB服務(wù)器和容器提供一個(gè)企業(yè)級(jí)的計(jì)算和網(wǎng)絡(luò)環(huán)境。
EJB配置的物理部分分為以下幾部分:
EJB Container:是裝載Enterprise Beans及Enterprise Beans生存的空間,是Beans在運(yùn)行時(shí)相互聯(lián)接的接口,Container必須實(shí)現(xiàn)與Beans之間的約定,Continer提供者也應(yīng)該提供配置工具以便能方便地配置Beans,使其適合各種運(yùn)行環(huán)境。
EJB Server: 主要處理復(fù)雜的底層任務(wù),如分布式對(duì)象、分布式事務(wù)處理的管理、系統(tǒng)OS級(jí)的訪問(wèn)、網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)訪問(wèn)等。EJB Server與EJB Container之間的合約在EJB 1.0 規(guī)范中有詳細(xì)說(shuō)明。大多EJB Server提供者也是EJB Container提供者。
EJB是一種Server方的組件結(jié)構(gòu),它可以非常簡(jiǎn)單的開(kāi)發(fā)基于Java的企業(yè)級(jí)的分布式對(duì)象應(yīng)用。使用EJB可以開(kāi)發(fā)出易升級(jí)的、可靠的、安全的應(yīng)用程序,而不用獨(dú)立開(kāi)發(fā)復(fù)雜的分布式對(duì)象框架;EJB可以迅速開(kāi)發(fā)服務(wù)方應(yīng)用程序,快速建立基于Java的服務(wù)方組件。EJB被設(shè)計(jì)用來(lái)實(shí)現(xiàn)企業(yè)中間件服務(wù)的可移植和可重用性。
如果你對(duì)企業(yè)計(jì)算很陌生,這些概念對(duì)你很有用,EJB是個(gè)很復(fù)雜的主題,應(yīng)該被充分的解釋。在這一章我們討論有關(guān)EJB的主要概念。首先,我們先討論開(kāi)發(fā)企業(yè)級(jí)軟件是為了干什么?為什么說(shuō)像EJB的預(yù)包裝的分布式對(duì)象體系可以簡(jiǎn)化你的生活?在討論中,你將會(huì)對(duì)服務(wù)端的組件結(jié)構(gòu)有宏觀的了解。
服務(wù)端組件結(jié)構(gòu)的需要,我們必須首先了解開(kāi)發(fā)者在建立和配置服務(wù)端環(huán)境下的組件時(shí)通常需要什么?同時(shí),我們將解決圍繞服務(wù)端開(kāi)發(fā)所出現(xiàn)的問(wèn)題,將看到建立一套像EJB標(biāo)準(zhǔn)體系結(jié)構(gòu)的必要性。
軟件組件是一個(gè)軟件組件是一段代碼,它用來(lái)實(shí)現(xiàn)一系列定義好的接口。組件不是完整的。應(yīng)用程序,它們不能被獨(dú)立運(yùn)行。更貼切的說(shuō),它們是看作是許多大型問(wèn)題分割成的小問(wèn)題。軟件組件的思想非常有用。公司可以買來(lái)定義好的可用來(lái)解決某一問(wèn)題的模塊,將它和其他組件一起編譯用以解決大型問(wèn)題。
組件結(jié)構(gòu)是為了使組件開(kāi)發(fā)過(guò)程更加容易,需要為建立、管理、維持組件建立規(guī)范。開(kāi)發(fā)組件的開(kāi)發(fā)工具,是在建立組件時(shí),應(yīng)該允許開(kāi)發(fā)者集中精力在組件的背后開(kāi)發(fā)核心邏輯,使開(kāi)發(fā)者不需要考慮太多的標(biāo)準(zhǔn)細(xì)節(jié)問(wèn)題,從而快速開(kāi)發(fā)應(yīng)用程序。例如IDE:Symantec的Visual Cafe,IBM的VisualAge for Java,Inprise的Jbuilder 2,這些工具可以幫助你快速的建立和調(diào)試組件。
管理配置好的組件容器,組件容器為你的組件運(yùn)行提供了一個(gè)運(yùn)行時(shí)環(huán)境。同時(shí)也提供了一套供大多數(shù)組件使用的通用服務(wù)。配置和維持組件工具,從組件提供商購(gòu)買了組件后,還需要有一套工具來(lái)幫助配置和維持這些組件。
Java:完美實(shí)現(xiàn)組件結(jié)構(gòu)
對(duì)于成功運(yùn)用在解決商業(yè)問(wèn)題的一個(gè)組件,無(wú)論是組件開(kāi)發(fā)商還是使用組件的客戶都必須遵守調(diào)用組件方法的語(yǔ)法和語(yǔ)義。開(kāi)發(fā)商出版有關(guān)調(diào)用組件的規(guī)范,客戶代碼必須遵守它們。為了防止當(dāng)開(kāi)發(fā)商提供了一個(gè)新版本的組件,或更改了組件規(guī)范,客戶方就必須重新編寫或編譯它們的代碼,因此面向?qū)ο笤O(shè)計(jì)提出了一種新的設(shè)計(jì)方法:通過(guò)從組件的實(shí)現(xiàn)中分離出接口。
組件接口和組件邏輯,為了使接口/實(shí)現(xiàn)分離這種方式變得更有效,開(kāi)發(fā)者必須為組件接口寫客戶代碼(這被稱為基于接口的程序設(shè)計(jì)),通過(guò)這種分離,可以改變服務(wù)方邏輯而不用更改客戶方代碼。
Java中的組件結(jié)構(gòu)
現(xiàn)在讓我們了解什么是組件結(jié)構(gòu),看看在Java世界里存在那些組件結(jié)構(gòu)。首先,你應(yīng)該了解什么是JavaBeans,JavaBeans組件是小的應(yīng)用程序塊,可以使用JavaBean去集合成大型的組件,從而編譯完整的應(yīng)用程序。然而,你不能配置一個(gè)JavaBean,因?yàn)橐粋€(gè)JavaBean不是一個(gè)完全的應(yīng)用程序。JavaBean可以幫助你構(gòu)建更大的可配置的軟件。因?yàn)椴恍枰渲茫琂avaBean不需要運(yùn)行時(shí)環(huán)境,也不需要容器來(lái)對(duì)它進(jìn)行實(shí)例化、破壞、提供其他服務(wù)的操作。應(yīng)用程序本身是由許多JavaBean構(gòu)成的。
相比較,EJB標(biāo)準(zhǔn)定義了一個(gè)組件結(jié)構(gòu)來(lái)配置組件,被稱為企業(yè)級(jí)的Beans。企業(yè)級(jí)的Beans是比較大的、粗糙的被用來(lái)配置的應(yīng)用程序組件。他們能被破壞,也能被用來(lái)和其他組件組合成更大的應(yīng)用程序系統(tǒng)。可配置組件在容器內(nèi)被配置,容器提供了對(duì)組件的運(yùn)行時(shí)服務(wù)。例如實(shí)例化。
企業(yè)級(jí)Beans和兩種其他的Java組件十分相似:applets和servlets。Applets可以在Web頁(yè)中配置,瀏覽器的Appletviewer為其提供了運(yùn)行時(shí)的容器。Servlets可以在Web Server中被配置,Webserver的servlet engine為提供運(yùn)行時(shí)的容器。企業(yè)級(jí)Beans可以在應(yīng)用程序服務(wù)器中被配置,應(yīng)用服務(wù)器為其提供了運(yùn)行時(shí)的容器。
它們?nèi)咧g真正的不同是每個(gè)組件類型可以延伸的域大小。 Applets是輕便Java程序,它能夠被任意的下載和運(yùn)行。例如它可以從Web Server中下載到瀏覽器。 Servlets是可以被用來(lái)延伸Web server功能的網(wǎng)絡(luò)組件。它是面向請(qǐng)求/回答的,從許多客戶端獲得請(qǐng)求,再給它們發(fā)應(yīng)答。這樣使得它被廣泛用于執(zhí)行Web任務(wù)。 Applets和servlets適用于客戶方操作。而企業(yè)級(jí)Bean不擴(kuò)展客戶端操作,它是服務(wù)端組件,執(zhí)行服務(wù)端操作;例如執(zhí)行復(fù)雜運(yùn)算、執(zhí)行大量的商業(yè)傳輸。
服務(wù)端所需一個(gè)完整的組件結(jié)構(gòu)遵循以下方式:
開(kāi)發(fā)者寫可重用組件;
提供商寫組件容器:用以給組件提供運(yùn)行時(shí)環(huán)境和服務(wù);
提供商提供開(kāi)發(fā)、配置和維持工具;
這些方式保證了可重用性;
多層結(jié)構(gòu)
服務(wù)方配置是用來(lái)支持用戶同時(shí)執(zhí)行并發(fā)、安全、可靠、有效的操作的軟件。服務(wù)方配置一般被分成多層。每層實(shí)現(xiàn)不同的功能,每層有一個(gè)或多個(gè)組件。注意:層是個(gè)抽象的概念,在物理上它并不存在。下面有個(gè)分層的例子:
代表層:這些容器組件處理用戶接口和用戶交互。例如,代表層是一個(gè)單獨(dú)的應(yīng)用程序,可以用VB來(lái)寫。基于Web配置的代表層可以使用Java servlets,Java server pages或Java applets。
業(yè)務(wù)邏輯層:是用來(lái)解決業(yè)務(wù)問(wèn)題的容器組件的集合。這些組件常被用來(lái)處理高執(zhí)行度的工作,它們常用安全性的語(yǔ)言來(lái)寫,例如:Java、C。
數(shù)據(jù)層:被業(yè)務(wù)邏輯層用來(lái)保持狀態(tài)的持久性。數(shù)據(jù)層的中心是一個(gè)或多個(gè)數(shù)據(jù)庫(kù)。分層的優(yōu)點(diǎn)是盡量隔離各層。
兩層結(jié)構(gòu),通常,大多數(shù)配置是兩層結(jié)構(gòu)。將業(yè)務(wù)邏輯層和另外兩層的一個(gè)合并:可能和代表層合并。可能和數(shù)據(jù)層合并。代表層和業(yè)務(wù)邏輯層合并。如把代表層和業(yè)務(wù)邏輯層這一層作為客戶端,數(shù)據(jù)層作為服務(wù)端,則形成fat客戶端,而thin服務(wù)端的情況。在兩層結(jié)構(gòu)中,客戶端應(yīng)用程序通過(guò)數(shù)據(jù)庫(kù)橋API與數(shù)據(jù)層相連。例如:ODBC、JDBC。
這樣的兩層結(jié)構(gòu)有以下特征:
配置代價(jià)非常高。數(shù)據(jù)庫(kù)驅(qū)動(dòng)必須在每一個(gè)客戶層上安裝和配置。
數(shù)據(jù)庫(kù)驅(qū)動(dòng)交換代價(jià)高。轉(zhuǎn)接一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng),需要在各個(gè)客戶端重新安裝客戶端驅(qū)動(dòng)。
數(shù)據(jù)庫(kù)類型轉(zhuǎn)型代價(jià)高。
業(yè)務(wù)邏輯移植代價(jià)高。
數(shù)據(jù)庫(kù)連接代價(jià)高。
網(wǎng)絡(luò)性能發(fā)揮低。
將業(yè)務(wù)邏輯層部分并入數(shù)據(jù)層。
形成客戶端thin,而服務(wù)端fat的情況。
N層結(jié)構(gòu),其中將代表層、業(yè)務(wù)邏輯層、數(shù)據(jù)層各自為一層。
特點(diǎn):
配置代價(jià)低。
數(shù)據(jù)庫(kù)交換代價(jià)低。
業(yè)務(wù)邏輯移植代價(jià)低。
可以和防火墻結(jié)合配置安全部分。
資源可以被重用。
每層都有較大的靈活性。
J2EE技術(shù):
J2EE是中間件服務(wù)套件,對(duì)于服務(wù)端應(yīng)用的開(kāi)發(fā)者來(lái)說(shuō),使開(kāi)發(fā)變得更容易。它包含:
EJB:它定義了怎樣去寫服務(wù)方組件、提供了一個(gè)在組件和管理它們的應(yīng)用服務(wù)器之間的標(biāo)準(zhǔn)。EJB是J2EE的核心。
RMI和RMI-IIOP:RMI??遠(yuǎn)程過(guò)程調(diào)用;RMI-IIOP是RMI的擴(kuò)展,它可以使用IIOP協(xié)議,可以被CORBA整合使用。
JNDI:JNDI用來(lái)在網(wǎng)絡(luò)上區(qū)分組件和其他資源的位置。
JDBC:是聯(lián)系數(shù)據(jù)庫(kù)的橋梁。
推出EJB1.0后的幾個(gè)月,第一個(gè)基于EJB的應(yīng)用服務(wù)BEA’s WebLogic就誕生了。
二、EJB總攬
EJB采用divide-and-conquer的方式來(lái)實(shí)現(xiàn)服務(wù)方的計(jì)算。事實(shí)上,EJB標(biāo)準(zhǔn)定義了6個(gè)不同的部分協(xié)同工作。每個(gè)部分都被作為EJB配置成功的關(guān)鍵。在這兒,我們分別討論它們的作用。
在EJB的世界里,業(yè)務(wù)解決方案被分為四個(gè)階段發(fā)展:
1、業(yè)務(wù)邏輯模塊化。ERP、金融、電子商務(wù)提供商將產(chǎn)品模塊化,集成在可重用EJB組件中,這樣就意味著任何有EJB和J2EE知識(shí)的人都可以使用這些組件。
2、業(yè)務(wù)組件需要運(yùn)行在分布式的、企業(yè)級(jí)配置的多層環(huán)境中。這樣就需要不同的中間件,推動(dòng)了中間件的發(fā)展。
3、應(yīng)用服務(wù)器和可重用組件捆綁。
4、完整的系統(tǒng)配置。
EJB有好的可移植性,它被分為完全不同的6個(gè)部分,6個(gè)部分之間的關(guān)系:
EJB規(guī)范定義了完成一個(gè)基于EJB組件的分布式應(yīng)用所需要的六個(gè)角色,這六個(gè)角色可以由不同的廠商來(lái)?yè)?dān)當(dāng),也可以某個(gè)廠商擔(dān)當(dāng)多個(gè)角色。這六個(gè)角色是:
Enterprise Bean Provider: EJB組件開(kāi)發(fā)者,負(fù)責(zé)編寫EJB組件,EJB組件開(kāi)發(fā)者是應(yīng)用領(lǐng)域的專家。
Application Assembler: 應(yīng)用組合者,負(fù)責(zé)將各種EJB組合成一個(gè)完整的應(yīng)用系統(tǒng)。
Deployer 部署者:負(fù)責(zé)將包含EJB組件的eJb-Jar文件部署到應(yīng)用服務(wù)器中。
EJB Server Provider: EJB服務(wù)器提供者,負(fù)責(zé)實(shí)現(xiàn)一些底層的系統(tǒng)服務(wù),如交易管理等。EJB服務(wù)器提供者是系統(tǒng)領(lǐng)域的專家。
EJB Container Provider: EJB容器提供者,負(fù)責(zé)提供EJB組件的運(yùn)行環(huán)境,EJB容器提供者和EJB服務(wù)器提供者一般是由相同的廠商擔(dān)當(dāng),提供的產(chǎn)品叫應(yīng)用服務(wù)器。
System Administrator: 系統(tǒng)管理員負(fù)責(zé)為EJB服務(wù)器和容器提供一個(gè)企業(yè)級(jí)的計(jì)算和網(wǎng)絡(luò)環(huán)境。
EJB配置的物理部分分為以下幾部分:
EJB Container:是裝載Enterprise Beans及Enterprise Beans生存的空間,是Beans在運(yùn)行時(shí)相互聯(lián)接的接口,Container必須實(shí)現(xiàn)與Beans之間的約定,Continer提供者也應(yīng)該提供配置工具以便能方便地配置Beans,使其適合各種運(yùn)行環(huán)境。
EJB Server: 主要處理復(fù)雜的底層任務(wù),如分布式對(duì)象、分布式事務(wù)處理的管理、系統(tǒng)OS級(jí)的訪問(wèn)、網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)訪問(wèn)等。EJB Server與EJB Container之間的合約在EJB 1.0 規(guī)范中有詳細(xì)說(shuō)明。大多EJB Server提供者也是EJB Container提供者。