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