?? 轉(zhuǎn):第一部分:ejb 體系結(jié)構(gòu).txt
字號(hào):
作者:老好人
日期:2000-11-30 18:24:24
什么是 Enterprise JavaBeans 組件?
第一部分:EJB 體系結(jié)構(gòu)的歷史和目標(biāo)
本文概述 Enterprise JavaBeans (EJB) 技術(shù),旨在讓讀者快速理解基本概念。第 1 部分講述 EJB 技術(shù)的歷史和某些目標(biāo)、優(yōu)點(diǎn)和技術(shù)。為了簡(jiǎn)潔明了,有選擇地講述 EJB 技術(shù)的一些關(guān)鍵要素。請(qǐng)注意,雖然 EJB 組件依賴于一些基礎(chǔ)的 Java 服務(wù)(如 Java Transaction Service),但使用 EJB 組件及認(rèn)識(shí)這些組件的好處并不需要掌握這些相關(guān)技術(shù)的知識(shí)。
Enterprise JavaBeans 技術(shù)自 1998 年 3 月問(wèn)世以來(lái)很受好評(píng)。下面這段話就是一個(gè)例子:
“自從兩年多以前問(wèn)世以來(lái),Enterprise JavaBeanstm 技術(shù)在平臺(tái)供應(yīng)商和企業(yè)的開(kāi)發(fā)小組中,同樣都保持著空前的發(fā)展勢(shì)頭。這是因?yàn)?EJBtm 的服務(wù)器端組件模型簡(jiǎn)化了中間件組件的開(kāi)發(fā),這些中間組件都是事務(wù)性的、可伸縮的和可移植的。Enterprise JavaBeans 服務(wù)器通過(guò)為中間件服務(wù)(如事務(wù)處理、安全性、數(shù)據(jù)庫(kù)連接及其他)提供自動(dòng)支持,降低了開(kāi)發(fā)中間件的復(fù)雜程度?!保⊿un Microsystems 網(wǎng)站)
Enterprise JavaBeans 這一名稱利用了 Java bean — 這種可移植、可重用的 Java 軟件組件的聲望。Enterprise JavaBeans 技術(shù)把 Java 組件的概念從客戶機(jī)域擴(kuò)展到了服務(wù)器域:這是 Java 技術(shù)成長(zhǎng)過(guò)程中有重大意義的一步,它使 Java 技術(shù)發(fā)展成為一種強(qiáng)健的、可伸縮的環(huán)境,能夠支持以任務(wù)為關(guān)鍵的企業(yè)信息系統(tǒng)。
服務(wù)器上的 Java 應(yīng)用程序
Java 編程語(yǔ)言最初在 Web 開(kāi)發(fā)人員中獲得好評(píng)的一個(gè)原因是,它支持稱為 applet 的可下載 Java 程序。對(duì) Applet 的支持以 Applet 類的形式內(nèi)置到了 1.0 版的 Java Development Kit (JDK) 中。按照 1.0 版的時(shí)間框架,Java 開(kāi)發(fā)是以 applet 和應(yīng)用程序作為中心的?;?JDK 1.0 版的 Java 讀物都是從 applet 和應(yīng)用程序的角度來(lái)描述 Java 編程的:
“Java 程序由更多的類定義中的某一個(gè)組成,每個(gè)類定義均已編譯成它自已的 Java 虛擬機(jī)對(duì)象代碼的 .class 文件。這些類之一必須定義一個(gè)叫做 main() 的方法,程序就是從這個(gè)方法開(kāi)始運(yùn)行的。想調(diào)用一個(gè) Java 程序,需要運(yùn)行 Java 解釋器 java,并指定包含 main() 方法的類的名稱。請(qǐng)注意 Java applet 并不是一個(gè)應(yīng)用程序 — 它是一個(gè)由已在運(yùn)行的 Java 應(yīng)用程序(如 Web 瀏覽器或 applet 查看器)裝入并運(yùn)行的 Java 類。”(見(jiàn) Flanagan 所著的 Java in a Nutshell)
Java 應(yīng)用程序可以在服務(wù)器上運(yùn)行,但是不管是在客戶機(jī)-服務(wù)器環(huán)境下,還是在基于 Web 的環(huán)境下,JDK 中都沒(méi)有提供讓 Java 應(yīng)用程序?qū)S糜诜?wù)器機(jī)器的接口或包。認(rèn)識(shí)到 Java 在 Web 環(huán)境下作為一種服務(wù)器語(yǔ)言的潛力,Sun Microsystems 編寫了 Java Servlet 規(guī)范。servlet 在許多方面與 applet 相似,它是專門為在 Web 服務(wù)器機(jī)器上運(yùn)行而設(shè)計(jì)的 Java 程序:
“servlet 是由容器管理的 Web 組件,可產(chǎn)生動(dòng)態(tài)內(nèi)容。servlet 是一種小型的、與平臺(tái)無(wú)關(guān)的 Java 類,被編譯成體系結(jié)構(gòu)中立的字節(jié)代碼,這種代碼可以動(dòng)態(tài)地加載到一個(gè) web 服務(wù)器上,并由此 web 服務(wù)器運(yùn)行。servlet 通過(guò)一種由 servlet 容器實(shí)現(xiàn)的請(qǐng)求-響應(yīng)模型與 Web 客戶機(jī)進(jìn)行交互。這種請(qǐng)求-響應(yīng)模型建立在超文本傳輸協(xié)議 (HTTP) 行為的基礎(chǔ)之上?!保ㄒ?jiàn) JavaSoft 的“Java Servlet API Specification”)
在一臺(tái) Web 服務(wù)器控制下,在多臺(tái)服務(wù)器上運(yùn)行若干小型用戶程序,這種想法并不新鮮 — 一段時(shí)間以來(lái),公共網(wǎng)關(guān)接口 (CGI) 程序(常被稱為 CGI 腳本)一直起著這種作用,并推動(dòng)了 Web 的普及。但 Java servlet 可以以更高的效率和可移植性來(lái)實(shí)現(xiàn)這一目的,因而可望最終會(huì)取代 CGI 程序。為 servlet 提供運(yùn)行時(shí)環(huán)境的軟件(通常被稱為 servlet 引擎)可以添加到現(xiàn)有的、本身并不支持 Java 可執(zhí)行程序的 Web 服務(wù)器上。
Java servlet 的出現(xiàn),為應(yīng)用程序員使用 Java 來(lái)創(chuàng)建 Web 應(yīng)用程序開(kāi)辟了新的途徑。但是,僅有 servlet 還不能為真正的企業(yè)計(jì)算提供完整的模型。CGI 應(yīng)用程序本身往往不是完整的應(yīng)用程序,在處理接收自 Web 瀏覽器上用戶的信息請(qǐng)求時(shí),CGI 只是整個(gè)處理過(guò)程中的一個(gè)中間步驟。例如,CGI 應(yīng)用程序的一種常見(jiàn)用途是訪問(wèn)數(shù)據(jù)庫(kù)。將它用于這種任務(wù)時(shí),CGI 程序提供一種方法,將用戶的數(shù)據(jù)請(qǐng)求連接到能滿足這種請(qǐng)求的企業(yè)數(shù)據(jù)庫(kù)。CGI 程序常常充當(dāng)一種中間軟件,從 Web 瀏覽器接收請(qǐng)求,決定必須調(diào)用哪些計(jì)算資源來(lái)滿足這些請(qǐng)求,并向?yàn)g覽器發(fā)回響應(yīng)。Java servlet 與 CGI 程序一樣,最適合充當(dāng)連接前端 Web 請(qǐng)求與后端數(shù)據(jù)資源的中間層組件。
三層體系結(jié)構(gòu)
Web 編程向服務(wù)器端 Java 應(yīng)用程序的演化,也帶來(lái)了體系結(jié)構(gòu)的演化,使它脫離了常規(guī)的客戶機(jī)-服務(wù)器兩層模型,而向一種三層方法發(fā)展。兩層模型當(dāng)時(shí)曾經(jīng)具有創(chuàng)新意義,因?yàn)樗鼘⒁恍┯?jì)算任務(wù)從主處理器上卸載到靈巧的客戶機(jī)。常規(guī)的基于 LAN 的數(shù)據(jù)庫(kù)應(yīng)用程序就是一個(gè)例子,其中數(shù)據(jù)庫(kù)管理器服務(wù)器軟件駐留在一個(gè)專用的服務(wù)器機(jī)器上,而用戶則通過(guò)他們的工作站上的客戶機(jī)代碼來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。隨著客戶機(jī)-服務(wù)器模型成長(zhǎng)到能付諸使用,就出現(xiàn)了對(duì)服務(wù)器可伸縮性和對(duì)客戶機(jī)代碼大小和復(fù)雜性的關(guān)注。于是提出了一種三層的體系結(jié)構(gòu),以避免在兩層模型中已察覺(jué)到的弱點(diǎn),使 Web 能成為一個(gè)計(jì)算平臺(tái):
“許多人...斷言,傳統(tǒng)的客戶機(jī)/服務(wù)器兩層體系結(jié)構(gòu)不會(huì)有好的可伸縮性,因?yàn)橛脩暨B接和數(shù)據(jù)訪問(wèn)的數(shù)量無(wú)法預(yù)測(cè),而且在一些系統(tǒng)管理上也存在問(wèn)題。為處理兩層體系結(jié)構(gòu)的限制,許多開(kāi)發(fā)集體都在轉(zhuǎn)向三層體系結(jié)構(gòu)。這種體系結(jié)構(gòu)大致可以定義為:客戶機(jī)層上的表示層、中間的服務(wù)器和后端的某種數(shù)據(jù)庫(kù)。這種設(shè)想的目的就是緩和客戶機(jī)或數(shù)據(jù)庫(kù)服務(wù)器上的代碼膨脹,集中管理業(yè)務(wù)邏輯,更靈活地使用數(shù)據(jù)庫(kù),而不僅是使用所存儲(chǔ)的過(guò)程和觸發(fā)器?!保ㄒ?jiàn) Kim 的“Looking for a 3-Tier App Builder?”)
一個(gè)三層結(jié)構(gòu)模型通常被想像成有一個(gè) Web 瀏覽器作為客戶層。Web 瀏覽器由于有可能成為一種真正的通用客戶機(jī),使它從觀念上取代了兩層結(jié)構(gòu)的“胖客戶機(jī)”。如果瀏覽器作為 Web 應(yīng)用程序體系結(jié)構(gòu)的標(biāo)準(zhǔn)瘦客戶機(jī)獲得認(rèn)可,那么以前駐留在兩層模型的胖客戶機(jī)中的功能會(huì)怎么樣呢?現(xiàn)在,應(yīng)用程序?qū)S玫墓δ懿⒉灰浦不胤?wù)器(例如數(shù)據(jù)庫(kù)管理器),而是有意將它駐留在一個(gè)新的中間層上。中間層支持應(yīng)用程序服務(wù)器軟件,這種軟件是中間件的一種形式,它處于第一層上瘦客戶機(jī)的最小功能和第三層上服務(wù)器端業(yè)務(wù)系統(tǒng)的豐富功能之間。由于三層體系結(jié)構(gòu)與 Web 處理模型有密切關(guān)系,所以中間層應(yīng)用程序服務(wù)器常被視為 Web 服務(wù)器的一種功能擴(kuò)展。現(xiàn)有的 Web 應(yīng)用程序利用 CGI 程序,將來(lái)自 Web 瀏覽器的用戶請(qǐng)求傳送到不基于 Web 的業(yè)務(wù)系統(tǒng),并向?yàn)g覽器返回響應(yīng),就是三層模型的一種實(shí)現(xiàn)。這些應(yīng)用程序逐漸向 servlet 技術(shù)的轉(zhuǎn)移說(shuō)明三層模型正在增強(qiáng)。
JavaBeans 組件
JavaBeans 規(guī)范將“組件軟件”的概念引入到 Java 編程的領(lǐng)域。組件是自含的、可重用的軟件單元;而 JavaBeans 組件,則可以使用可視的應(yīng)用程序開(kāi)發(fā)工具,可視地將它們編寫到 Java 程序中。JavaBeans 規(guī)范為 Java 開(kāi)發(fā)人員提供了一種“組件化”其 Java 類的方法:
Bean 是一些 Java 類,可在一個(gè)可視的構(gòu)建器工具中操作它們,并且可以將它們一起編寫到應(yīng)用程序中。任何具有某種特性和事件接口約定的 Java 類都可以是一個(gè) Bean。(見(jiàn) JavaSoft,“Using the Beans Development Kit 1.0”)
如果軟件重用是一個(gè)好主意,那么是否應(yīng)該讓每一個(gè) Java 類都成為 Java bean 呢?如果 Java 類滿足某些準(zhǔn)則,它們就適于充當(dāng) bean 的角色:
在開(kāi)發(fā)任何新軟件之前,都值得考慮是否用 JavaBean 的形式來(lái)開(kāi)發(fā)它。如果軟件模塊要既能夠可視地操作,又能夠定制以達(dá)到某些效果,則這種軟件模塊就可能適于做成一個(gè) JavaBean。為幫助您確定要開(kāi)發(fā)的軟件是否應(yīng)該是一個(gè) JavaBean,假定它應(yīng)該是用 Java 編寫的,請(qǐng)向您自已提出以下問(wèn)題,并相應(yīng)地作出決定:
是否打算讓它可重用?或者,它會(huì)是可重用的嗎?
是否希望將它與其他可重用的 Java 組件一起使用?
是否預(yù)計(jì)會(huì)在 IDE 工具中使用它?
如果上述問(wèn)題的答案都是肯定的,則它應(yīng)該作為 JavaBean 來(lái)開(kāi)發(fā)。(見(jiàn) developerWorks 的“JavaBeans Guidelines”)
JavaBean 概念是為了在 Java 編程環(huán)境中支持可重用的組件,它是一種一般性的設(shè)計(jì)方法,適用于客戶機(jī)或服務(wù)器機(jī)器上運(yùn)行的 Java 程序。由于對(duì)可視的構(gòu)建器工具的強(qiáng)調(diào),也由于許多 Java bean 都是圖形用戶界面 (GUI) 組件,所以 JavaBean 組件可能被視為一種客戶端技術(shù)。但是,并不要求 Java bean 都是可視的,并且它們也可以用于服務(wù)器環(huán)境中。
編碼為 Java bean 的 Java 類通常具有以下特征:
使用設(shè)計(jì)模式。這些模式就是方法和接口的編碼約定。
支持可視的軟件開(kāi)發(fā)工具。類必須將變量(稱為屬性)、方法和事件展示出來(lái)。
可以定制。定制包括能支持缺省的屬性編輯器,或者提供單一的定制規(guī)則。定制使開(kāi)發(fā)人員得以在不更改源代碼的情況下更改 bean 的行為。
支持自省 (introspection)。這指的是將屬性、方法和事件公開(kāi)給其他類,可以通過(guò)設(shè)計(jì)模式或通過(guò)創(chuàng)建 BeanInfo 類來(lái)完成這種自省。
是持久的。這就允許在一個(gè)可視構(gòu)建器中定制一個(gè) bean,然后以其定制后的狀態(tài)加以保存。
Java 2 Platform, Enterprise Edition
Sun Microsystems 發(fā)起了一項(xiàng)稱為 Java 2 Platform, Enterprise Edition (J2EE) 的技術(shù)創(chuàng)新,旨在將 Java 平臺(tái)的范圍擴(kuò)展到大規(guī)模服務(wù)器環(huán)境:
“1997 年 4 月 12 日,Sun 宣布了一項(xiàng)為企業(yè)環(huán)境開(kāi)發(fā) Java 平臺(tái)的創(chuàng)新成果。使用開(kāi)放式的 Java Community Process,Sun 促進(jìn)了一組標(biāo)準(zhǔn)的 Java 擴(kuò)展的開(kāi)發(fā),稱為 Enterprise Java API。這些應(yīng)用程序編程接口 (API) 為各種各樣的中間件的實(shí)現(xiàn)提供了不依賴供應(yīng)商的編程接口。Enterprise Java API 的要點(diǎn)是 Enterprise JavaBeans API,后者為 Java 應(yīng)用程序服務(wù)器定義了一個(gè)服務(wù)器端組件模型,以及一個(gè)不依賴供應(yīng)商的編程接口?!保ㄒ?jiàn) Thomas 的“Java 2 Platform, Enterprise Edition: Ensuring Consistency, Portability, and Interoperability”)
J2EE 為 Enterprise JavaBeans 技術(shù)提供了工作環(huán)境。事實(shí)上,Sun 把若干項(xiàng)軟件技術(shù)都設(shè)想為這樣的構(gòu)件塊,它們將使大型企業(yè)能夠把以任務(wù)為關(guān)鍵的業(yè)務(wù)系統(tǒng)移植到 Java 環(huán)境中,而 Enterprise JavaBeans 技術(shù)不過(guò)是這些技術(shù)之一。EJB 組件是按它們自己的規(guī)范定義的,但 EJB 技術(shù)并不是一項(xiàng)獨(dú)立的技術(shù)。它建立在其他 Java 技術(shù)之上,這些技術(shù)由 Sun 和其他 IT 公司聯(lián)合規(guī)定,它們一起提供了這個(gè)框架的內(nèi)容,該框架就稱為 Java 2 Platform, Enterprise Edition。
J2EE 中包括以下技術(shù):
Enterprise JavaBeans (EJB) 技術(shù)
Java Interface Definition Language (IDL)
Java Message Service (JMS) API
Java Naming and Directory Interface (JNDI)
Java Remote Method Invocation (RMI) 和 Object Serialization
Java Servlet API
Java Transaction API (JTA)
Java Transaction Service (JTS)
JavaServer Pages (JSP) 技術(shù)
JDBC 數(shù)據(jù)庫(kù)訪問(wèn) API
參與到這個(gè)企業(yè) Java 框架中,并不意味著每項(xiàng)技術(shù)都依賴于所有其他技術(shù)。單獨(dú)的規(guī)范文檔指出每項(xiàng)技術(shù)的相關(guān)性。例如,Enterprise JavaBeans 規(guī)范 1.0 發(fā)行版就指明了在定位各個(gè)組件時(shí)與 JNDI 的相關(guān)性,以及在編程中啟動(dòng)和停止事務(wù)處理時(shí)與 JTA 的相關(guān)性。
EJB 技術(shù)的設(shè)計(jì)目標(biāo)
EJB 規(guī)范的第一版以初稿形式于 1997 年 12 月公布,并于 1998 年 3 月作為 1.0 版發(fā)行。規(guī)范作者為 EJB 體系結(jié)構(gòu)制定了以下目標(biāo):
Enterprise JavaBeans 體系結(jié)構(gòu)將是標(biāo)準(zhǔn)的組件體系結(jié)構(gòu),用于以 Java 編程語(yǔ)言構(gòu)建分布式的面向?qū)ο蟮纳虅?wù)應(yīng)用程序。通過(guò)把使用不同供應(yīng)商提供的工具開(kāi)發(fā)出來(lái)的組件組合在一起,Enterprise JavaBeans 體系結(jié)構(gòu)將有可能構(gòu)建分布式的應(yīng)用程序。
Enterprise JavaBeans 體系結(jié)構(gòu)將使編寫應(yīng)用程序變得容易:應(yīng)用程序開(kāi)發(fā)人員將不必了解低層次的事務(wù)和狀態(tài)管理的細(xì)節(jié)、多線程、資源共享和其他復(fù)雜的低級(jí) API。但是,將允許專家級(jí)的程序員直接訪問(wèn)低級(jí) API。
Enterprise JavaBeans 應(yīng)用程序?qū)⒆裱?Java 編程語(yǔ)言的“一次編寫,隨處運(yùn)行”的原則。EJB 組件可以只開(kāi)發(fā)一次,然后在多個(gè)平臺(tái)上部署,而不需要重新編譯或修改源代碼。
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -