百科解釋
目錄·J2EE簡(jiǎn)介·J2EE初學(xué)者需要注意的問題·J2EE的13種核心技術(shù) J2EE簡(jiǎn)介 J2EE Java2平臺(tái)企業(yè)版(Java 2 Platform,Enterprise Edition) J2EE是一套全然不同于傳統(tǒng)應(yīng)用開發(fā)的技術(shù)架構(gòu),包含許多組件,主要可簡(jiǎn)化且規(guī)范應(yīng)用系統(tǒng)的開發(fā)與部署,進(jìn)而提高可移植性、安全與再用價(jià)值。 J2EE核心是一組技術(shù)規(guī)范與指南,其中所包含的各類組件、服務(wù)架構(gòu)及技術(shù)層次,均有共通的標(biāo)準(zhǔn)及規(guī)格,讓各種依循J2EE架構(gòu)的不同平臺(tái)之間,存在良好的兼容性,解決過去企業(yè)后端使用的信息產(chǎn)品彼此之間無法兼容,導(dǎo)致企業(yè)內(nèi)部或外部難以互通的窘境。 一、J2EE的概念 目前,Java 2平臺(tái)有3個(gè)版本,它們是適用于小型設(shè)備和智能卡的Java 2平臺(tái)Micro 版(Java 2 Platform Micro Edition,J2ME)、適用于桌面系統(tǒng)的Java 2平臺(tái)標(biāo)準(zhǔn)版( Java 2 Platform Standard Edition,J2SE)、適用于創(chuàng)建服務(wù)器應(yīng)用程序和服務(wù)的Jav a 2平臺(tái)企業(yè)版(Java 2 Platform Enterprise Edition,J2EE)。 J2EE是一種利用Java 2平臺(tái)來簡(jiǎn)化企業(yè)解決方案的開發(fā)、部署和管理相關(guān)的復(fù)雜問 題的體系結(jié)構(gòu)。J2EE技術(shù)的基礎(chǔ)就是核心Java平臺(tái)或Java 2平臺(tái)的標(biāo)準(zhǔn)版,J2EE不僅鞏 固了標(biāo)準(zhǔn)版中的許多優(yōu)點(diǎn),例如"編寫一次、隨處運(yùn)行"的特性、方便存取數(shù)據(jù)庫的JDBC API、CORBA技術(shù)以及能夠在Internet應(yīng)用中保護(hù)數(shù)據(jù)的安全模式等等,同時(shí)還提供了對(duì) EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及X ML技術(shù)的全面支持。其最終目的就是成為一個(gè)能夠使企業(yè)開發(fā)者大幅縮短投放市場(chǎng)時(shí)間 的體系結(jié)構(gòu)。 J2體系結(jié)構(gòu)提供中間層集成框架用來滿足無需太多費(fèi)用而又需要高可用性、高可靠 性以及可擴(kuò)展性的應(yīng)用的需求。通過提供統(tǒng)一的開發(fā)平臺(tái),J2EE降低了開發(fā)多層應(yīng)用的 費(fèi)用和復(fù)雜性,同時(shí)提供對(duì)現(xiàn)有應(yīng)用程序集成強(qiáng)有力支持,完全支持Enterprise JavaBeans,有良好的向?qū)еС执虬筒渴饝?yīng)用,添加目錄支持,增強(qiáng)了安全機(jī)制,提高 了性能。 二. J2EE的優(yōu)勢(shì) J2EE為搭建具有可伸縮性、靈活性、易維護(hù)性的商務(wù)系統(tǒng)提供了良好的機(jī)制: 1. 保留現(xiàn)存的IT資產(chǎn): 由于企業(yè)必須適應(yīng)新的商業(yè)需求,利用已有的企業(yè)信息系 統(tǒng)方面的投資,而不是重新制定全盤方案就變得很重要。這樣,一個(gè)以漸進(jìn)的(而不是 激進(jìn)的,全盤否定的)方式建立在已有系統(tǒng)之上的服務(wù)器端平臺(tái)機(jī)制是公司所需求的。J 2EE架構(gòu)可以充分利用用戶原有的投資,如一些公司使用的BEA Tuxedo、IBM CICS, IBM Encina,、Inprise VisiBroker 以及Netscape Application Server。這之所以成為 可能是因?yàn)镴2EE擁有廣泛的業(yè)界支持和一些重要的&#039;企業(yè)計(jì)算&#039;領(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)和硬件也能被保留使用。 2. 高效的開發(fā): J2EE允許公司把一些通用的、很繁瑣的服務(wù)端任務(wù)交給中間件供 應(yīng)商去完成。這樣開發(fā)人員可以集中精力在如何創(chuàng)建商業(yè)邏輯上,相應(yīng)地縮短了開發(fā)時(shí) 間。高級(jí)中間件供應(yīng)商提供以下這些復(fù)雜的中間件服務(wù): o 狀態(tài)管理服務(wù) -- 讓開發(fā)人員寫更少的代碼,不用關(guān)心如何管理狀態(tài), 這樣能夠更快地完成程序開發(fā)。 o 持續(xù)性服務(wù) -- 讓開發(fā)人員不用對(duì)數(shù)據(jù)訪問邏輯進(jìn)行編碼就能編寫應(yīng)用 程序,能生成更輕巧,與數(shù)據(jù)庫無關(guān)的應(yīng)用程序,這種應(yīng)用程序更易于開發(fā)與維護(hù)。 o 分布式共享數(shù)據(jù)對(duì)象CACHE服務(wù) -- 讓開發(fā)人員編制高性能的系統(tǒng),極大 提高整體部署的伸縮性。 3. 支持異構(gòu)環(huán)境: J2EE能夠開發(fā)部署在異構(gòu)環(huán)境中的可移植程序;贘2EE的應(yīng) 用程序不依賴任何特定操作系統(tǒng)、中間件、硬件。因此設(shè)計(jì)合理的基于J2EE的程序只需 開發(fā)一次就可部署到各種平臺(tái)。這在典型的異構(gòu)企業(yè)計(jì)算環(huán)境中是十分關(guān)鍵的。J2EE標(biāo) 準(zhǔn)也允許客戶訂購與J2EE兼容的第三方的現(xiàn)成的組件,把他們部署到異構(gòu)環(huán)境中,節(jié)省 了由自己制訂整個(gè)方案所需的費(fèi)用。 4. 可伸縮性: 企業(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è)處理器。(這是NT服務(wù)器所望塵莫及的)J2EE領(lǐng)域的供應(yīng)商提供了更為廣泛 的負(fù)載平衡策略。能消除系統(tǒng)中的瓶頸,允許多臺(tái)服務(wù)器集成部署。這種部署可達(dá)數(shù)千 個(gè)處理器,實(shí)現(xiàn)可高度伸縮的系統(tǒng),滿足未來商業(yè)應(yīng)用的需要。 穩(wěn)定的可用性: 一個(gè)服務(wù)器端平臺(tái)必須能全天候運(yùn)轉(zhuǎn)以滿足公司客戶、合作伙伴的需要 。因?yàn)镮NTERNET是全球化的、無處不在的,即使在夜間按計(jì)劃停機(jī)也可能造成嚴(yán)重?fù)p失 。若是意外停機(jī),那會(huì)有災(zāi)難性后果。J2EE部署到可靠的操作環(huán)境中,他們支持長期的 可用性。一些J2EE部署在WINDOWS環(huán)境中,客戶也可選擇健壯性能更好的操作系統(tǒng)如Sun Solaris、IBM OS/390。最健壯的操作系統(tǒng)可達(dá)到99.999%的可用性或每年只需5分鐘停機(jī) 時(shí)間。這是實(shí)時(shí)性很強(qiáng)商業(yè)系統(tǒng)理想的選擇。 三. J2EE 的四層模型 J2EE使用多層的分布式應(yīng)用模型,應(yīng)用邏輯按功能劃分為組件,各個(gè)應(yīng)用組件根據(jù) 他們所在的層分布在不同的機(jī)器上。事實(shí)上,sun設(shè)計(jì)J2EE的初衷正是為了解決兩層模式 (client/server)的弊端,在傳統(tǒng)模式中,客戶端擔(dān)當(dāng)了過多的角色而顯得臃腫,在這種 模式中,第一次部署的時(shí)候比較容易,但難于升級(jí)或改進(jìn),可伸展性也不理想,而且經(jīng) ;谀撤N專有的協(xié)議??通常是某種數(shù)據(jù)庫協(xié)議。它使得重用業(yè)務(wù)邏輯和界面邏輯非 常困難,F(xiàn)在J2EE 的多層企業(yè)級(jí)應(yīng)用模型將兩層化模型中的不同層面切分成許多層。一 個(gè)多層化應(yīng)用能夠?yàn)椴煌拿糠N服務(wù)提供一個(gè)獨(dú)立的層,以下是 J2EE 典型的四層結(jié)構(gòu): 運(yùn)行在客戶端機(jī)器上的客戶層組件 運(yùn)行在J2EE服務(wù)器上的Web層組件 運(yùn)行在J2EE服務(wù)器上的業(yè)務(wù)邏輯層組件 運(yùn)行在EIS服務(wù)器上的企業(yè)信息系統(tǒng)(Enterprise information system)層軟件 J2EE應(yīng)用程序組件 J2EE應(yīng)用程序是由組件構(gòu)成的.J2EE組件是具有獨(dú)立功能的軟件單元,它們通過相關(guān) 的類和文件組裝成J2EE應(yīng)用程序,并與其他組件交互。J2EE說明書中定義了以下的J2EE 組件: 應(yīng)用客戶端程序和applets是客戶層組件. Java Servlet和JavaServer Pages(JSP)是web層組件. Enterprise JavaBeans(EJB)是業(yè)務(wù)層組件. 客戶層組件 J2EE應(yīng)用程序可以是基于web方式的,也可以是基于傳統(tǒng)方式的. web 層組件 J2EE web層組件可以是JSP 頁面或Servlets.按照J(rèn)2EE規(guī)范,靜態(tài)的HTML頁面和Appl ets不算是web層組件。 正如下圖所示的客戶層那樣,web層可能包含某些 JavaBean 對(duì)象來處理用戶輸入,并把 輸入發(fā)送給運(yùn)行在業(yè)務(wù)層上的enterprise bean 來進(jìn)行處理。 業(yè)務(wù)層組件 業(yè)務(wù)層代碼的邏輯用來滿足銀行,零售,金融等特殊商務(wù)領(lǐng)域的需要,由運(yùn)行在業(yè)務(wù) 層上的enterprise bean 進(jìn)行處理. 下圖表明了一個(gè)enterprise bean 是如何從客戶端 程序接收數(shù)據(jù),進(jìn)行處理(如果必要的話), 并發(fā)送到EIS 層儲(chǔ)存的,這個(gè)過程也可以逆 向進(jìn)行。 有三種企業(yè)級(jí)的bean: 會(huì)話(session) beans, 實(shí)體(entity) beans, 和消息驅(qū)動(dòng)(messa ge-driven) beans. 會(huì)話bean 表示與客戶端程序的臨時(shí)交互. 當(dāng)客戶端程序執(zhí)行完后, 會(huì)話bean 和相關(guān)數(shù)據(jù)就會(huì)消失. 相反, 實(shí)體bean 表示數(shù)據(jù)庫的表中一行永久的記錄. 當(dāng)客戶端程序中止或服務(wù)器關(guān)閉時(shí), 就會(huì)有潛在的服務(wù)保證實(shí)體bean 的數(shù)據(jù)得以保存. 消息驅(qū)動(dòng) bean 結(jié)合了會(huì)話bean 和 JMS的消息監(jiān)聽器的特性, 允許一個(gè)業(yè)務(wù)層組件異步 接收J(rèn)MS 消息. 企業(yè)信息系統(tǒng)層 企業(yè)信息系統(tǒng)層處理企業(yè)信息系統(tǒng)軟件包括企業(yè)基礎(chǔ)建設(shè)系統(tǒng)例如企業(yè)資源計(jì)劃 (ERP), 大型機(jī)事務(wù)處理, 數(shù)據(jù)庫系統(tǒng),和其它的遺留信息系統(tǒng). 例如,J2EE 應(yīng)用組件可 能為了數(shù)據(jù)庫連接需要訪問企業(yè)信息系統(tǒng) 四. J2EE 的結(jié)構(gòu) 這種基于組件,具有平臺(tái)無關(guān)性的J2EE 結(jié)構(gòu)使得J2EE 程序的編寫十分簡(jiǎn)單,因?yàn)闃I(yè)務(wù) 邏輯被封裝成可復(fù)用的組件,并且J2EE 服務(wù)器以容器的形式為所有的組件類型提供后臺(tái) 服務(wù). 因?yàn)槟悴挥米约洪_發(fā)這種服務(wù), 所以你可以集中精力解決手頭的業(yè)務(wù)問題。 容器和服務(wù) 容器設(shè)置定制了J2EE服務(wù)器所提供得內(nèi)在支持,包括安全,事務(wù)管理,JNDI(Java Naming and Directory Interface)尋址,遠(yuǎn)程連接等服務(wù),以下列出最重要的幾種服務(wù) 。 J2EE安全(Security)模型可以讓你配置 web 組件或enterprise bean ,這樣只有被授權(quán) 的用戶才能訪問系統(tǒng)資源. 每一客戶屬于一個(gè)特別的角色,而每個(gè)角色只允許激活特定 的方法。你應(yīng)在enterprise bean的布置描述中聲明角色和可被激活的方法。由于這種聲 明性的方法,你不必編寫加強(qiáng)安全性的規(guī)則。 J2EE 事務(wù)管理(Transaction Management)模型讓你指定組成一個(gè)事務(wù)中所有方法間的 關(guān)系,這樣一個(gè)事務(wù)中的所有方法被當(dāng)成一個(gè)單一的單元. 當(dāng)客戶端激活一個(gè)enterpris e bean中的方法,容器介入一管理事務(wù)。因有容器管理事務(wù),在enterprise bean中不必 對(duì)事務(wù)的邊界進(jìn)行編碼。要求控制分布式事務(wù)的代碼會(huì)非常復(fù)雜。你只需在布置描述文 件中聲明enterprise bean的事務(wù)屬性,而不用編寫并調(diào)試復(fù)雜的代碼。容器將讀此文件 并為你處理此enterprise bean的事務(wù)。 JNDI 尋址(JNDI Lookup)服務(wù)向企業(yè)內(nèi)的多重名字和目錄服務(wù)提供了一個(gè)統(tǒng)一的接口,這 樣應(yīng)用程序組件可以訪問名字和目錄服務(wù). J2EE遠(yuǎn)程連接(Remote Client Connectivity)模型管理客戶端和enterprise bean間的 低層交互. 當(dāng)一個(gè)enterprise bean創(chuàng)建后, 一個(gè)客戶端可以調(diào)用它的方法就象它和客戶 端位于同一虛擬機(jī)上一樣. 生存周期管理(Life Cycle Management)模型管理enterprise bean的創(chuàng)建和移除,一個(gè) enterprise bean在其生存周期中將會(huì)歷經(jīng)幾種狀態(tài)。容器創(chuàng)建enterprise bean,并在 可用實(shí)例池與活動(dòng)狀態(tài)中移動(dòng)他,而最終將其從容器中移除。即使可以調(diào)用enterprise bean的create及remove方法,容器也將會(huì)在后臺(tái)執(zhí)行這些任務(wù)。 數(shù)據(jù)庫連接池(Database Connection Pooling)模型是一個(gè)有價(jià)值的資源。獲取數(shù)據(jù)庫 連接是一項(xiàng)耗時(shí)的工作,而且連接數(shù)非常有限。容器通過管理連接池來緩和這些問題。e nterprise bean可從池中迅速獲取連接。在bean釋放連接之可為其他bean使用。 容器類型 J2EE應(yīng)用組件可以安裝部署到以下幾種容器中去: EJB 容器管理所有J2EE 應(yīng)用程序中企業(yè)級(jí)bean 的執(zhí)行. enterprise bean 和它們的容 器運(yùn)行在J2EE 服務(wù)器上. Web 容器管理所有J2EE 應(yīng)用程序中JSP頁面和Servlet組件的執(zhí)行. Web 組件和它們的容 器運(yùn)行在J2EE 服務(wù)器上. 應(yīng)用程序客戶端容器管理所有J2EE應(yīng)用程序中應(yīng)用程序客戶端組件的執(zhí)行. 應(yīng)用程序客 戶端和它們的容器運(yùn)行在J2EE 服務(wù)器上. Applet 容器是運(yùn)行在客戶端機(jī)器上的web瀏覽器和 Java 插件的結(jié)合.。 五. J2EE的核心API與組件 J2EE平臺(tái)由一整套服務(wù)(Services)、應(yīng)用程序接口(APIs)和協(xié)議構(gòu)成,它對(duì)開發(fā)基 于Web的多層應(yīng)用提供了功能支持,下面對(duì)J2EE中的13種技術(shù)規(guī)范進(jìn)行簡(jiǎn)單的描述(限于 篇幅,這里只能進(jìn)行簡(jiǎn)單的描述): 1. JDBC(Java Database Connectivity): JDBC API為訪問不同的數(shù)據(jù)庫提供了一種統(tǒng)一的途徑,象ODBC一樣,JDBC對(duì)開發(fā)者屏蔽 了一些細(xì)節(jié)問題,另外,JDCB對(duì)數(shù)據(jù)庫的訪問也具有平臺(tái)無關(guān)性。 2. JNDI(Java Name and Directory Interface): JNDI API被用于執(zhí)行名字和目錄服務(wù)。它提供了一致的模型來存取和操作企業(yè)級(jí)的資源 如DNS和LDAP,本地文件系統(tǒng),或應(yīng)用服務(wù)器中的對(duì)象。 3. EJB(Enterprise JavaBean): J2EE技術(shù)之所以贏得某體廣泛重視的原因之一就是EJB。它們提供了一個(gè)框架來開發(fā)和實(shí) 施分布式商務(wù)邏輯,由此很顯著地簡(jiǎn)化了具有可伸縮性和高度復(fù)雜的企業(yè)級(jí)應(yīng)用的開發(fā) 。EJB規(guī)范定義了EJB組件在何時(shí)如何與它們的容器進(jìn)行交互作用。容器負(fù)責(zé)提供公用的 服務(wù),例如目錄服務(wù)、事務(wù)管理、安全性、資源緩沖池以及容錯(cuò)性。但這里值得注意的 是,EJB并不是實(shí)現(xiàn)J2EE的唯一途徑。正是由于J2EE的開放性,使得有的廠商能夠以一種 和EJB平行的方式來達(dá)到同樣的目的。 4. RMI(Remote Method Invoke): 正如其名字所表示的那樣,RMI協(xié)議調(diào)用遠(yuǎn)程對(duì)象上方法。它使用了序列化方式在客戶端 和服務(wù)器端傳遞數(shù)據(jù)。RMI是一種被EJB使用的更底層的協(xié)議。 5. Java IDL/CORBA: 在Java IDL的支持下,開發(fā)人員可以將Java和CORBA集成在一起。他們可以創(chuàng)建Java對(duì)象 并使之可在CORBA ORB中展開, 或者他們還可以創(chuàng)建Java類并作為和其它ORB一起展開的C ORBA對(duì)象的客戶。后一種方法提供了另外一種途徑,通過它Java可以被用于將你的新的 應(yīng)用和舊的系統(tǒng)相集成。 6. JSP(Java Server Pages): JSP頁面由HTML代碼和嵌入其中的Java代碼所組成。服務(wù)器在頁面被客戶端所請(qǐng)求以后對(duì) 這些Java代碼進(jìn)行處理,然后將生成的HTML頁面返回給客戶端的瀏覽器。 7. Java Servlet: Servlet是一種小型的Java程序,它擴(kuò)展了Web服務(wù)器的功能。作為一種服務(wù)器端的應(yīng)用 ,當(dāng)被請(qǐng)求時(shí)開始執(zhí)行,這和CGI Perl腳本很相似。Servlet提供的功能大多與JSP類似 ,不過實(shí)現(xiàn)的方式不同。JSP通常是大多數(shù)HTML代碼中嵌入少量的Java代碼,而servlets 全部由Java寫成并且生成HTML。 8. XML(Extensible Markup Language): XML是一種可以用來定義其它標(biāo)記語言的語言。它被用來在不同的商務(wù)過程中共享數(shù)據(jù)。 XML的發(fā)展和Java是相互獨(dú)立的,但是,它和Java具有的相同目標(biāo)正是平臺(tái)獨(dú)立性。通過 將Java和XML的組合,您可以得到一個(gè)完美的具有平臺(tái)獨(dú)立性的解決方案。 9. JMS(Java Message Service): MS是用于和面向消息的中間件相互通信的應(yīng)用程序接口(API)。它既支持點(diǎn)對(duì)點(diǎn)的域,有 支持發(fā)布/訂閱(publish/subscribe)類型的域,并且提供對(duì)下列類型的支持:經(jīng)認(rèn)可的 消息傳遞,事務(wù)型消息的傳遞,一致性消息和具有持久性的訂閱者支持。JMS還提供了另 一種方式來對(duì)您的應(yīng)用與舊的后臺(tái)系統(tǒng)相集成。 10. JTA(Java Transaction Architecture): JTA定義了一種標(biāo)準(zhǔn)的API,應(yīng)用系統(tǒng)由此可以訪問各種事務(wù)監(jiān)控。 11. JTS(Java Transaction Service): JTS是CORBA OTS事務(wù)監(jiān)控的基本的實(shí)現(xiàn)。JTS規(guī)定了事務(wù)管理器的實(shí)現(xiàn)方式。該事務(wù)管理 器是在高層支持Java Transaction API (JTA)規(guī)范,并且在較底層實(shí)現(xiàn)OMG OTS specification的Java映像。JTS事務(wù)管理器為應(yīng)用服務(wù)器、資源管理器、獨(dú)立的應(yīng)用以 及通信資源管理器提供了事務(wù)服務(wù)。 12. JavaMail: JavaMail是用于存取郵件服務(wù)器的API,它提供了一套郵件服務(wù)器的抽象類。不僅支持SM TP服務(wù)器,也支持IMAP服務(wù)器。 JAF(JavaBeans Activation Framework): JavaMail利用JAF來處理MIME編碼的郵件附件。MIME的字節(jié)流可以被轉(zhuǎn)換成Java對(duì)象,或 者轉(zhuǎn)換自Java對(duì)象。大多數(shù)應(yīng)用都可以不需要直接使用JAF。J2EE初學(xué)者需要注意的問題 體系結(jié)構(gòu)簡(jiǎn)單介紹 一、J2EE提出的背景 1、 企業(yè)級(jí)應(yīng)用框架的需求 在許多企業(yè)級(jí)應(yīng)用中,例如數(shù)據(jù)庫連接、郵件服務(wù)、事務(wù)處理等都是一些通用企業(yè)需求模塊,這些模塊如果每次再開發(fā)中都由開發(fā)人員來完成的話,將會(huì)造成開發(fā)周期長和代碼可靠性差等問題。于是許多大公司開發(fā)了自己的通用模塊服務(wù)。這些服務(wù)性的軟件系列統(tǒng)稱為中間件。 2、 為了通用必須要提出規(guī)范,不然無法達(dá)到通用 在上面的需求基礎(chǔ)之上,許多公司都開發(fā)了自己的中間件,但其與用戶的溝通都各有不同,從而導(dǎo)致用戶無法將各個(gè)公司不同的中間件組裝在一塊為自己服務(wù)。從而產(chǎn)生瓶頸。于是提出標(biāo)準(zhǔn)的概念。其實(shí)J2EE就是基于JAVA技術(shù)的一系列標(biāo)準(zhǔn)。 注:中間件的解釋 中間件處在操作系統(tǒng)和更高一級(jí)應(yīng)用程序之間。它充當(dāng)?shù)墓δ苁牵簩?yīng)用程序運(yùn)行環(huán)境與操作系統(tǒng)隔離,從而實(shí)現(xiàn)應(yīng)用程序開發(fā)者不必為更多系統(tǒng)問題憂慮,而直接關(guān)注該應(yīng)用程序在解決問題上的能力 。我們后面說到的容器的概念就是中間件的一種。 二、相關(guān)名詞解釋 容器:充當(dāng)中間件的角色 WEB容器:給處于其中的應(yīng)用程序組件(JSP,SERVLET)提供一個(gè)環(huán)境,使JSP,SERVLET直接與容器中的環(huán)境變量接口交互,不必關(guān)注其它系統(tǒng)問題。主要由WEB服務(wù)器來實(shí)現(xiàn)。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴(yán)格遵守J2EE規(guī)范中的WEB APPLICATION 標(biāo)準(zhǔn)。我們把遵守以上標(biāo)準(zhǔn)的WEB服務(wù)器就叫做J2EE中的WEB容器。 容器:Enterprise java bean 容器。更具有行業(yè)領(lǐng)域特色。他提供給運(yùn)行在其中的組件EJB各種管理功能。只要滿足J2EE規(guī)范的EJB放入該容器,馬上就會(huì)被容器進(jìn)行高效率的管理。并且可以通過現(xiàn)成的接口來獲得系統(tǒng)級(jí)別的服務(wù)。例如郵件服務(wù)、事務(wù)管理。 WEB容器和EJB容器在原理上是大體相同的,更多的區(qū)別是被隔離的外界環(huán)境。WEB容器更多的是跟基于HTTP的請(qǐng)求打交道。而EJB容器不是。它是更多的跟數(shù)據(jù)庫、其它服務(wù)打交道。但他們都是把與外界的交互實(shí)現(xiàn)從而減輕應(yīng)用程序的負(fù)擔(dān)。例如SERVLET不用關(guān)心HTTP的細(xì)節(jié),直接引用環(huán)境變量session,request,response就行、EJB不用關(guān)心數(shù)據(jù)庫連接速度、各種事務(wù)控制,直接由容器來完成。 RMI/IIOP:遠(yuǎn)程方法調(diào)用internet對(duì)象請(qǐng)求中介協(xié)議,他們主要用于通過遠(yuǎn)程調(diào)用服務(wù)。例如,遠(yuǎn)程有一臺(tái)計(jì)算機(jī)上運(yùn)行一個(gè)程序,它提供股票分析服務(wù),我們可以在本地計(jì)算機(jī)上實(shí)現(xiàn)對(duì)其直接調(diào)用。當(dāng)然這是要通過一定的規(guī)范才能在異構(gòu)的系統(tǒng)之間進(jìn)行通信。RMI是JAVA特有的。 JNDI:JAVA命名目錄服務(wù)。主要提供的功能是:提供一個(gè)目錄系統(tǒng),讓其它各地的應(yīng)用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應(yīng)用程序的功能。 JMS:JAVA消息服務(wù)。主要實(shí)現(xiàn)各個(gè)應(yīng)用程序之間的通訊。包括點(diǎn)對(duì)點(diǎn)和廣播。 JAVAMAIL:JAVA郵件服務(wù)。提供郵件的存儲(chǔ)、傳輸功能。他是編程中實(shí)現(xiàn)郵件功能的核心。相當(dāng)MS中的EXCHANGE開發(fā)包。 JTA:JAVA事務(wù)服務(wù)。提供各種分布式事務(wù)服務(wù)。應(yīng)用程序只需調(diào)用其提供的接口即可。 JAF:JAVA安全認(rèn)證框架。提供一些安全控制方面的框架。讓開發(fā)者通過各種部署和自定義實(shí)現(xiàn)自己的個(gè)性安全控制策略。 EAI:企業(yè)應(yīng)用集成。是一種概念,從而牽涉到好多技術(shù)。J2EE技術(shù)是一種很好的集成實(shí)現(xiàn)。 三、J2EE的優(yōu)越性 1、 基于JAVA 技術(shù),平臺(tái)無關(guān)性表現(xiàn)突出 2、 開放的標(biāo)準(zhǔn),許多大型公司已經(jīng)實(shí)現(xiàn)了對(duì)該規(guī)范支持的應(yīng)用服務(wù)器。如BEA,IBM,ORACLE等。 3、 提供相當(dāng)專業(yè)的通用軟件服務(wù)。 4、 提供了一個(gè)優(yōu)秀的企業(yè)級(jí)應(yīng)用程序框架,對(duì)快速高質(zhì)量開發(fā)打下基礎(chǔ) 四、現(xiàn)狀 J2EE是由SUN 公司開發(fā)的一套企業(yè)級(jí)應(yīng)用規(guī)范,F(xiàn)在最高版本是1.6。支持J2EE的應(yīng)用服務(wù)器有IBM WEBSPHERE APPLICATION SERVER,BEA WEBLOGIC SERVER,JBOSS,ORACLE APPLICATION SERVER,SUN ONE APPLICATION SERVER 等。J2EE的13種核心技術(shù) 為了聯(lián)系實(shí)際,GOULD基于WEBLOGIC應(yīng)用服務(wù)器(來自BEA SYSTEMS公司的一種廣為應(yīng)用的產(chǎn)品)環(huán)境來介紹J2EE的這些技術(shù)。 JAVA最初是在瀏覽器和客戶端機(jī)器中粉墨登場(chǎng)的。當(dāng)時(shí),很多人質(zhì)疑它是否適合做服務(wù)器端的開發(fā),F(xiàn)在,隨著對(duì)JAVA2平臺(tái)企業(yè)版(J2EE)第三方支持的增多,JAVA被廣泛接納為開發(fā)企業(yè)級(jí)服務(wù)器端解決方案的首選平臺(tái)之一。 J2EE平臺(tái)由一整套服務(wù)(SERVICES)、應(yīng)用程序接口(APIS)和協(xié)議構(gòu)成,它對(duì)開發(fā)基于WEB的多層應(yīng)用提供了功能支持。在本文中我將解釋支撐J2EE的13種核心技術(shù):JDBC, JNDI, EJBS, RMI, JSP, JAVA SERVLETS, XML, JMS, JAVA IDL, JTS, JTA, JAVA MAIL 和 JAF,同時(shí)還將描述在何時(shí)、何處需要使用這些技術(shù)。當(dāng)然,我還要介紹這些不同的技術(shù)之間是如何交互的。此外,為了讓您更好地感受J2EE的真實(shí)應(yīng)用,我將在WEBLOGIC應(yīng)用服務(wù)器(來自BEA SYSTEMS公司的一種廣為應(yīng)用的產(chǎn)品)環(huán)境下來介紹這些技術(shù)。不論對(duì)于WEBLOGIC應(yīng)用服務(wù)器和J2EE的新手,還是那些想了解J2EE能帶來什么好處的項(xiàng)目管理者和系統(tǒng)分析員,相信本文一定很有參考價(jià)值。 宏觀印象: 分布式結(jié)構(gòu)和J2EE 過去,二層化應(yīng)用--通常被稱為CLIENT/SERVER應(yīng)用--是大家談?wù)摰淖疃嗟。在很多情況下,服務(wù)器提供的唯一服務(wù)就是數(shù)據(jù)庫服務(wù)。在這種解決方案中,客戶端程序負(fù)責(zé)數(shù)據(jù)訪問、實(shí)現(xiàn)業(yè)務(wù)邏輯、用合適的樣式顯示結(jié)果、彈出預(yù)設(shè)的用戶界面、接受用戶輸入等。CLIENT/SERVER結(jié)構(gòu)通常在第一次部署的時(shí)候比較容易,但難于升級(jí)或改進(jìn),而且經(jīng);谀撤N專有的協(xié)議(通常是某種數(shù)據(jù)庫協(xié)議)。它使得重用業(yè)務(wù)邏輯和界面邏輯非常困難。更重要的是,在WEB時(shí)代,二層化應(yīng)用通常不能體現(xiàn)出很好的伸縮性,因而很難適應(yīng)INTERNET的要求。 SUN設(shè)計(jì)J2EE的部分起因就是想解決二層化結(jié)構(gòu)的缺陷。于是J2EE定義了一套標(biāo)準(zhǔn)來簡(jiǎn)化N層企業(yè)級(jí)應(yīng)用的開發(fā)。它定義了一套標(biāo)準(zhǔn)化的組件,并為這些組件提供了完整的服務(wù)。J2EE還自動(dòng)為應(yīng)用程序處理了很多實(shí)現(xiàn)細(xì)節(jié),如安全、多線程等。用J2EE開發(fā)N層應(yīng)用包括將二層化結(jié)構(gòu)中的不同層面切分成許多層。一個(gè)N層化應(yīng)用A能夠?yàn)橐韵碌拿糠N服務(wù)提供一個(gè)分開的層:顯示:在一個(gè)典型的WEB應(yīng)用中,客戶端機(jī)器上運(yùn)行的瀏覽器負(fù)責(zé)實(shí)現(xiàn)用戶界面。 動(dòng)態(tài)生成顯示: 盡管瀏覽器可以完成某些動(dòng)態(tài)內(nèi)容顯示,但為了兼容不同的瀏覽器,這些動(dòng)態(tài)生成工作應(yīng)該放在WEB服務(wù)器端進(jìn)行,使用JSP、SERVLETS,或者XML(可擴(kuò)展標(biāo)記語言)和(可擴(kuò)展樣式表語言)。 業(yè)務(wù)邏輯:業(yè)務(wù)邏輯適合用SESSION EJB(后面將介紹)來實(shí)現(xiàn)。 數(shù)據(jù)訪問:數(shù)據(jù)訪問適合用ENTITY EJB(后面將介紹)和JDBC來實(shí)現(xiàn)。 后臺(tái)系統(tǒng)集成: 后臺(tái)系統(tǒng)的集成可能需要用到許多不同的技術(shù),至于何種最佳需要根據(jù)后臺(tái)系統(tǒng)的特征而定。 您可能開始詫異:為什么有這么多的層?事實(shí)上,多層方式可以使企業(yè)級(jí)應(yīng)用具有很強(qiáng)的伸縮性,它允許每層專注于特定的角色。例如,讓W(xué)EB服務(wù)器負(fù)責(zé)提供頁面,應(yīng)用服務(wù)器處理應(yīng)用邏輯,而數(shù)據(jù)庫服務(wù)器提供數(shù)據(jù)庫服務(wù)。 由于J2EE建立在JAVA2平臺(tái)標(biāo)準(zhǔn)版(J2SE)的基礎(chǔ)上,所以具備了J2SE的所有優(yōu)點(diǎn)和功能。包括“編寫一次,到處可用”的可移植性、通過JDBC訪問數(shù)據(jù)庫、同原有企業(yè)資源進(jìn)行交互的CORBA技術(shù)以及一個(gè)經(jīng)過驗(yàn)證的安全模型。在這些基礎(chǔ)上,J2EE又增加了對(duì)EJB(企業(yè)級(jí)JAVA組件)、JAVA SERVLETS、JAVA服務(wù)器頁面(JSPS)和XML技術(shù)的支持。 分布式結(jié)構(gòu)與WEBLOGIC應(yīng)用服務(wù)器 J2EE提供了一個(gè)框架--一套標(biāo)準(zhǔn)API--用于開發(fā)分布式結(jié)構(gòu)的應(yīng)用,這個(gè)框架的實(shí)際實(shí)現(xiàn)留給了第三方廠商。部分廠商只是專注于整個(gè)J2EE架構(gòu)中的的特定組件,例如APACHE的TOMCAT提供了對(duì)JSP和SERVLETS的支持,BEA系統(tǒng)公司則通過其WEBLOGIC應(yīng)用服務(wù)器產(chǎn)品為整個(gè) J2EE規(guī)范提供了一個(gè)較為完整的實(shí)現(xiàn)。 WEBLOGIC服務(wù)器已使建立和部署伸縮性較好的分布式應(yīng)用的過程大為簡(jiǎn)化。WEBLOGIC和J2EE代你處理了大量常規(guī)的編程任務(wù),包括提供事務(wù)服務(wù)、安全領(lǐng)域、可靠的消息、名字和目錄服務(wù)、數(shù)據(jù)庫訪問和連接池、線程池、負(fù)載平衡和容錯(cuò)處理等。通過以一種標(biāo)準(zhǔn)、易用的方式提供這些公共服務(wù),象WEBLOGIC服務(wù)器這樣的產(chǎn)品造就了具有更好伸縮性和可維護(hù)性的應(yīng)用系統(tǒng),使其為大量的用戶提供了增長的可用性。 J2EE技術(shù)在接下來的部分里,我們將描述構(gòu)成J2EE的各種技術(shù),并且了解WEBLOGIC服務(wù)器是如何在一個(gè)分布式應(yīng)用中對(duì)它們進(jìn)行支持的。最常用的J2EE技術(shù)應(yīng)該是JDBC、JNDI、EJB、JSP和SERVLETS,對(duì)這些我們將作更仔細(xì)的考察。 JAVA DATABASE CONNECTIVITY (JDBC) JDBC API以一種統(tǒng)一的方式來對(duì)各種各樣的數(shù)據(jù)庫進(jìn)行存取。和ODBC一樣,JDBC為開發(fā)人員隱藏了不同數(shù)據(jù)庫的不同特性。另外,由于JDBC建立在JAVA的基礎(chǔ)上,因此還提供了數(shù)據(jù)庫存取的平臺(tái)獨(dú)立性。 JDBC定義了4種不同的驅(qū)動(dòng)程序,現(xiàn)分述如下: 類型 1: JDBC-ODBC BRIDGE 在JDBC出現(xiàn)的初期,JDBC-ODBC橋顯然是非常有實(shí)用意義的,通過JDBC-ODBC橋,開發(fā)人員可以使用JDBC來存取ODBC數(shù)據(jù)源。不足的是,他需要在客戶端安裝ODBC驅(qū)動(dòng)程序,換句話說,必須安裝MICROSOFT WINDOWS的某個(gè)版本。使用這一類型你需要犧牲JDBC的平臺(tái)獨(dú)立性。另外,ODBC驅(qū)動(dòng)程序還需要具有客戶端的控制權(quán)限。 類型 2: JDBC-NATIVE DRIVER BRIDGE JDBC本地驅(qū)動(dòng)程序橋提供了一種JDBC接口,它建立在本地?cái)?shù)據(jù)庫驅(qū)動(dòng)程序的頂層,而不需要使用ODBC。 JDBC驅(qū)動(dòng)程序?qū)?duì)數(shù)據(jù)庫的API從標(biāo)準(zhǔn)的JDBC調(diào)用轉(zhuǎn)換為本地調(diào)用。使用此類型需要犧牲JDBC的平臺(tái)獨(dú)立性,還要求在客戶端安裝一些本地代碼。 類型 3: JDBC-NETWORK BRIDGE JDBC網(wǎng)絡(luò)橋驅(qū)動(dòng)程序不再需要客戶端數(shù)據(jù)庫驅(qū)動(dòng)程序。它使用網(wǎng)絡(luò)上的中間服務(wù)器來存取數(shù)據(jù)庫。這種應(yīng)用使得以下技術(shù)的實(shí)現(xiàn)有了可能,這些技術(shù)包括負(fù)載 均衡、連接緩沖池和數(shù)據(jù)緩存等。由于第3種類型往往只需要相對(duì)更少的下載時(shí)間,具有平臺(tái)獨(dú)立性,而且不需要在客戶端安裝并取得控制權(quán),所以很適合于 INTERNET上的應(yīng)用。 類型 4: PURE JAVA DRIVER 第4種類型通過使用一個(gè)純JAVA數(shù)據(jù)庫驅(qū)動(dòng)程序來執(zhí)行數(shù)據(jù)庫的直接訪問。此類型實(shí)際上在客戶端實(shí)現(xiàn)了2層結(jié)構(gòu)。要在N-層結(jié)構(gòu)中應(yīng)用,一個(gè)更好的做法是編寫一個(gè)EJB,讓它包含存取代碼并提供一個(gè)對(duì)客戶端具有數(shù)據(jù)庫獨(dú)立性的服務(wù)。 WEBLOGIC服務(wù)器為一些通常的數(shù)據(jù)庫提供了JDBC驅(qū)動(dòng)程序,包括ORACLE, SYBASE, MICROSOFT SQL SERVER以及INFORMIX。它也帶有一種JDBC驅(qū)動(dòng)程序用于CLOUDSCAPE,這是一種純JAVA的DBMS,WEBLOGIC服務(wù)器中帶有該數(shù)據(jù)庫的評(píng)估版本。 以下讓我們看一個(gè)實(shí)例。 JDBC實(shí)例在這個(gè)例子中我們假定你已經(jīng)在CLOUDSCAPE中建立了一個(gè)PHONEBOOK數(shù)據(jù)庫,并且包含一個(gè)表,名為CONTACT_TABLE ,它帶有2個(gè)字段:NAME 和 PHONE。開始的時(shí)候先裝載CLOUDSCAPE JDBC DRIVER,并請(qǐng)求DRIVER MANAGER得到一個(gè)對(duì)PHONEBOOK CLOUDSCAPE數(shù)據(jù)庫的連接。通過這一連接,我們可以構(gòu)造一個(gè)STATEMENT 對(duì)象并用它來執(zhí)行一個(gè)簡(jiǎn)單的SQL查詢。最后,用循環(huán)來遍歷結(jié)果集的所有數(shù)據(jù),并用標(biāo)準(zhǔn)輸出將NAME和PHONE字段的內(nèi)容進(jìn)行輸出。 IMPORT JAVA.SQL.*; PUBLIC CLASS JDBCEXAMPLE{ PUBLIC STATIC VOID MAIN( STRING ARGS[] ){ TRY{ CLASS.FORNAME("COM.CLOUDSCAPE.CORE.JDBCDRIVER"); CONNECTION CONN = DRIVERMANAGER.GETCONNECTION("JDBC:CLOUDSCAPE:PHONEBOOK"); STATEMENT STMT = CONN.CREATESTATEMENT(); STRING SQL = "SELECT NAME, PHONE FROM CONTACT_TABLE ORDER BY NAME"; RESULTSET RESULTSET = STMT.EXECUTEQUERY( SQL ); STRING NAME; STRING PHONE; WHILE ( RESULTSET.NEXT() ){ NAME = RESULTSET.GETSTRING(1).TRIM(); PHONE = RESULTSET.GETSTRING(2).TRIM(); SYSTEM.OUT.PRINTLN( NAME + ", " + PHONE ); } }CATCH ( EXCEPTION E ){ // HANDLE EXCEPTION HERE E.PRINTSTACKTRACE(); } } } OK。接著我們來看一看JDBC是如何在企業(yè)應(yīng)用中的進(jìn)行使用。JDBC在企業(yè)級(jí)應(yīng)用中的應(yīng)用以上實(shí)例其實(shí)是很基本的,可能有些微不足道。它假定了一個(gè)2層結(jié)構(gòu)。在一個(gè)多層的企業(yè)級(jí)應(yīng)用中,更大的可能是在客戶端和一個(gè)EJB進(jìn)行通信,該EJB將建立數(shù)據(jù)庫連接。為了實(shí)現(xiàn)和改進(jìn)可伸縮性和系統(tǒng)性能,WEBLOGIC服務(wù)器提供了對(duì)連接緩沖池CONNECTION POOL的支持。CONNECTION POOL減少了建立和釋放數(shù)據(jù)庫連接的消耗。在系統(tǒng)啟動(dòng)以后即可建立這樣的緩沖池,此后如故再有對(duì)數(shù)據(jù)庫的請(qǐng)求,WEBLOGIC服務(wù)器可以很簡(jiǎn)單地從緩 沖池中取出數(shù)據(jù)。數(shù)據(jù)緩沖池可以在WEBLOGIC服務(wù)器的WEBLOGIC.PROPERTIES 文件中進(jìn)行定義。(可參考 WEBLOGIC.PROPERTIES 文件中的例子,WEBLOGIC服務(wù)器的文檔中還有更詳細(xì)的參考信息)在企業(yè)級(jí)應(yīng)用的另一 個(gè)常見的數(shù)據(jù)庫特性是事務(wù)處理。事務(wù)是一組申明STATEMENT,它們必須做為同一個(gè)STATEMENT來處理以保證數(shù)據(jù)完整性。缺省情況下JDBC使 用 AUTO-COMMIT 事務(wù)模式。這可以通過使用CONNECTION類的 SETAUTOCOMMIT() 方法來實(shí)現(xiàn)。 現(xiàn)在我們已經(jīng)對(duì)JDBC有了一些認(rèn)識(shí),下面該轉(zhuǎn)向JNDI了。 JAVA NAMING AND DIRECTORY INTERFACE (JNDI) JNDI API被用于執(zhí)行名字和目錄服務(wù)。它提供了一致的模型來存取和操作企業(yè)級(jí)的資源如DNS和LDAP,本地文件系統(tǒng),后者在應(yīng)用服務(wù)器中的對(duì)象。 在JNDI中,在目錄結(jié)構(gòu)中的每一個(gè)結(jié)點(diǎn)稱為CONTEXT。每一個(gè)JNDI名字都是相對(duì)于CONTEXT的。這里沒有絕對(duì)名字的概念存在。對(duì)一個(gè)應(yīng)用來說,它可以通過使用 INITIALCONTEXT 類來得到其第一個(gè)CONTEXT: CONTEXT CTX = NEW INITIALCONTEXT(); 應(yīng)用可以通過這個(gè)初始化的CONTEXT經(jīng)有這個(gè)目錄樹來定位它所需要的資源或?qū)ο蟆@,假設(shè)你在WEBLOGIC服務(wù)器中展開了一個(gè)EJB并將 HOME接口綁定到名字 MYAPP.MYEJB ,那么該EJB的某個(gè)客戶在取得一個(gè)初始化 CONTEXT以后,可以通過以下語句定位HOME接口: MYEJBHOME HOME = CTX.LOOKUP( "MYAPP.MYEJB" ); 在這個(gè)例子中,一旦你有了對(duì)被請(qǐng)求對(duì)象的參考,EJB的HOME接口就可以在它上面調(diào)用方法。我們將在下面的"ENTERPRISE JAVA BEANS"章節(jié)中做更多的介紹。 以上關(guān)于JNDI的討論只是冰山之一角而已。如果要更進(jìn)一步地在CONTEXT中查找對(duì)象,JNDI也提供了一些方法來進(jìn)行以下操作: 將一個(gè)對(duì)象插入或綁定到CONTEXT。這在你展開一個(gè)EJB的時(shí)候是很有效的。 從CONTEXT中移去對(duì)象。 列出CONTEXT中的所有對(duì)象。 創(chuàng)建或刪除子一級(jí)的CONTEXT。 接下來,我們要開始關(guān)注EJB了。 ENTERPRISE JAVA BEANS (EJB) J2EE技術(shù)之所以贏得某體廣泛重視的原因之一就是EJB。它們提供了一個(gè)框架來開發(fā)和實(shí)施分布式商務(wù)邏輯,由此很顯著地簡(jiǎn)化了具有可伸縮性和高度復(fù)雜的企業(yè)級(jí)應(yīng)用的開發(fā)。EJB規(guī)范定義了EJB組件在何時(shí)以及如何與它們的容器進(jìn)行交互作用。容器負(fù)責(zé)提供公用的服務(wù),例如目錄服務(wù)、事務(wù)管理、安全性、資源緩沖池以及容錯(cuò)性。 EJB規(guī)范定義了3中基本的BEAN類型: STATELESS SESSION BEANS: 提供某種單一的服務(wù),不維持任何狀態(tài),在服務(wù)器故障發(fā)生時(shí)無法繼續(xù)存在,生命期相對(duì)較短。例如,一個(gè)STATELESS SESSION BEAN可能被用于執(zhí)行溫度轉(zhuǎn)換計(jì)算。 STATEFUL SESSION BEAN: 提供了與客戶端的會(huì)話交互,可以存儲(chǔ)狀態(tài)從而代表一個(gè)客戶。典型例子是購物車。STATEFUL SESSION BEAN在服務(wù)器故障時(shí)無法繼續(xù)生存,生命期相對(duì)較短。每一個(gè)實(shí)例只用于一個(gè)單個(gè)的線程 ENTITY BEANS: 提供了一致性數(shù)據(jù)的表示-- 通常存放在數(shù)據(jù)庫中 -- 在服務(wù)器故障發(fā)生后能繼續(xù)存在。多用戶情況下可以使用EJB來表示相同的數(shù)據(jù)。ENTITY EJB的一個(gè)典型例子是客戶的帳號(hào)信息。 盡管有以上的區(qū)別,所有的EJB還是有許多的共同之處: 它們都處理HOME INTERFACE。它定義了一個(gè)客戶端是如何創(chuàng)建與消亡EJB的。 可以在BEAN中對(duì)定義了客戶端方法的遠(yuǎn)程接口進(jìn)行調(diào)用; BEAN類則執(zhí)行了主要的商務(wù)邏輯描述 EJB的開發(fā)已經(jīng)超出了本文的范圍。但是,如果一個(gè)EJB已經(jīng)被開發(fā)了或者從第三方進(jìn)行了購買,它就必須在應(yīng)用服務(wù)器中進(jìn)行發(fā)布。WEBLOGIC SERVER 5.1帶有一個(gè)EJB DEPLOYER TOOL來協(xié)助處理EJB的發(fā)布。當(dāng)你使用EJB DEPLOYER TOOL的時(shí)候,你要定義客戶端所用的JNDI名字來定位EJB。DEPLOYER TOOL將生成WRAPPER類來處理和容器的通信以及在一個(gè)JAR文件中把被請(qǐng)求的JAVA類綁定在一起。一旦EJB被發(fā)布,客戶端就可以使用它的JNDI名字來定位EJB。 首先,它必須得到一個(gè)到HOME接口的REFERENCE。 然后,客戶端可以使用該接口,調(diào)用一個(gè) CREATE() 方法來得到服務(wù)器上運(yùn)行的某個(gè)BEAN實(shí)例的句柄; 最后,客戶端可以使用該句柄在BEAN中調(diào)用方法。 了解 EJB后,讓我們?cè)賮砜碕SP。 JAVA SERVER PAGES (JSPS) 我們中間可能已經(jīng)有許多人已經(jīng)熟悉MICROSOFT的ACTIVE SERVER PAGES (ASP)技術(shù)了。JSP和ASP相對(duì)應(yīng)的,但更具有平臺(tái)對(duì)立性。他們被設(shè)計(jì)用以幫助WEB內(nèi)容開發(fā)人員創(chuàng)建動(dòng)態(tài)網(wǎng)頁,并且只需要相對(duì)較少的代碼。即使WEB設(shè)計(jì)師不懂得如何編程也可以使用JSP,因?yàn)镴SP應(yīng)用是很方便的。JSP頁面由HTML代碼和嵌入其中的JAVA代碼所組成。服務(wù)器在頁面被客戶端所請(qǐng)求以后對(duì)這些JAVA代碼進(jìn)行處理,然后將生成的HTML頁面返回給客戶端的瀏覽器。 下面我們來看一個(gè)JSP的簡(jiǎn)單實(shí)例。它只顯示了服務(wù)器的當(dāng)前日期和時(shí)間。雖然,對(duì)語法的具體解釋已經(jīng)超出了本文的范圍,但我們還是可以很直觀地看到,JAVA代碼被放在<%和%>的中間,而JAVA的表達(dá)式則放在<%=和%>之間。 <html> <head> <title>Sample JSP Page</title> </head> <body> <h1>Date JSP sample</h1> <% response.setHeader("Refresh", 5); %> The current date is <%= new Date() %>. </body> </html> 您可能有時(shí)候聽說過JHTML。這是JSP以前的一種較老的標(biāo)準(zhǔn)。WEBLOGIC服務(wù)器既可支持JSP,又可支持JHTML。 請(qǐng)注意,在缺省狀況下,JSP在WEBLOGIC服務(wù)器中并沒有處于有效狀態(tài)。要使之有效,你可以編輯WEBLOGIC.PROPERTIES文件。如果WEB服務(wù)器還沒有處于有效狀態(tài),則要先使之有效。SERVLET的情況和JSP是一樣的。 下面是:JAVA SERVLETS JAVA SERVLETS SERVLET提供的功能大多與JSP類似,不過實(shí)現(xiàn)的方式不同。JSP通常是大多數(shù)HTML代碼中嵌入少量的JAVA代碼,而SERVLETS全部由JAVA寫成并且生成HTML。 SERVLET是一種小型的JAVA程序,它擴(kuò)展了WEB服務(wù)器的功能。作為一種服務(wù)器端的應(yīng)用,當(dāng)被請(qǐng)求時(shí)開始執(zhí)行,這和CGI PERL腳本很相似。SERVLETS和CGI腳本的一個(gè)很大的區(qū)別是:每一個(gè)CGI在開始的時(shí)候都要求開始一個(gè)新的進(jìn)程 -- 而SERVLETS是在SERVLET引擎中以分離的線程來運(yùn)行的。因此SERVLETS在可伸縮性上提供了很好的改進(jìn)。在開發(fā)SERVLETS的時(shí)候,您常常需要擴(kuò)展JAVA X.SERVLET.HTTP.HTTPSERVLET 類,并且OVERRIDE一些它的方法,其中包括: SERVICE(): 作為DISPATCHER來實(shí)現(xiàn)命令-定義方法 DOGET(): 處理客戶端的HTTP GET請(qǐng)求。 DOPOST(): 進(jìn)行HTTP POST操作 其它的方法還包括處理不同類型的HTTP請(qǐng)求 -- 可以參考HTTPSERVLET API文檔。 以上描述的是標(biāo)準(zhǔn)J2EE SERVLET API的各種方法。WEBLOGIC服務(wù)器提供了一個(gè)該API完整的實(shí)現(xiàn)途徑。一旦你開發(fā)了一個(gè)SERVLET,你就可以在 WEBLOGIC.PROPERTIES 中加以注冊(cè)并由此可以在WEBLOGIC服務(wù)器中對(duì)它進(jìn)行配置。通過JAVA SERVLETS,我們已經(jīng)到達(dá)了J2EE主要技術(shù)的末尾了。但J2EE所提供的并不止于這些。 下面的段落中我們將簡(jiǎn)要地看一下現(xiàn)存的一些技術(shù),包括RMI, JAVA IDL和CORBA, JTA, 以及XML,等等。 REMOTE METHOD INVOCATION (RMI) 正如其名字所表示的那樣,RMI協(xié)議是在遠(yuǎn)程對(duì)象上調(diào)用一些方法。它使用了連續(xù)序列方式在客戶端和服務(wù)器端傳遞數(shù)據(jù)。RMI是一種被EJB使用的更下層的協(xié)議。 JAVA IDL/CORBA 在JAVA IDL的支持下,開發(fā)人員可以將JAVA和CORBA集成在一起。 他們可以創(chuàng)建JAVA對(duì)象并使之可在CORBA ORB中展開, 或者他們還可以創(chuàng)建JAVA類并作為和其它ORB一起展開的CORBA對(duì)象的客戶。后一種方法提供了另外一種途徑,通過它JAVA可以被用于將你的新的應(yīng) 用和LEGACY系統(tǒng)相集成。 JAVA TRANSACTION ARCHITECTURE (JTA)/JAVA TRANSACTION SERVICE (JTS) JTA定義了一種標(biāo)準(zhǔn)的API,應(yīng)用系統(tǒng)由此可以存取各種事務(wù)監(jiān)控。 JTS是CORBA OTS事務(wù)監(jiān)控的基本實(shí)現(xiàn)。JTS規(guī)定了事務(wù)管理器的實(shí)現(xiàn)方式。該事務(wù)管理器是在高層支持JAVA TRANSACTION API (JTA)規(guī)范,并且在較底層實(shí)現(xiàn)OMG OTS SPECIFICATION的JAVA映像。JTS事務(wù)管理器為應(yīng)用服務(wù)器、資源管理器、獨(dú)立的應(yīng)用以及通信資源管理器提供了事務(wù)服務(wù)。 JAVA MAIL AND JAVA BEANS ACTIVATION FRAMEWORK JAVA MAIL是用于存取郵件服務(wù)器的API,它提供了一套郵件服務(wù)器的抽象類。不僅支持SMTP服務(wù)器,也支持IMAP服務(wù)器JAVA MAIL利用JAVA BEANS ACTIVATION FRAMEWORK (JAF)來處理MIME-編碼的郵件附件。MIME的字節(jié)流可以被轉(zhuǎn)換成JAVA對(duì)象,或者轉(zhuǎn)換自JAVA對(duì)象。由此大多數(shù)應(yīng)用都可以不需要直接使用JAF。 JAVA MESSAGING SERVICE (JMS) JMS是用于和面向消息的中間件相互通信的應(yīng)用程序接口(API)。它既支持點(diǎn)對(duì)點(diǎn)的域,又支持發(fā)布/訂閱(PUBLISH/SUBSCRIBE)類型的域,并且提供對(duì)下列類型的支持:經(jīng)認(rèn)可的消息傳遞、事務(wù)型消息的傳遞、一致性消息和具有持久性的訂閱者支持。JMS還提供了另一種方式來對(duì)您的應(yīng)用與LEGACY BACKEND系統(tǒng)相集成。 EXTENSIBLE MARKUP LANGUAGE (XML) XML是一種可以用來定義其它標(biāo)記語言的語言。它被用來在不同的商務(wù)過程中共享數(shù)據(jù)。XML的發(fā)展和JAVA是相互獨(dú)立的,但是,它和JAVA具有的相同目標(biāo)正是平臺(tái)獨(dú)立性。通過將JAVA和XML的組合,您可以得到一個(gè)完美的具有平臺(tái)獨(dú)立性的解決方案。目前正有許多不同的公司在為JAVA和XML的組合而努力。如果要了解更多的這方面的信息,可以訪問SUN的JAVA-XML頁面,或者IBM DEVELOPERWORKS的XML ZONE。 總結(jié) 在本文中,我們介紹了建立在J2EE上的分布式應(yīng)用結(jié)構(gòu),并且描述了WEBLOGIC服務(wù)器對(duì)J2EE的各種支持。然而,我們所揭示的僅僅是冰山之一角而已,要以一篇數(shù)千字的文章來展示J2EE潛在的對(duì)您的企業(yè)級(jí)應(yīng)用的影響可是很不公平的。 我們已經(jīng)關(guān)注了在您開始用J2EE進(jìn)行工作時(shí)最有可能遇到的各類技術(shù):JDBC, JNDI, EJB, JSP和SERVLET。我們也為您提供了一些尚未常見的J2EE技術(shù)的背景知識(shí)。不管您是一名開發(fā)人員,商務(wù)應(yīng)用分析師,或者項(xiàng)目經(jīng)理,都應(yīng)該對(duì)J2EE和WEBLOGIC服務(wù)器所能提供給我們,給我們的企業(yè)以及我們的企業(yè)級(jí)應(yīng)用所帶來的意義有一個(gè)更好的認(rèn)識(shí)。 J2EE 帶動(dòng)了Java在企業(yè)級(jí)的發(fā)展,但隨著一些輕量級(jí)組件的出現(xiàn),J2EE的臃腫和開發(fā)難度高的缺點(diǎn)越來越引起了許多人的注意,EJB2.0也被許多人稱為累贅。隨著Spring,Hibernate的不斷完善和發(fā)展,EJB3.0出現(xiàn)了,成為了未來Java 企業(yè)級(jí)開發(fā)的新的方向。 使用元數(shù)據(jù),注釋代替?zhèn)鹘y(tǒng)的配置文件成為了新的熱點(diǎn)。JPA更是代替了傳統(tǒng)的CMP作為了更加便捷的持久化的方案。
移動(dòng)通信網(wǎng) | 通信人才網(wǎng) | 更新日志 | 團(tuán)隊(duì)博客 | 免責(zé)聲明 | 關(guān)于詞典 | 幫助