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