| 深入探究EJB應用技術(shù)的體系結構 |
| 2006-04-05 來(lái)源:網(wǎng)絡(luò )文摘 作者:網(wǎng)絡(luò )文摘 |
| EJB的體系結構: EJB的上層的分布式應用程序是基于對象組件模型的,低層的事務(wù)服務(wù)用了API技術(shù)。EJB技術(shù)簡(jiǎn)化了用JAVA語(yǔ)言編寫(xiě)的企業(yè)應用系統的開(kāi)發(fā),配置,和執行。EJB的體系結構的規范由Sun Microsystems公司制定。Inprise的EJB容器是基于1.1版的規范。 EJB技術(shù)定義了一組可重用的組件:Enterprise Beans。你可以利用這些組件,象搭積木一樣的建立你的分布式應用程序。當你把代碼寫(xiě)好之后,這些組件就被組合到特定的文件中去。每個(gè)文件有一個(gè)或多個(gè)Enterprise Beans,在加上一些配置參數。最后,這些Enterprise Beans被配置到一個(gè)裝了EJB容器的平臺上??蛻?hù)能夠通過(guò)這些Beans的home接口,定位到某個(gè)beans,并產(chǎn)生這個(gè)beans的一個(gè)實(shí)例。這樣,客戶(hù)就能夠調用Beans的應用方法和遠程接口。 EJB服務(wù)器作為容器和低層平臺的橋梁管理著(zhù)EJB容器和函數。它向EJB容器提供了訪(fǎng)問(wèn)系統服務(wù)的能力。例如:數據庫的管理和事務(wù)的管理,或者對于其它的Enterprise的應用服務(wù)器。 所有的EJB 實(shí)例都運行在EJB容器中。容器提供了系統級的服務(wù),控制了EJB的生命周期。因為容器掌握了絕大多數系統級的issues(呵呵,不知道怎么翻譯)。Enterprise Beans 的開(kāi)發(fā)者不需要應用邏輯考慮進(jìn)來(lái)。通常來(lái)說(shuō),EJB容器掌握了以下的系統級issues. 1、Security--配置描述器(The Deployment descriptor)定義了客戶(hù)能夠訪(fǎng)問(wèn)的不同的應用函數。容器通過(guò)只允許授權的客戶(hù)訪(fǎng)問(wèn)這些函數來(lái)達到這個(gè)效果。 2、Remote Connectivity--容器為遠程鏈接管理著(zhù)低層的通信issues,而且對Enterprise Beas的開(kāi)發(fā)者和客戶(hù)都隱藏了通信issues.Enterprise Beans的開(kāi)發(fā)者在編寫(xiě)應用方法的時(shí)候,就象是在條用本地的平臺一樣的??蛻?hù)也不清楚他們調用的方法可能是在遠程被處理的。 3、Life Cycle managment--客戶(hù)簡(jiǎn)單的創(chuàng )建一個(gè)Enterprise beans的實(shí)例,并通常取消一個(gè)實(shí)例。而容器管理著(zhù)Enterprise Beans的實(shí)例,使Enterprise Beans實(shí)現最大的效能和內存利用率。容器能夠這樣來(lái)激活和去活Enterprise Beans,保持眾多客戶(hù)共享的實(shí)例池。等等。 4、Trasction management―配置描述器定義了Enterprise beans 的事務(wù)處理的需求。容器管理著(zhù)那些管理分? 事務(wù)處理的復雜的issues。這些事務(wù)可能要在不同的平臺之間更新數據庫。容器使這些事務(wù)之間互相獨立,互不干擾。保證所有的更新數據庫都是成功發(fā)生的,否者,就回滾到事務(wù)處理之前的狀態(tài)。 Enterprise Beans 組件: Enterprise Beans 是基于分布式事務(wù)處理的企業(yè)級應用程序的組件。所有的Enterprise beans都有如下的特點(diǎn):
有兩種類(lèi)型的Enterprise beans:
Session beans: Session beans 的生命周期是相對較短的。典型的是,只有當client保持會(huì )話(huà)的時(shí)候,Session beans 才是活著(zhù)的。一旦client退出了,Session beans 就不再與client相聯(lián)系了。Session beans被看成是瞬時(shí)的,因為如果容器崩潰了,那么client必須重新建立一個(gè)新的Session對象來(lái)繼續會(huì )話(huà)。 一個(gè)Session bean典型的聲明了與client的互操作或者會(huì )話(huà)。也就是說(shuō),Session bean了在客戶(hù)會(huì )話(huà)期間,通過(guò)方法的調用,掌握Client的信息。一個(gè)具有狀態(tài)的Session bean稱(chēng)為有狀態(tài)的Session bean.當client終止與Session beans互操作的時(shí)候.會(huì )話(huà)終止了,而且,bean 也不再擁有狀態(tài)值。 一個(gè)Session bean也可能是一個(gè)無(wú)狀態(tài)的 session bean.無(wú)狀態(tài)的Session beans并不掌握它的客戶(hù)的信息或者狀態(tài)。Client能夠調用beans的方法來(lái)完成一些操作。但是,beans只是在方法調用的時(shí)候才知道client的參數變量。當方法調用完成以后,beans并不繼續保持這些參數變量。這樣,所有的無(wú)狀態(tài)的session beans的實(shí)例都是相同的,除非它正在方法調用期間。這樣,無(wú)狀態(tài)的Session beans就能夠支持多個(gè)client.容器能夠聲明一個(gè)無(wú)狀態(tài)的Session beans.能夠將任何Session beans指定給任何client. Entity Beans: Entity Beans對數據庫中的數據提供了一種對象的視圖。例如:一個(gè)Entity bean能夠模擬數據庫表中一行相關(guān)的數據。多個(gè)client能夠共享訪(fǎng)問(wèn)同一個(gè)Entity bean.多個(gè)client也能夠同時(shí)的訪(fǎng)問(wèn)同一個(gè)Entity bean.Entity beans通過(guò)事務(wù)的上下文來(lái)訪(fǎng)問(wèn)或更新下層的數據。這樣,數據的完整性就能夠被保證。 Entity Beans能存活相對教長(cháng)的時(shí)間,并且狀態(tài)是持續的。只要數據庫中的數據存在,Entity beans就一直存活。而不是按照應用程序或者服務(wù)進(jìn)程來(lái)說(shuō)的。即使EJB容器崩潰了,Entity beans也是存活的。Entity Beans生命周期能夠被容器或者 Beans自己管理。如果由容器控制著(zhù)保證 Entity beans持續的issus。如果由Beans自己管理,就必須寫(xiě)Entity beans的代碼,包括訪(fǎng)問(wèn)數據庫的調用。 Entity Beans是由主鍵(primary key 一種唯一的對象標識符)標識的。通常,主鍵與標識數據庫中的一塊數據,例如一個(gè)表中的一行,的主鍵是相同的。主鍵是client能夠定位特定的數據塊。 EJB roles: EJB體系結構通過(guò)把編程的過(guò)程分為6個(gè)不同的角色而使開(kāi)發(fā)復雜的的應用系統變的簡(jiǎn)單。6個(gè)不同的角色,每個(gè)都有特定的任務(wù)。6個(gè)角色包括下層的服務(wù),應用程序的開(kāi)發(fā),配置和操作說(shuō)明(issues) EJB體系結構能夠簡(jiǎn)化應用程序開(kāi)發(fā)人員的工作。在EJB體系結構中,容器和代理服務(wù)承擔了很多在其他環(huán)境中又程序設計嗽背械5墓ぷ鰲U庋?的代理提供了很多原來(lái)需要程序設計人員編寫(xiě)代碼的系統級的服務(wù)??/p> Infrastructure roles;(下層構造角色) EJB Server Providor服務(wù)提供者是典型的提供分布式低層服務(wù)的代理。EJB服務(wù)提供者提供了一個(gè)分布式應用程序開(kāi)發(fā)者需要的平臺和設施。也提供了分布式程序的運行時(shí)環(huán)境。 EJB Container Providor 容器提供者是分布式系統,事務(wù)處理,安全方面的專(zhuān)家容器提供者提供了一個(gè)EJB的配置工具,和這些配置實(shí)例的運行時(shí)支持。
一個(gè)容器對一個(gè)或多個(gè)EJB來(lái)說(shuō),是一個(gè)運行時(shí)系統。它將Enterprise Beans和EJB服務(wù),包括事務(wù)服務(wù),安全服務(wù),分布式網(wǎng)絡(luò )管理等膠合在一起。容器是既是一個(gè)定制的代碼和對特定的 Enterprise beans產(chǎn)生詳細代碼的工具。容器也提供了一個(gè)配置Enterprise beans的工具和管理監視應用程序的方法。 Application roles:(應用角色) Enterprise beans Provider:Beans提供者在應用領(lǐng)域方面是專(zhuān)家。例如:Beans提供者可能是金融或電信方面的專(zhuān)家。Beans提供者提供了業(yè)務(wù)tasks,Enterprise beans的業(yè)務(wù)方法,定義了beans的romote和home接口,還定義了beans的配置描述器。因為容器管理著(zhù)系統級的任務(wù),所以,Beans提供者便不需要關(guān)心分布處理,事務(wù)處理,安全性能等從應用方面看來(lái)沒(méi)什么關(guān)系的方面。 Application Assembler程序組裝器: 這是一個(gè)將定制的Enterprise beans和其它的組件,例如,GUI client,applet,Servelet等組裝成一個(gè)完整的應用程序的行家。在Enterprise的配置器下,組裝器在組裝成一個(gè)應用程序的時(shí)候,只關(guān)心beans的接口,包括romote接口和home接口。而不關(guān)心這些接口是怎么實(shí)現的。組裝的結果就是一個(gè)一個(gè)的應用程序,或者由多個(gè)Enterprise beans組合成的一個(gè)比較復雜的Enterprise beans. Deployment and Operate roles配置和操作角色 配置器為特定的Enterprise beans配置特殊的操作環(huán)境。配置器為了適應應用程序,將多個(gè)Enerprise beans 組合起來(lái),通過(guò)修改Enterprise beans 的屬性來(lái)達到配置相應的操作環(huán)境。例如,配置器通過(guò)設置配置描述符的相應的屬性來(lái)設置事務(wù)和安全方針。配置器的另一個(gè)任務(wù)是將應用程序與現有的Enterprise管理軟件結合起來(lái)。 System Administrator系統管理者; 是與配置應用有關(guān)的。管理者配置個(gè)管理Enterprise計算和網(wǎng)絡(luò )服務(wù)的低層,包括EJB服務(wù)和容器。管理員監視著(zhù)應用服務(wù)器的運行狀況,當應用服務(wù)器不正常運行是就采取相應的措施。典型的說(shuō),管理員使用Enterprise管理工具來(lái)與應用程序打交道,通過(guò)由容器提供的hooks來(lái)配置。 傳統的應用程序開(kāi)發(fā)者現在是Enterprise beans的提供者。也可能是應用程序的裝配者。這樣能使他們將主要精力放在應用問(wèn)題或者應用邏輯上面。當安裝Enterprise beans時(shí),配置器定義了一系列的配置方針。機制的復雜性和執行配置的方針就交給了專(zhuān)門(mén)的代理。雖然分布式的應用程序還是比較復雜,可是,應用程序設計者的工作卻變的簡(jiǎn)單了,因為所有復雜的工作都交給了EJB服務(wù)器和容器提供者了。 通過(guò)大量的設計之前的定義和命名約定,EJB達到了前面提到的目的。這樣的編程體系結構限制了一定的自由,但是,允許EJB服務(wù)器和容器提供者假定 貿絳虻納杓疲?并以一種行之有效的方式來(lái)支持他們??/p> EJB的設計模式和命名約定: 有三種途徑來(lái)建立一個(gè)基于對象的,多層的,分布式的系統:無(wú)狀態(tài)服務(wù)的途徑,基于會(huì )話(huà)的途徑和持續對象的途徑。 無(wú)狀態(tài)的服務(wù)是通過(guò)對象的操作提供一種功能的函數,但是,不保持會(huì )話(huà)的狀態(tài)。當一個(gè)客戶(hù)使用無(wú)狀態(tài)的對象時(shí),客戶(hù)不能夠提供上一次操作的信息。 基于會(huì )話(huà)的設計產(chǎn)生了一個(gè)中間層的對象,稱(chēng)為一個(gè)會(huì )話(huà)(Session)。這個(gè)會(huì )話(huà)可以看成是這個(gè)客戶(hù)的代理。典型的,會(huì )話(huà)的生命是由客戶(hù)和所在的服務(wù)程序決定的??蛻?hù)如果完成了會(huì )話(huà)就可以將對象移走。如果服務(wù)終止了,會(huì )話(huà)對象就會(huì )超時(shí)。會(huì )話(huà)對象就會(huì )變的無(wú)效了。 持續對象設計模式綁定了存在數據庫中的一塊數據。提供了操作這塊數據的一些個(gè)操作。持續對象是由多個(gè)客戶(hù)共享的。起生命期是由存儲數據的庫所決定的。 EJB規范中將這些分別稱(chēng)做:stateless Session, stateful Session, Entiry Beans.Session Beans模式就是基于會(huì )話(huà)的設計模式。Entiry Beans模式就是持續對象設計模式。每種模式都定義了一些接口和命名約定。 Enterprise JavaBeans infrastruct (EJB的基礎結構) 容器和服務(wù)提供者實(shí)現了EJB的基礎構造。這些基礎構造處理了EJB的分布式方面,事務(wù)管理,安全性方面。EJB規范定義了基礎構造和J ava API的為了適應各種情況的要求。而沒(méi)有去指定用什么技術(shù),平臺,協(xié)議來(lái)實(shí)現他們。 Enterprise beans, container, server說(shuō)明了EJB基礎結構的要求,EJB基礎結構必須提供客戶(hù)和Enterprise beans通信的通道。雖然這不是EJB規范所定義的。但保證通道的安全也是很重要的。特別是當客戶(hù)通過(guò)internet訪(fǎng)問(wèn)遠程的Enterprise beans時(shí)。EJB基礎結構也必須能夠加強Enterprise beans 的訪(fǎng)問(wèn)控制。 Enterprise beans所有的數據的持續性必須被保證。EJB的低 Container 容器可能是EJB里面最重要的概念。因為它向程序開(kāi)發(fā)人員提供了最大程度的方便?;趯ο蟮闹虚g層軟件平臺如CORBA或者遠過(guò)程調用RMI是程序開(kāi)發(fā)者從網(wǎng)絡(luò )傳輸中解放出來(lái),通過(guò)提供對象定位機制,數據重組機制等等。容器的概念則走的更遠一點(diǎn)。通過(guò)簡(jiǎn)化分布式應用程序的那些復雜的方面,如:安全性,事務(wù)協(xié)調性,數據持久性。 一旦Enterprise Beans準備好了可以配置了。就被打包成一個(gè)標準的JAVA文件,ejb-jar文件。一個(gè)ejb-jar文件可以包括一個(gè)或多個(gè)的Enterprise Beans。對每一個(gè)Enterprise beans,都由它的接口,類(lèi),和配置描述器。
Enterprise Beans Provider提供如下東西給ejb-jar 文件:
配置一個(gè)Enterprise Beans 意味著(zhù)將一個(gè)Enterprise Bean安裝到容器中去。安裝過(guò)程包括了如下幾個(gè)方面:
在一個(gè)EJB容器中可以又任意多個(gè)Enterprise beans.除了安裝和執行以外,容器也提供了配置Enterprise beans的工具。 為什么用Inprise的EJB 容器?Inprise EJB容器提供的完全的服務(wù) 對于Enterprise beans的開(kāi)發(fā)者來(lái)說(shuō),EJB 容器是一個(gè)高級Enterprise類(lèi)產(chǎn)品。因為它有如下優(yōu)點(diǎn): 完整的,靈活的運行時(shí)環(huán)境: 與其它的EJB服務(wù)不一樣,Inprise 的EJB容器服務(wù)并沒(méi)有限制一定要分開(kāi)。而是任意個(gè)數的Enterprise beans可以放在任意個(gè)數的容器中,這些容器也可以放在任意個(gè)數機器上。并且支持分布式的事務(wù)協(xié)議,允許Enterprise beans的分別裁定。允許部分的配置你的應用,而將你的性能配置成最優(yōu)化。 Inprise 的EJB是建立在Vbroker和RMI―IIOP之上的。 Enterprise的EJB容器是一個(gè)CORBA對象: Inprise 的java2iiop編譯器和EJB容器一樣,都是與CORBA兼容的。EJB容器能夠理解RMI調用,但是,它用IDL來(lái)存放接口定義。雖然Java2iiop編譯器從java接口產(chǎn)生了stub 和skeleton.也能夠從java接口中產(chǎn)生IDL。然后在其他語(yǔ)言里面用。對于一個(gè)CORBA客戶(hù)端,EJB容器是一個(gè)CORBA服務(wù),EJB容器工具就是與控制EJB的功能相同的CORBA工具。 EJB容器是建立在JNDI和CosNaming,JTS/OTS基礎山的。他們都是完全支持CORBA的。 容器對不同的Enterprise beans 的支持: EJB容器的主要的特征就是它提供對各種各樣的Enterprise beans的管理和支持。包括: EJB容器可以包括一個(gè)或多個(gè)的jar文件。每一個(gè)jar文件又能夠包括多個(gè)的Enterprise beans。每個(gè)Enterprise bean都包括一個(gè)配置描述器。一個(gè)EJBhome接口,一個(gè)EJBremote接口,還有Enterprise bean的實(shí)現代碼。 配置的支持: Inprise 容器提供了產(chǎn)生代碼的編譯器。也提供了一個(gè)驗證的工具來(lái)在配置之前檢查你的Enterprise beans.支持EJB1。1的JNDI命名基于XML的配置描述器。 事務(wù)管理者: 事務(wù)管理者提供了事務(wù)管理的手段。包括分布式的兩段提交的支持。遵從最新的SUN公司JTS規范。也支持最新的OMG的OTS規范。在開(kāi)發(fā)時(shí)盡量少用JTS而在配置時(shí)使用健壯的ITS。 JDBC鏈接池和事務(wù)綜合: 所有JDBC訪(fǎng)問(wèn)數據庫都是通過(guò)DataSource對象的實(shí)現來(lái)完成的。DataSource對象與數據庫的池鏈接還有JTS管理的全局的事務(wù)處理和用JDBC管理的數據庫事務(wù)處理。 命名服務(wù): 命名服務(wù)提供了分布式的命名管理。服務(wù)遵從JAVA的命名和目錄規范(JNDS)。也遵從OMG的cosNaming規范。與事務(wù)服務(wù)類(lèi)似,在配置的時(shí)候,你可以用JNS,也可以用更健壯的INS。JNDI提供的容器能夠運行在其他的JNDI實(shí)現之上。這樣就能夠使用其他的命名服務(wù),例如:LDAP。 安全性的支持: 在CORBA之上的Inprise 的安全服務(wù)是附加的。 JAVA數據庫: Java數據庫提供了一個(gè)全關(guān)系型的高性能的數據庫來(lái)存儲Enterprise beans的狀態(tài)。 JAVA數據庫既可以運行在同一個(gè)進(jìn)程的容器中,或者,為了提高性能,也可以運行在一個(gè)單獨的進(jìn)程中。實(shí)際上,JAVA 數據庫是即插即用的。意味著(zhù)終端用戶(hù)能夠用一個(gè)另外的實(shí)現就取代了所有的JAVA版本。例如,能夠實(shí)現一個(gè)用別的數據庫來(lái)存儲會(huì )話(huà)狀態(tài)和Entiry Data的后臺存儲。 容器管理的Entity beans的持久性: Inprise 提供了一個(gè)CMP(Container-Managed Persistence)引擎來(lái)提供透明的對象關(guān)系映射和在純JDBC上的持續框架。更進(jìn)一步,第三方的工具可以通過(guò)開(kāi)放的API插進(jìn)來(lái)。 與其他組件的結合: 在配置環(huán)境的真實(shí)世界里,EJB的四個(gè)模式能夠與以下的組件工作在一起: |
聯(lián)系客服