EJB對於在產品環境中開發、配置、管理可靠的企業應用來說是一種最新穎的結構。本文將闡明在企業開發應用中使用EJB結構所能帶來的好處。 本文討論企業應用程序的結構的演變。它必須進行演變,這是不可避免的,因為根本的計算機支持和傳送系統已經發生了巨大的變化,而且在以後這種改變還將繼續。隨著網絡和因特網的發展,現在越來越多的企業應用程序是基於網絡的,包括企業內部互聯網絡和企業外部互聯網絡應用程序。Java 2 平台,企業版(J2EE)和EJB結構一起為基於網絡的企業應用程序的開發提供了上好的支持。 使用EJB開發結構具有許多好處。本文描繪了EJB結構的優點,以及它為應用程序開發者和使用者所帶來的益處。 1•1從兩層到J2EE結構 企業應用程序的結構已經進行了廣泛的演變。第一代企業應用程序是集中式主機應用程序的開發。在20世紀80年代後期合90年代早期,大多數新開發的企業應用程序遵循一種兩層結構的處理方法(也即是眾所周知的客戶端/服務器結構)。後來,這種企業結構演變到了三層結構,然後演變成了基於網絡開發的結構。當前的演變狀態是以J2EE應用程序結構為代表。 這一部分將由兩層結構入手,討論企業應用程序結構的演變歷程。我們已經選擇不去描述集中式主機結構是如何演變到兩層結構的,部分是因為這對於本書中實質性的東西沒有什麼中肯的幫助。 1•1•1 兩層應用程序結構 藉由兩層應用程序,一個商務系統被構造成為一個收集在客戶機上執行的操作系統層次應用程序運行的系統。典型的,這會是公司的一部個人計算機。每一個這樣的應用程序實現一個或幾個商務程序,而且包括在商務程序與用戶之間的具有圖形用戶界面的邏輯表達。(一個商務程序就是一個用戶與一些企業信息的封裝。)運行於客戶機上的應用程序,通過網絡與存儲公司數據信息的數據庫服務器進行通信。數據庫服務器存儲著公司的數據,客戶端的應用程序一般通過結構查詢語言(SQL)聲明訪問數據庫。見圖1•1
圖1•1兩層應用程序結構兩層結構在Web網出現之前對大部分應用程序都是適用的。它的主要的優點在於,開發兩層應用程序很容易,況且,表達邏輯與商業邏輯共存於同一個處理過程,開發者不需要處理復雜的分布式應用程序。 然而,它確是弊大於利。兩層結構的主要弊端是它沒有將事物邏輯與表達邏輯分開。在兩層結構的應用程序中,程序員不能清楚地將商業邏輯與表達邏輯分開。這就導致了一些問題的出現:易破壞數據庫的完整性,難於管理,難於維護,安全沒保障,不易測量,有限的客戶請求,只能局限於一種表達方式。 •容易危及數據庫的完整性。因為每一個客戶端程序均嵌入了商業邏輯,客戶端程序中的一個錯誤或缺陷可以容易的危機到企業數據庫的完整性。 •在大的企業中難於管理。 在這種結構中,應用程序是在客戶機上配置的,公司的IT部必須維護應用程序。如果一個事務處理改變了,IT部門必須用新版本的應用程序替換舊版本。對於一個具有數萬台PC機的公司來說,這是一項非常困難的任務,尤其是當這些PC機中的許多可能是“Unmanaged”膝上機的時候。 •代碼難於維護。兩層結構不支持組件編程,這就使維護應用程序代碼變得非常困難。對於較大的組織,維護的困難指數倍的增加了,這是由於它們一般使用較多的程序員去編寫和維護應用程序。 •應用程序被暴於安全隱患中。一個有經驗的程序員也許能夠“黑掉”安裝在PC機上的應用程序,從而達到改變應用程序所要實現的事務處理。 •訪問比例有限;對於高數目的用戶難於依比例確定。 每一個運行的應用程序一般需要一個到公司數據庫的連接。因為開放的連接數目由數據庫產品本身的特性所限制,所以,所有用戶同時運行應用程序訪問數據庫是不可能的。 •需要統一的客戶端結構。在Java語言出現前,兩層結構需要客戶機必須是同一的—例如,它需要所有的客戶機都運行相同的操作系統。 •應用程序固定到一種特定的表達形式。因為同一個應用程序不但實現事務處理,還實現了表達處理,對於不同的表達方式,再利用同一事務處理的實現方法是不可能的,例如一個浏覽器或是智能移動電話。 盡管在全球網出現之前,企業可以存活於兩層結構的限制中,全球網的瘋狂的勢頭和良好的增長改變了原有的規則。上述的兩層結構的不足使它從根本上完全不適應全球網的發展。這主要因為全球網的客戶端與生俱來的缺乏智能化,而且這樣的客戶端大量的存在。因此,應用程序的開發者及它們的用戶已經在開始尋找現在應用程序結構的替代者。 1•1•2傳統的三層應用程序結構傳統的三層結構克服了一些兩層結構的弊端。三層結構將表達邏輯重商業邏輯中分離開。它將商業邏輯放於服務器上,只有表達邏輯是在客戶個人計算機上進行配置。見圖1•2:
圖1•2三層應用程序結構三層結構帶來了一定數量的改進。中層的服務器通過再利用昂貴的資源而提高了訪問比例,諸如數據庫的連接,多用戶交叉訪問。改進的訪問比例導致了好的執行性能。它同時也改進了數據庫的安全性和管理。三層結構已經被用於大部分的企業資源 計劃(ERP)系統中,在這些系統中主要用於大量事務處理(客戶信息控制系統CICS, Tuxedo,及其它)。 盡管三層結構消除了兩層結構的一些缺陷,然而,它自身也有一定的不足之處—復雜,應用程序缺乏可移植性,廠商不兼容,有限的應用,以及與全球網不兼容—這些將在下面進行詳細描述。 •復雜性—開發一個三層應用程序比開發一個兩層應用程序更復雜。例如,程序員必須處理分布,多線程,安全性,等等。分布式應用程序引入了開發者必須處理的具有實質性的系統層次的編程復雜性。而且,分布式應用程序需要客戶的IT部門對它所缺乏的對應用程序設置和管理的支持作出補充。在試圖減少分布式應用程序的復雜性時,廠商訴諸於利用應用程序的結構,例如事務處理(TP)監視器,企業資源計劃廠商利用了應用程序服務器的概念。應用程序結構的目的是將程序員從必須處理的這些復雜問題中解放出來。現在,對於分布式應用程序結構來說,“應用程序服務器”是最常用的術語。 •缺少應用程序的可移植性—因為每一個生產三層結構平台的廠商在他的結構中使用不同的應用程序接口,對於各自獨立的廠商來說,生產的應用程序能夠適用於其他廠商的營程序服務器上 ,這是不可能的。 •廠商不兼容—將不同廠商的應用程序整合是非常困難的,因為每一個廠商往往使用的協議也不同,並且,在這些協中不存在任何協同工作的標准。 •有限的應用—獨立軟件開發商們沒有激情開發具有多重競爭結構但卻沒有廣泛的應用前景的應用程序。雖然存在許多支持分布式應用程序的軟件,但是這些應用程序只工作於那些它們為之專門開發的體系。許多的程序不能適用於大部分的體系。因此,對於一套相容的工具軟件只有有限的支持。同時,程序員的應用程序和體系知識也是有限的。 •與網絡的不兼容—傳統的三層結構並不直接的工作與網絡。三層結構使用一種獨占的協議在客戶端與運行於服務器上的應用程序之間進行通信,這種獨占的協議於網絡不兼容。雖然許多應用程序結構廠商已經將對網絡客戶端的支持作為一種前端加入到他們的產品中,這種合成的結構仍然受在此列出的其他缺點影響。 1•1•3早期基於網絡的應用程序的結構 網絡的引入和增長改變了一切。因為不管是兩層結構還是傳統的三層結構都不支持Web應用程序的開發,早期的Web應用程序開發者不得不尋找其他的方法。他們利用各種各樣的插件對Web服務器進行擴充。這些擴充調用服務器上的程序,由存儲在公司數據庫中的信息動態的生成HTML文檔。同樣,Web服務器短的擴充也將由Html表單提交的信息存入公司的數據庫。 像這樣的擴充的一個例子就是Cgi-bin(公用網關接口程序索引簿)腳本語言(CGI是通用網關接口的縮寫,是開發Html頁面和Web應用程序的接口。CGI應用程序通常指的是cgi-bin腳本語言。)盡管cgi-bin腳本語言及其它相似的機制允許開發者編寫簡單的Web應用程序,cgi-bin這種方法由於以下的原因並不適用於比較復雜的企業應用程序的開發。 •cgi-bin腳本語言不提供結構較好的優秀的商務處理或商務實體的封裝。 •cgi-bin腳本語言難於開發,維護和管理。高層次的應用程序開發工具對於cgi-bin腳本語言的開發沒有提供好的支持。 •cgi-bin腳本語言將商務程序的實現與表達邏輯纏繞在一起。當需要對實現的一部分進行改動時(例如一個事務處理),就會有不注意的變更其它部分的危險。 •cgi-bin腳本語言的實現並沒有將商務規則的完整性考慮在內。企業的商業規則的實現被分散於設置在企業中的眾多的Web服務器上的cgi-bin腳本語言中。因為這樣,所以對於企業來說維護商業規則的完整性是困難的。 1•1•4 J2EE應用程序結構 J2EE是一個標准結構,是一個使用Java編程語言,面向於開發和配置企業面向Web應用程序的結構。軟件開發商們和企業在開發和配置企業內部網應用程序時能夠利用J2EE結構,從而有效的替換兩層和三層模型,在開發因特網應用程序時,利用該結構有效的替換基於CGI-bin的方法。 Java 2 平台,企業版也提供對兩層和三層應用程序的支持。(注意:應用程序-客戶端容器指的是Java 2 標准版程序開發環境。)圖1•4表明了對兩層應用程序的支持。
圖1•4 J2EE兩層應用程序編程模型
圖1•5表明了對三層應用程序的支持J2EE平台同時也支持Java applets,這是一種由Web容器載入到顯示器的小程序。見圖1•6。
圖1•6 J2EE基於Web的applet應用程序編程模型J2EE平台由四部分編程環境構成,一般被稱為容器。 •EJB容器—為EJB提供開發、配置和運行管理的環境。EJB是實現事務處理和實體的組件。 •Web容器—為servlets和JSP提供開發、配置和運行管理的環境。servlets和JSP是集成的被稱為Web應用程序的開發單元。一個Web應用程序實現一個企業應用程序的表達邏輯。 •應用程序-客戶端容器—提供運行J2EE客戶端應用程序的環境。這個運行環境本質上就是Java 2 平台標准版。 •Applet容器—提供運行Java applets的環境。這個運行環境一般被嵌入到Web浏覽器中。 在本書中,我們主要集中於EJB的開發和配置,而不是其他應用程序部分的開發。我們只在必要時,為了說明EJB和其他的客戶端程序的相互作用而部分的示例說明其他的部分(Web應用程序)。為了更完全的了解如何開發其他部分的J2EE應用程序,可以參考《Java 2 平台企業版,企業應用程序開發》這本書。(參閱該書的完全參考,第xv頁的“其它資源信息”。) 注意J2EE平台也包括了通用對象中間請求結構(CORBA)。所有的J2EE容器均包括一個CORBA-解釋中間請求對象(ORB)。來自多廠商的在EJB容器之間的協作協議是建立在CORBA標准之上的,例如通過因特網的遠程方法啟用協議(RMI-IIOP)和對象事務處理服務(OTS)。 1•2 EJB結構的優點 EJBs組件結構是J2EE平台的中樞。J2EE應用程序的核心由一個或幾個EJB組成,它們負責執行應用程序的事務操作和封裝應用程序的商業邏輯。J2EE平台的其它部分,諸如JavaServer Pages,是對EJBs結構所能提供的功能的補充,象是表達邏輯和客戶端的相互控制邏輯這樣的功能。 獨立軟件開發商,合成商和用戶能夠開發定制EJB應用程序。我們將在下面詳盡的闡述EJB應用程序是如何克服兩層,三層及早期的Web應用程序結構的局限性,並使您感受在這些結構中沒有發現的額外的優點。 正如您在這部分所讀到的,記住EJB結構定義成主要的六部分功能,第三章,EJBs的功能,將會詳細的討論這些功能。從總體上講,這些功能如下: •Bean開發者—開發企業bean組件 •應用程序組合器—將企業bean組件擴充到較大的,可配置的單元 •配置者—在一個特殊的操作環境中配置應用程序 •系統主管—設定和管理企業計算和網絡的基礎結構 •EJB容器提供者和EJb服務器提供者—專門對事務和應用程序進行管理和其他低層服務的一個開發商(或開發商們)。 EJB結構為上述所有功能提供了有效的幫助。我們在此只專注於它為應用程序開發者和用戶所帶來的好處。 1•2•1為應用程序開發者帶來的好處 EJB結構為應用程序開發者提供如下的好處:簡潔化,應用程序可移植性,組件的重復利用,開發復雜應用程序的能力,事物邏輯與表達邏輯的分離,多操作環境的開發,分布式配置,應用程序的協作,與非Java系統的集成,以及指導性資源和開發工具。 •簡潔化—利用EJB結構可以比沒有該結構時更容易的開發企業應用程序。因為EJB結構幫助應用程序開發者以最小的努力和時間接入和利用企業服務,寫一個企業bean幾乎與寫一個Java類一樣簡單。應用程序開發者不必關心系統級別的問題,象是安全性,事務處理,多線程,安全協議,分布式編程,連接資源池,等等。因此,應用程序開發人員能工集中精力處理特殊域名的應用程序的商業邏輯。 •應用程序可移植性—一個EJB應用程序可以在任何J2EE編譯服務器上開發。這就意味著應用程序開發者可以將程序售給使用任何J2EE服務器的用戶。 •組件重復利用—一個EJB應用程序由企業bean組件構成。每一個企業bean是一個可重復使用的模塊。有兩種比較實用的方法可以對企業bean進行重復使用: •一個企業bean並不是在開發階段使之被包含於幾個不同的應用程序中而達到可以重復使用的。Bean可以在不需改動,甚至是不需接觸其源代碼的情況下,為每一個應用程序所定制。 •其它應用程序可以通過調用其客戶-視圖接口,從而再利用一個已經在用戶操作環境中開發的企業bean。而且,企業bean的商業邏輯可以通過企業bean類中的Java子類進行再利用。 •開發復雜應用程序的能力—EJB結構將開發復雜企業應用程序簡化了。這些EJB應用程序由一個開發小組編寫並且不斷更新。基於組件的EJB結構非常適合復雜企業應用程序的開發和維護。藉由它的清晰的功能定義和定義明確的接口,EJB結構促進和支持組隊開發,減少了對個人開發的要求。 •商業邏輯與表達邏輯的分離—一個企業bean一般封裝一個事務處理過程或是一個事務實體(一個表示企業事務數據的對象),使它獨立於表達邏輯。程序遠不需要擔心輸出的格式;開發Web頁的程序員只需要關心那些將要傳遞到Web頁的輸出數據。另外,這種分離使開發對於同一個事務處理過程具有多表達邏輯,或是在不需要變更實現事務處理的程序的源代碼的情況下,改變事務處理過程的表達邏輯成為可能。 •多操作環境的開發—一個獨立軟件開發上的目的是將程序賣給盡可能多的用戶。既然每一個用戶均有獨立的操作環境,應用程序需要在開發階段為每一個操作環境進行定制,包括不同的數據庫模式。 •EJB結構允許Bean開發者將通用應用程序的商業邏輯與在開發階段的用戶邏輯分離開。 •EJB結構允許一個實體Bean綁定到不同的數據庫模式。這種永久的綁定在開發階段實現。應用程序開發者可以在不受單一類型數據庫管理系統或是數據庫模式限制的情況下編寫代碼。 •EJB結構同時也通過建立開發標准促進應用程序的開發,例如數據資源查找,其他的應用程序的支持,安全配置,等等。這種標准使利用開發工具軟件成為可能。標准和工具軟件使開發者和配置者之間的錯誤通信的可能大大降低了。 •分布式開發—EJB結構使得應用程序通過網絡以分布式方式在多個服務器上進行開發成為可能。Bean開發者在開發EJB時不必知道開發拓撲學—不論這個客戶端的企業bean在同一台機器上還是在不同的機器上,他寫的代碼都是一樣的。 •應用程序的協作—EJB結構使得整合不同開發商開發的應用程序更加容易。企業bean的客戶-視圖接口作為應用程序間明確定義的整合點。 •與非Java系統的集成—相關的J2EE應用程序接口,例如連接器規范和Java信息服務規范,使得將企業bean應用程序以標准的方法與各種非Java應用程序的集成成為可能,例如ERP系統或者主機應用程序。 •指導性資源和開發工具—既然EJB結構是一個廣泛使用的工業標准,EJB應用程序開發者受益於不斷增長的指導如何建立EJB應用程序的指導性資源。更重要的是,由占主導地位的開發商所提供的強有力的開發工具簡化了EJB應用程序的開發和維護。 1•2•2用戶所獲得的益處 用戶與應用程序開發者之間對於EJB結構有著不同的觀點。EJB結構為用戶提供了如下的益處:應用程序服務器的選擇,對應用程序管理的促進,與用戶現有應用程序和數據的集成,以及應用程序的安全性。 •服務器的選擇—既然EJB結構是一個廣泛的工業標准,並且是J2EE平台的一部分,用戶組織對於運行J2EE的服務器有廣泛的選擇。用戶可以選擇在比例觀點,與其它系統集成的能力,安全協議,價格等等各方面適合用戶需要的產品。用戶不必被限制使用一個開發商的產品。用戶的需求改變時,它可以很容易的在服務器上重新配置其他開發商的EJB應用程序。 •促進應用程序的管理—由於EJB結構提供了一個標准的環境,服務器廠商就可以有開發用以增強他們產品性能的應用程序管理工具的動機。因此,隨著EJB容器的出現產生了一些比較尖端的應用程序管理工具,這就允許用戶的IT部門可以執行諸如啟動和停止應用程序,將系統資源分派給應用程序,和監測安全隱患以及其他的一些功能。 •與用戶現存應用程序和數據的集成—EJB結構及其它與J2EE相關的應用程序接口簡化和標准化了在用戶操作環境下EJB應用程序與一些非Java應用程序和系統的集成。例如,擁護不需改變任何現有的數據庫模式以適應某個應用程序。相反的,EJB應用程序可以在它被開發時被設定成適合現有數據庫模式。 •應用程序的安全性—EJB結構使得應用程序安全性的責任由程序開發者移交給了服務器開發商,系統主管和配置者。對於確保應用程序的安全性來說,身處這些位置的人們比程序開發者更為重要。這就使得操作應用程序更為安全。 1•3結論 本文對於不同的企業應用程序的結構進行了深入的討論,闡述了它們的優點與不足。表明了這些結構是如何演變到EJB結構的,著重從開發者和用戶或是客戶的觀點分析了他們各自由這種結構所獲得的益處。