J2EE的全稱是Java 2 Platform Enterprise Edition,它是由SUN公司領(lǐng)導(dǎo)、各廠家共同制定并得到廣泛認(rèn)可的工業(yè)標(biāo)準(zhǔn),或者說(shuō),它是在SUN公司領(lǐng)導(dǎo)下,多家公司參與共同制定的企業(yè)級(jí)分布式應(yīng)用程序開發(fā)規(guī)范。目前,J2EE是市場(chǎng)上主流的企業(yè)級(jí)分布式應(yīng)用平臺(tái)的解決方案1。
產(chǎn)生背景Java于1995年由Sun公司推出,當(dāng)時(shí)它的主要用途是制作產(chǎn)生動(dòng)態(tài)網(wǎng)頁(yè)的Applet。后來(lái),人們發(fā)現(xiàn)Java的“一次開發(fā),多次運(yùn)行”,純面向?qū)ο蟮奶匦?,垃圾回收機(jī)制和內(nèi)置安全特別適合于開發(fā)企業(yè)應(yīng)用系統(tǒng)。于是,企業(yè)應(yīng)用開發(fā)商紛紛在Java標(biāo)準(zhǔn)版的基礎(chǔ)上各自擴(kuò)展出許多企業(yè)應(yīng)用API,其結(jié)果導(dǎo)致基于Java的企業(yè)應(yīng)用呈爆炸式增長(zhǎng)。但是各企業(yè)系統(tǒng)API之間又不能相互兼容,破壞了Java的平臺(tái)獨(dú)立性。鑒于此,Sun公司聯(lián)合IBM、Oracle、BEA等大型企業(yè)應(yīng)用系統(tǒng)開發(fā)商于1999年共同制訂了一個(gè)基于Java組件技術(shù)的企業(yè)應(yīng)用系統(tǒng)開發(fā)規(guī)范,該規(guī)范定義了一個(gè)多層企業(yè)信息系統(tǒng)的標(biāo)準(zhǔn)平臺(tái),旨在簡(jiǎn)化和規(guī)范企業(yè)應(yīng)用系統(tǒng)的開發(fā)和部署。這一規(guī)范和其定義的平臺(tái)就構(gòu)成了J2EE。它定義了基于組件的方式設(shè)計(jì)、開發(fā)、組裝和部署企業(yè)應(yīng)用系統(tǒng)的各個(gè)組成部分。同時(shí),J2EE規(guī)范定義了分布式多層應(yīng)用系統(tǒng)模型、組件重用策略、一體化的安全模型以及靈活的事務(wù)控制策略等,使得獨(dú)立軟件提供商(ISV)能夠以比以前更快的速度向市場(chǎng)推出適應(yīng)用戶的解決方案。
J2EE是一套針對(duì)企業(yè)級(jí)分布式應(yīng)用的計(jì)算環(huán)境。它定義了動(dòng)態(tài)Web頁(yè)面功能(Servlet和Jsp)、商業(yè)組件(EJB)、異步消息傳輸機(jī)制(JMS)、名稱和目錄定位服務(wù)(JNDI)、數(shù)據(jù)庫(kù)訪問(wèn)(JDBC)、與子系統(tǒng)的連接器(JCA)和安全服務(wù)等2。
發(fā)展1997年Servlet技術(shù)的產(chǎn)生以及緊接著JSP的產(chǎn)生,為Java對(duì)抗PHP、ASP等服務(wù)器端語(yǔ)言帶來(lái)了籌碼。1998年,Sun發(fā)布了EJBI.0標(biāo)準(zhǔn),至此J2EE平臺(tái)的三個(gè)核心技術(shù)都已經(jīng)出現(xiàn)。于是,1999年,Sun正式發(fā)布了J2EE的第一個(gè)版本,并于1999年底發(fā)布了J2EE1.2,在2001年發(fā)布了J2EEl.3,在2003年年底發(fā)布了J2EE1.4。
(1)J2EE1.3
以下就是J2EE1.3的架構(gòu)圖,其中主要包含了Applet 容器、Application Client容器、Web容器和EJB容器,并且包含了Web Component,EJB Component,Application Client Com-
ponent,以JMS,JAAS,JAXP,JDBC,JAF,JavaMail,JTA等技術(shù)做為基礎(chǔ)。
J2EE1.3中引入了幾個(gè)值得注意的功能:Java消息服務(wù)(定義了JMS的一組APl),J2EE連接器技術(shù)(定義了擴(kuò)展J2EE服務(wù)到非J2EE應(yīng)用程序的標(biāo)準(zhǔn)),XML解析器的一組Java APl,Servlet2.3,JSPl.2也都進(jìn)行了性能擴(kuò)展與優(yōu)化,全新的CMP組件模型和MDB(消息Bean)。
(2)J2EE1.4
J2EE1.4大體上的框架和J2EE1.3是一致的,J2EE1.4增加了對(duì)Web服務(wù)的支持,主要是Web Service,JAX-RPC,SAAJ,JAXR,還對(duì)EJB的消息傳遞機(jī)制進(jìn)行了完善(EJB2.1),部署與管理工具的增強(qiáng)(JMX),以及新版本的Servlet2.4和JSP2.0使得Web應(yīng)用更加容易3。
內(nèi)容J2EE本身是一個(gè)標(biāo)準(zhǔn),而不是一個(gè)現(xiàn)成的產(chǎn)品(雖然現(xiàn)在有很多符合J2EE標(biāo)準(zhǔn)的產(chǎn)品),它由以下幾個(gè)部分組成:
(1)J2EE規(guī)范。該規(guī)范定義了J2EE平臺(tái)的體系結(jié)構(gòu)、平臺(tái)角色及J2EE中每種服務(wù)和核心API的實(shí)現(xiàn)要求。它是J2EE應(yīng)用服務(wù)器開發(fā)商的大綱。
(2)J2EE兼容性測(cè)試站點(diǎn)。Sun公司提供的一個(gè)測(cè)試J2EE應(yīng)用服務(wù)器是否符合J2EE規(guī)范的站點(diǎn),對(duì)通過(guò)該站點(diǎn)測(cè)試的產(chǎn)品,Sun公司將發(fā)放兼容性證書。
(3)J2EE參考實(shí)現(xiàn)。即J2EESDK,它既是Sun公司自己對(duì)J2EE規(guī)范的一個(gè)非商業(yè)性實(shí)現(xiàn),又是為開發(fā)基于J2EE企業(yè)級(jí)應(yīng)用系統(tǒng)原型提供的一個(gè)免費(fèi)的底層開發(fā)環(huán)境。
(4)J2EE實(shí)施指南。即BluePrints文檔,該文檔通過(guò)實(shí)例來(lái)指導(dǎo)開發(fā)人員如何去開發(fā)一個(gè)基于J2EE的多層企業(yè)應(yīng)用系統(tǒng)2。
優(yōu)勢(shì)J2EE為搭建具有可伸縮性、靈活性、易維護(hù)性的企業(yè)系統(tǒng)提供了良好的機(jī)制。
1.支持異構(gòu)環(huán)境
J2EE能夠開發(fā)部署在異構(gòu)環(huán)境中的可移植程序。不管是大型機(jī)、UNIX平臺(tái)還是Windows操作系統(tǒng),基于J2EE開發(fā)的應(yīng)用程序不依賴任何特定操作系統(tǒng)、中間件、硬件。因此,設(shè)計(jì)合理的基于J2EE的程序只需開發(fā)一次就可部署到各種平臺(tái)。這在典型的異構(gòu)企業(yè)計(jì)算環(huán)境中是十分關(guān)鍵的。J2EE標(biāo)準(zhǔn)也允許客戶訂購(gòu)與J2EE兼容的第三方的現(xiàn)成的組件,把他們部署到異構(gòu)環(huán)境中,從項(xiàng)目開發(fā)整體來(lái)看,既加快了開發(fā)速度,又節(jié)省了完成整體方案所需的費(fèi)用。
2.可伸縮性
企業(yè)必須要選擇一種服務(wù)器端平臺(tái),這種平臺(tái)應(yīng)能提供極佳的可伸縮性,滿足那些在他們系統(tǒng)上進(jìn)行商業(yè)運(yùn)作的大批客戶?;贘2EE平臺(tái)的應(yīng)用程序可被部署到各種操作系統(tǒng)上。例如可被部署到高端UNIX與大型機(jī)系統(tǒng),這種系統(tǒng)單機(jī)可支持64~256個(gè)處理器。J2EE領(lǐng)域的供應(yīng)商提供了更為廣泛的負(fù)載平衡策略,能消除系統(tǒng)中的瓶頸,允許多臺(tái)服務(wù)器集成部署。這種部署可達(dá)數(shù)千個(gè)處理器,實(shí)現(xiàn)可高度伸縮的系統(tǒng),滿足未來(lái)商業(yè)應(yīng)用的需要。
3.穩(wěn)定的可用性
一個(gè)服務(wù)器端平臺(tái)必須能全天候運(yùn)轉(zhuǎn)以滿足公司客戶、合作伙伴的需要。因?yàn)镮nternet是全球化的、無(wú)處不在的,即使在夜間停機(jī)維護(hù)也可能造成嚴(yán)重?fù)p失。若是意外停機(jī),更會(huì)造成災(zāi)難性后果。J2EE可以部署到可靠的操作環(huán)境中,因此支持長(zhǎng)期的可用性。一些J2EE部署在Windows環(huán)境中,客戶也可選擇健壯性能更好的操作系統(tǒng),如Sun Solaris、IBMOS/390等。最健壯的操作系統(tǒng)可達(dá)到99.999%的可用性或每年只需5分鐘停機(jī)時(shí)間,這是實(shí)時(shí)性要求很高的企業(yè)系統(tǒng)的理想選擇。
4.保留現(xiàn)存的IT資產(chǎn)
由于企業(yè)必須適應(yīng)新的商業(yè)需求,利用已有的企業(yè)信息系統(tǒng)投資,而不是重新制定全盤方案就變得很重要。也就是說(shuō),企業(yè)需要的是一個(gè)以漸進(jìn)的(而不是激進(jìn)的,全盤否定的)方式進(jìn)行、可構(gòu)建在已有系統(tǒng)之上的服務(wù)器端平臺(tái)機(jī)制。J2EE架構(gòu)可以充分利用用戶原有的投資,如一些公司使用的BEA Tuxedo、IBM CICS、IBM Encina、Inprise VisiBroker和Netscape Application Server等。這之所以成為可能,是因?yàn)镴2EE 擁有廣泛的業(yè)界支持和一些重要的企業(yè)計(jì)算領(lǐng)域供應(yīng)商的參與。
每一個(gè)供應(yīng)商都對(duì)現(xiàn)有的客戶提供了不用廢棄已有投資,進(jìn)入可移植的J2EE領(lǐng)域的升級(jí)途徑。由于基于J2EE平臺(tái)的產(chǎn)品幾乎能夠在任何操作系統(tǒng)和硬件配置上運(yùn)行,現(xiàn)有的操作系統(tǒng)和硬件也能繼續(xù)發(fā)揮作用。
5.高效的開發(fā)
J2EE允許公司把一些通用的、煩瑣的服務(wù)器端任務(wù)交給中間件供應(yīng)商去完成。這樣開發(fā)人員可以集中精力在如何創(chuàng)建商業(yè)邏輯上,相應(yīng)地縮短了開發(fā)時(shí)間。高級(jí)中間件供應(yīng)商可以提供以下這些復(fù)雜的中間件服務(wù):
(1)狀態(tài)管理服務(wù)。讓開發(fā)人員寫更少的代碼,不用關(guān)心如何管理狀態(tài),這樣能夠更快地完成程序開發(fā)。
(2)持續(xù)性服務(wù)。讓開發(fā)人員不用對(duì)數(shù)據(jù)訪問(wèn)邏輯進(jìn)行編碼就能編寫應(yīng)用程序,能生成更輕巧、與數(shù)據(jù)庫(kù)無(wú)關(guān)的應(yīng)用程序,這種應(yīng)用程序更易于開發(fā)與維護(hù)。
(3)分布式共享數(shù)據(jù)對(duì)象CACHE服務(wù)。讓開發(fā)人員編制高性能的系統(tǒng),極大提高整體部署的伸縮性4。
體系結(jié)構(gòu)J2EE的體系結(jié)構(gòu)可以分為四層,如圖1所示。
·客戶端層:負(fù)責(zé)與用用戶直接交互,J2EE支持多種客戶端,所以客戶端既可以是WEB瀏覽器,也可以是專用的Java客戶端。
·服務(wù)器端組件層:本層是為了基于WEB的應(yīng)用服務(wù)的,利用J2EE中的JSP與Java Servlet技術(shù),可以響應(yīng)客戶端的請(qǐng)求,并向后訪問(wèn)封裝有商業(yè)邏輯的組件。
·EJB層:本層主要封裝了商務(wù)邏輯,完全企業(yè)計(jì)算機(jī),提供了事務(wù)處理,負(fù)載均衡、安全、資源連接等各種基本服務(wù),程序在編寫EJB時(shí)可以不關(guān)心這些基本的服務(wù),集中注意力于商務(wù)邏輯的實(shí)現(xiàn)。
·企業(yè)信息系統(tǒng)層:企業(yè)信息系統(tǒng)層包括了企業(yè)的現(xiàn)有系統(tǒng)(包括數(shù)據(jù)庫(kù)系統(tǒng)、文件系統(tǒng)),J2EE提供了多種技術(shù)以訪問(wèn)這些系統(tǒng),如JDBC訪問(wèn)DBMS。
在J2EE規(guī)范中,J2EE平臺(tái)包括有一整套的服務(wù)、應(yīng)用編程接口和協(xié)議,可用于開發(fā)一般的多層應(yīng)用和基于WEB的多層應(yīng)用,是J2EE的核心和基礎(chǔ)。它還提供了EJB、Java Servlets API、JSP和XML技術(shù)的全面支持等。1
組件J2EE應(yīng)用程序是由組件構(gòu)成的。J2EE組件是具有獨(dú)立功能的軟件單元,它們通過(guò)相關(guān)的類和文件組裝成J2EE應(yīng)用程序,并與其他組件交互。J2EE規(guī)范中定義了下列J2EE組件:
(1)客戶層組件,包括客戶端應(yīng)用程序和Applets;
(2)Web層組件,包括Java Servlet和Java Server Pages(JSP);
(3)業(yè)務(wù)層組件,即Enterprise JavaBeans(EJB)。
1.客戶層組件
J2EE應(yīng)用程序可以是基于Web方式的,也可以是基于傳統(tǒng)方式的。
Web層組件:J2EE Web層組件可以是JSP頁(yè)面或Servlets。根據(jù)J2EE規(guī)范,靜態(tài)的HTML頁(yè)面和Applets都不是Web層組件。Web層可能包含某些JavaBean對(duì)象來(lái)處理用戶輸入,并把輸入發(fā)送給運(yùn)行在業(yè)務(wù)層上的enterprise bean來(lái)進(jìn)行處理。
2.業(yè)務(wù)層組件
業(yè)務(wù)層的代碼邏輯用來(lái)滿足銀行、零售、金融等特殊商務(wù)領(lǐng)域的需要,由運(yùn)行在業(yè)務(wù)層上的enterprise bean進(jìn)行處理。
有三種企業(yè)級(jí)的bean:會(huì)話(session)beans、實(shí)體(entity)beans和消息驅(qū)動(dòng)(mesage-driven)beans。會(huì)話bean表示與客戶端程序的臨時(shí)交互,當(dāng)客戶端程序執(zhí)行完畢,會(huì)話bean和相關(guān)數(shù)據(jù)就會(huì)消失。相反,實(shí)體bean表示數(shù)據(jù)庫(kù)表中一行永久的記錄,當(dāng)客戶端程序中止或服務(wù)器關(guān)閉時(shí),就會(huì)有潛在的系統(tǒng)服務(wù)保證實(shí)體bean的數(shù)據(jù)得以保存。消息驅(qū)動(dòng)bean結(jié)合了會(huì)話bean和JMS的消息監(jiān)聽器的特性,允許一個(gè)業(yè)務(wù)層組件異步接收J(rèn)MS消息。
3.企業(yè)信息系統(tǒng)層
企業(yè)信息系統(tǒng)層處理企業(yè)信息系統(tǒng)軟件,包括企業(yè)基礎(chǔ)建設(shè)系統(tǒng),如企業(yè)資源計(jì)劃(ERP)、大型機(jī)事務(wù)處理、數(shù)據(jù)庫(kù)系統(tǒng)和其他的遺留信息系統(tǒng)等。例如,J2EE應(yīng)用組件可能為了數(shù)據(jù)庫(kù)連接需要訪問(wèn)企業(yè)信息系統(tǒng)4。
主要技術(shù)規(guī)范J2EE平臺(tái)由一整套服務(wù)(services)、應(yīng)用程序接口(APIs)和協(xié)議構(gòu)成,它對(duì)開發(fā)基于Web的多層應(yīng)用提供了功能支持,下面對(duì)J2EE中的主要技術(shù)規(guī)范進(jìn)行簡(jiǎn)單的描述。
1.JDBC(Java Database Connectivity)
JDBCAPI為訪問(wèn)不同的數(shù)據(jù)庫(kù)提供了一種統(tǒng)一的途徑,像ODBC一樣,JDBC對(duì)開發(fā)者屏蔽了一些細(xì)節(jié)問(wèn)題。另外,JDBC對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)也具有平臺(tái)無(wú)關(guān)性。
2.JNDI(Java Name and Directory Interface)
JNDIAPI用于執(zhí)行名字和目錄服務(wù)。它提供了一致的模型來(lái)存取和操作企業(yè)級(jí)的資源,如DNS和LDAP、本地文件系統(tǒng)、應(yīng)用服務(wù)器中的對(duì)象。
3.EJB(Enterprise JavaBean)
EJB技術(shù)是在Java Bean本地組件技術(shù)基礎(chǔ)上開發(fā)的面向服務(wù)器端分布應(yīng)用的組件技術(shù)。EJB是Sun推出的J2EE規(guī)范的一部分,自從J2EE推出之后,得到了廣泛的發(fā)展,已經(jīng)成為應(yīng)用服務(wù)器端的標(biāo)準(zhǔn)技術(shù)。JB提供了一個(gè)開發(fā)和實(shí)施分布式商務(wù)邏輯的框架,大大地簡(jiǎn)化了具有可伸縮性和高度復(fù)雜的企業(yè)級(jí)應(yīng)用的開發(fā)。EJB規(guī)范定義了EJB組件如何與EJB容器(container)進(jìn)行交互。容器負(fù)責(zé)提供公用服務(wù),如目錄服務(wù)、事務(wù)管理、安全性、資源緩沖池以及容錯(cuò)性等。但EJB并不是實(shí)現(xiàn)J2EE的唯一途徑。正是由于J2EE的開放性,使得有的廠商能夠以一種和EJB平行的方式來(lái)達(dá)到同樣的目的。
EJB基于Java語(yǔ)言,提供了基于Java二進(jìn)制字節(jié)代碼的重用方式。EJB技術(shù)的推出,使得用Java基于組件技術(shù)開發(fā)服務(wù)器端分布式應(yīng)用成為可能。從企業(yè)應(yīng)用多層結(jié)構(gòu)的角度來(lái)看,EJB是業(yè)務(wù)邏輯層的中間件技術(shù)。與JavaBeans的關(guān)鍵不同是它提供了事務(wù)處理的能力。
4.JSP(Java Server Pages)
JSP頁(yè)面由HTML代碼和嵌入其中的Java代碼所組成。服務(wù)器在頁(yè)面被客戶端所請(qǐng)求后對(duì)頁(yè)面中的Java代碼進(jìn)行處理,然后將生成的HTML頁(yè)面返回給客戶端的瀏覽器。
5.Java Servlet Servlet是一種小型的Java程序,它擴(kuò)展了Web服務(wù)器的功能。
作為一種服務(wù)器端的應(yīng)用,和CGI腳本類似,當(dāng)被請(qǐng)求時(shí)開始執(zhí)行。Servlet提供的功能與JSP類似,但實(shí)現(xiàn)方式不同。JSP通常在大量的HTML代碼中嵌入少量的Java代碼,而servlets全部由Java寫成并且生成HTML。
6.RMI/IIOP
RMI(Remote Method Invocation,遠(yuǎn)程方法調(diào)用)是Java的分布式對(duì)象標(biāo)準(zhǔn),允許位于不同主機(jī)上的Java類之間進(jìn)行通信。Java RMI是個(gè)應(yīng)用程序編程接口(API),還是個(gè)分布對(duì)象模型;使用RMI,Java程序員可以像調(diào)用本地操作一樣進(jìn)行網(wǎng)絡(luò)調(diào)用,從而很容易地構(gòu)造分布式系統(tǒng)。IIOP協(xié)議本來(lái)是CORBA的一種傳輸協(xié)議,和RMI結(jié)合在一起,使得整合非Java對(duì)象變得更加簡(jiǎn)單。
7.Java IDL/CORBA
在Java IDL的支持下,開發(fā)人員可以將Java和CORBA集成在一起。他們可以創(chuàng)建Java對(duì)象并在CORBAORB中部署,或者創(chuàng)建 Java類作為和其他ORB一起部署的CORBA對(duì)象的客戶。后者可用于遺留系統(tǒng)的集成。
8.XML(Extensible Markup Language)
XML是一種可以用來(lái)定義其他標(biāo)記語(yǔ)言的語(yǔ)言。它被用來(lái)在不同的商務(wù)過(guò)程中共享數(shù)據(jù)。XML的發(fā)展和Java是相互獨(dú)立的,但是,它和Java具有的相同目標(biāo)正是平臺(tái)獨(dú)立性。Java和XML的組合構(gòu)成一個(gè)完美的具有平臺(tái)獨(dú)立性的解決方案。
9.JavaMail
JavaMail是用于存取郵件服務(wù)器的API,它提供了一套郵件服務(wù)器的抽象類。JavaMail同時(shí)支持SMTP服務(wù)器和IMAP服務(wù)器。
10.JAF(JavaBeans Activation Framework,JavaBeans 激活框架)
JavaMail利用JAF來(lái)處理MIME編碼的郵件附件。MIME的字節(jié)流可以被轉(zhuǎn)換成Java對(duì)象,或者轉(zhuǎn)換自Java對(duì)象。大多數(shù)應(yīng)用不需要直接使用JAF。
11.JMS(Java Message Service)
JMS是用于和面向消息的中間件相互通信的應(yīng)用程序接口(API)。它既支持點(diǎn)對(duì)點(diǎn)的域,又支持發(fā)布/訂閱(publish/subscribe)類型的域,并且提供對(duì)下列類型的支持:經(jīng)認(rèn)可的消息傳遞、事務(wù)型消息的傳遞、一致性消息和具有持久性的訂閱者支持。JMS還提供了與遺留后臺(tái)系統(tǒng)集成的一種方式。
12.JTA(Java Transaction Architecture,Java事務(wù)構(gòu)架)
JTA定義了一種標(biāo)準(zhǔn)的API,應(yīng)用系統(tǒng)由此可以訪問(wèn)各種事務(wù)監(jiān)控。
13.JTS(Java Transaction Service,Java事務(wù)服務(wù))
JTS是CORBAOTS事務(wù)監(jiān)控的基本實(shí)現(xiàn)。JTS規(guī)定了事務(wù)管理器的實(shí)現(xiàn)方式。該事務(wù)管理器是在高層支持 Java Transaction API(JTA)規(guī)范,在系統(tǒng)底層實(shí)現(xiàn)OMGOTS規(guī)范的Java映像。JTS事務(wù)管理器為應(yīng)用服務(wù)器、資源管理器、獨(dú)立的應(yīng)用以及通信資源管理器等提供事務(wù)服務(wù)4。
本詞條內(nèi)容貢獻(xiàn)者為:
孫銳 - 教授 - 合肥工業(yè)大學(xué)