當前位置:編程學習大全網 - 編程語言 - j2ee的核心技術

j2ee的核心技術

為了聯系實際,GOULD基於WEBLOGIC應用服務器(來自BEASYSTEMS公司的壹種廣為應用的產品)環境來介紹J2EE的這些技術。JAVA最初是在瀏覽器和客戶端機器中閃亮登場的。當時,很多人質疑它是否適合做服務器端的開發。隨著對JAVA2平臺企業版(J2EE)第三方支持的增多,JAVA被廣泛接納為開發企業級服務器端解決方案的首選平臺之壹。

J2EE平臺由壹整套服務(SERVICES)、應用程序接口(APIS)和協議構成,它對開發基於WEB的多層應用提供了功能支持。在本文中我將解釋支撐J2EE的13種核心技術:JDBC,JNDI,EJBS,RMI,JSP,JAVA SERVLETS,XML,JMS,JAVA IDL,JTS,JTA,JAVA MAIL 和 JAF,同時還將描述在何時、何處需要使用這些技術。當然,我還要介紹這些不同的技術之間是如何交互的。此外,為了讓您更好地感受J2EE的真實應用,我將在WEBLOGIC應用服務器(來自BEA SYSTEMS公司的壹種廣為應用的產品)環境下來介紹這些技術。不論對於WEBLOGIC應用服務器和J2EE的新手,還是那些想了解J2EE能帶來什麽好處的項目管理者和系統分析員,相信本文壹定很有參考價值。

宏觀印象: 分布式結構和J2EE

過去,二層化應用--通常被稱為CLIENT/SERVER應用--是大家談論的最多的。在很多情況下,服務器提供的唯壹服務就是數據庫服務。在這種解決方案中,客戶端程序負責數據訪問、實現業務邏輯、用合適的樣式顯示結果、彈出預設的用戶界面、接受用戶輸入等。CLIENT/SERVER結構通常在第壹次部署的時候比較容易,但難於升級或改進,而且經常基於某種專有的協議(通常是某種數據庫協議)。它使得重用業務邏輯和界面邏輯非常困難。更重要的是,在WEB時代,二層化應用通常不能體現出很好的伸縮性,因而很難適應INTERNET的要求。

SUN設計J2EE的部分起因就是想解決二層化結構的缺陷。於是J2EE定義了壹套標準來簡化N層企業級應用的開發。它定義了壹套標準化的組件,並為這些組件提供了完整的服務。J2EE還自動為應用程序處理了很多實現細節,如安全、多線程等。用J2EE開發N層應用包括將二層化結構中的不同層面切分成許多層。壹個N層化應用A能夠為以下的每種服務提供壹個分開的層:顯示:在壹個典型的WEB應用中,客戶端機器上運行的瀏覽器負責實現用戶界面。

動態生成顯示: 盡管瀏覽器可以完成某些動態內容顯示,但為了兼容不同的瀏覽器,這些動態生成工作應該放在WEB服務器端進行,使用JSP、SERVLETS,或者XML(標準通用標記語言下的壹個子集可擴展標記語言)和XSL(可擴展樣式表語言)。

業務邏輯:業務邏輯適合用SESSION EJB(後面將介紹)來實現。

數據訪問:數據訪問適合用ENTITY EJB(後面將介紹)和JDBC來實現 。

後臺系統集成: 後臺系統的集成可能需要用到許多不同的技術,至於何種最佳需要根據後臺系統的特征而定。

您可能開始詫異:為什麽有這麽多的層?事實上,多層方式可以使企業級應用具有很強的伸縮性,它允許每層專註於特定的角色。例如,讓WEB服務器負責提供頁面,應用服務器處理應用邏輯,而數據庫服務器提供數據庫服務。

由於J2EE建立在JAVA2平臺標準版(J2SE)的基礎上,所以具備了J2SE的所有優點和功能。包括“編寫壹次,到處可用”的可移植性、通過JDBC訪問數據庫、同原有企業資源進行交互的CORBA技術以及壹個經過驗證的安全模型。在這些基礎上,J2EE又增加了對EJB(企業級JAVA組件)、JAVA SERVLETS、JAVA服務器頁面(JSPS)和XML(標準通用標記語言的子集)技術的支持。

分布式結構與WEBLOGIC應用服務器

J2EE提供了壹個框架--壹套標準API--用於開發分布式結構的應用,這個框架的實際實現留給了第三方廠商。部分廠商只是專註於整個J2EE架構中的的特定組件,例如APACHE的TOMCAT提供了對JSP和SERVLETS的支持,BEA系統公司則通過其WEBLOGIC應用服務器產品為整個 J2EE規範提供了壹個較為完整的實現。

WEBLOGIC服務器已使建立和部署伸縮性較好的分布式應用的過程大為簡化。WEBLOGIC和J2EE代理處理了大量常規的編程任務,包括提供事務服務、安全領域、可靠的消息、名字和目錄服務、數據庫訪問和連接池、線程池、負載平衡和容錯處理等。通過以壹種標準、易用的方式提供這些公***服務,像WEBLOGIC服務器這樣的產品造就了具有更好伸縮性和可維護性的應用系統,使其為大量的用戶提供了增長的可用性。

J2EE技術在接下來的部分裏,我們將描述構成J2EE的各種技術,並且了解WEBLOGIC服務器是如何在壹個分布式應用中對它們進行支持的。最常用的J2EE技術應該是JDBC、JNDI、EJB、JSP和SERVLETS,對這些我們將作更仔細的考察。

JAVA DATABASE CONNECTIVITY (JDBC)

JDBC API以壹種統壹的方式來對各種各樣的數據庫進行存取。和ODBC壹樣,JDBC為開發人員隱藏了不同數據庫的不同特性。另外,由於JDBC建立在JAVA的基礎上,因此還提供了數據庫存取的平臺獨立性。

JDBC定義了4種不同的驅動程序,現分述如下:

類型 1: JDBC-ODBCBRIDGE

在JDBC出現的初期,JDBC-ODBC橋顯然是非常有實用意義的,通過JDBC-ODBC橋,開發人員可以使用JDBC來存取ODBC數據源。不足的是,他需要在客戶端安裝ODBC驅動程序,換句話說,必須安裝MICROSOFT WINDOWS的某個版本。使用這壹類型妳需要犧牲JDBC的平臺獨立性。另外,ODBC驅動程序還需要具有客戶端的控制權限。

類型 2: JDBC-NATIVE DRIVER BRIDGE

JDBC本地驅動程序橋提供了壹種JDBC接口,它建立在本地數據庫驅動程序的頂層,而不需要使用ODBC。JDBC驅動程序將對數據庫的API從標準的JDBC調用轉換為本地調用。使用此類型需要犧牲JDBC的平臺獨立性,還要求在客戶端安裝壹些本地代碼。

類型 3: JDBC-NETWORK BRIDGE

JDBC網絡橋驅動程序不再需要客戶端數據庫驅動程序。它使用網絡上的中間服務器來存取數據庫。這種應用使得以下技術的實現有了可能,這些技術包括負載 均衡、連接緩沖池和數據緩存等。由於第3種類型往往只需要相對更少的下載時間,具有平臺獨立性,而且不需要在客戶端安裝並取得控制權,所以很適合於 INTERNET上的應用。

類型 4: PURE JAVA DRIVER

第4種類型通過使用壹個純JAVA數據庫驅動程序來執行數據庫的直接訪問。此類型實際上在客戶端實現了2層結構。要在N-層結構中應用,壹個更好的做法是編寫壹個EJB,讓它包含存取代碼並提供壹個對客戶端具有數據庫獨立性的服務。

WEBLOGIC服務器為壹些通常的數據庫提供了JDBC驅動程序,包括ORACLE,SYBASE,MICROSOFT SQLSERVER以及INFORMIX。它也帶有壹種JDBC驅動程序用於CLOUDSCAPE,這是壹種純JAVA的DBMS,WEBLOGIC服務器中帶有該數據庫的評估版本。

以下讓我們看壹個實例。

JDBC實例在這個例子中我們假定妳已經在CLOUDSCAPE中建立了壹個PHONEBOOK數據庫,並且包含壹個表,名為CONTACT_TABLE ,它帶有2個字段:NAME 和 PHONE。開始的時候先裝載CLOUDSCAPE JDBC DRIVER,並請求DRIVER MANAGER得到壹個對PHONEBOOK CLOUDSCAPE數據庫的連接。通過這壹連接,我們可以構造壹個STATEMENT 對象並用它來執行壹個簡單的SQL查詢。最後,用循環來遍歷結果集的所有數據,並用標準輸出將NAME和PHONE字段的內容進行輸出。 importjava.sql.*;publicclassjdbcexample{publicstaticvoidmain(stringargs[]){try{class.forname("com.cloudscape.core.jdbcdriver");connectionconn=drivermanager.getconnection("jdbc:cloudscape:phonebook");statementstmt=conn.createstatement();stringsql="selectname,phonefromcontact_tableorderbyname";resultsetresultset=stmt.executequery(sql);stringname;stringphone;while(resultset.next()){name=resultset.getstring(1).trim();phone=resultset.getstring(2).trim();system.out.println(name+","+phone);}}catch(exceptione){//handleexceptionheree.printstacktrace();}}}OK。接著我們來看壹看JDBC是如何在企業應用中的進行使用。JDBC在企業級應用中的應用以上實例其實是很基本的,可能有些微不足道。它假定了壹個2層結構。在壹個多層的企業級應用中,更大的可能是在客戶端和壹個EJB進行通信,該EJB將建立數據庫連接。為了實現和改進可伸縮性和系統性能,WEBLOGIC服務器提供了對連接緩沖池CONNECTION POOL的支持。CONNECTION POOL減少了建立和釋放數據庫連接的消耗。在系統啟動以後即可建立這樣的緩沖池,此後如故再有對數據庫的請求,WEBLOGIC服務器可以很簡單地從緩 沖池中取出數據。數據緩沖池可以在WEBLOGIC服務器的WEBLOGIC.PROPERTIES 文件中進行定義。(可參考 WEBLOGIC.PROPERTIES 文件中的例子,WEBLOGIC服務器的文檔中還有更詳細的參考信息)在企業級應用的另壹 個常見的數據庫特性是事務處理。事務是壹組申明STATEMENT,它們必須做為同壹個STATEMENT來處理以保證數據完整性。缺省情況下JDBC使 用 AUTO-COMMIT 事務模式。這可以通過使用CONNECTION類的 SETAUTOCOMMIT() 方法來實現。

現在我們已經對JDBC有了壹些認識,下面該轉向JNDI了。

JAVA NAMING AND DIRECTORY INTERFACE (JNDI)

JNDI API被用於執行名字和目錄服務。它提供了壹致的模型來存取和操作企業級的資源如DNS和LDAP,本地文件系統,後者在應用服務器中的對象。

在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"章節中做更多的介紹。

以上關於JNDI的討論只是冰山之壹角而已。如果要更進壹步地在CONTEXT中查找對象,JNDI也提供了壹些方法來進行以下操作:

將壹個對象插入或綁定到CONTEXT。這在妳展開壹個EJB的時候是很有效的。

從CONTEXT中移去對象。

列出CONTEXT中的所有對象。

創建或刪除子壹級的CONTEXT。

接下來,我們要開始關註EJB了。

ENTERPRISE JAVA BEANS (EJB)

J2EE技術之所以贏得某體廣泛重視的原因之壹就是EJB。它們提供了壹個框架來開發和實施分布式商務邏輯,由此很顯著地簡化了具有可伸縮性和高度復雜的企業級應用的開發。EJB規範定義了EJB組件在何時以及如何與它們的容器進行交互作用。容器負責提供公用的服務,例如目錄服務、事務管理、安全性、資源緩沖池以及容錯性。

EJB規範定義了3中基本的BEAN類型:

STATELESS SESSION BEANS: 提供某種單壹的服務,不維持任何狀態,在服務器故障發生時無法繼續存在,生命期相對較短。例如,壹個STATELESS SESSION BEAN可能被用於執行溫度轉換計算。

STATEFUL SESSION BEAN: 提供了與客戶端的會話交互,可以存儲狀態從而代表壹個客戶。典型例子是購物車。STATEFUL SESSION BEAN在服務器故障時無法繼續生存,生命期相對較短。每壹個實例只用於壹個單個的線程

ENTITY BEANS: 提供了壹致性數據的表示-- 通常存放在數據庫中 -- 在服務器故障發生後能繼續存在。多用戶情況下可以使用EJB來表示相同的數據。ENTITY EJB的壹個典型例子是客戶的帳號信息。

盡管有以上的區別,所有的EJB還是有許多的***同之處:

它們都處理HOME INTERFACE。它定義了壹個客戶端是如何創建與消亡EJB的。

可以在BEAN中對定義了客戶端方法的遠程接口進行調用;

BEAN類則執行了主要的商務邏輯描述

EJB的開發已經超出了本文的範圍。但是,如果壹個EJB已經被開發了或者從第三方進行了購買,它就必須在應用服務器中進行發布。WEBLOGIC SERVER 5.1帶有壹個EJB DEPLOYER TOOL來協助處理EJB的發布。當妳使用EJB DEPLOYER TOOL的時候,妳要定義客戶端所用的JNDI名字來定位EJB。DEPLOYER TOOL將生成WRAPPER類來處理和容器的通信以及在壹個JAR文件中把被請求的JAVA類綁定在壹起。壹旦EJB被發布,客戶端就可以使用它的JNDI名字來定位EJB。

首先,它必須得到壹個到HOME接口的REFERENCE。

然後,客戶端可以使用該接口,調用壹個 CREATE() 方法來得到服務器上運行的某個BEAN實例的句柄;

最後,客戶端可以使用該句柄在BEAN中調用方法。

了解 EJB後,讓我們再來看JSP。

JAVA SERVER PAGES (JSPS)

我們中間可能已經有許多人已經熟悉MICROSOFT的ACTIVE SERVER PAGES (ASP)技術了。JSP和ASP相對應的,但更具有平臺對立性。他們被設計用以幫助WEB內容開發人員創建動態網頁,並且只需要相對較少的代碼。即使WEB設計師不懂得如何編程也可以使用JSP,因為JSP應用是很方便的。JSP頁面由HTML(標準通用標記語言下的壹個應用)代碼和嵌入其中的JAVA代碼所組成。服務器在頁面被客戶端所請求以後對這些JAVA代碼進行處理,然後將生成的HTML頁面返回給客戶端的瀏覽器。

下面我們來看壹個JSP的簡單實例。它只顯示了服務器的當前日期和時間。雖然,對語法的具體解釋已經超出了本文的範圍,但我們還是可以很直觀地看到,JAVA代碼被放在<%和%>;的中間,而JAVA的表達式則放在<%=和%>;之間。 <html><head><title>SampleJSPPage</title></head><body><h1>DateJSPsample</h1><%response.setHeader("Refresh",5);%>Thecurrentdateis<%=newDate()%>.</body></html>您可能有時候聽說過JHTML。這是JSP以前的壹種較老的標準。WEBLOGIC服務器既可支持JSP,又可支持JHTML。

請註意,在缺省狀況下,JSP在WEBLOGIC服務器中並沒有處於有效狀態。要使之有效,妳可以編輯WEBLOGIC.PROPERTIES文件。如果WEB服務器還沒有處於有效狀態,則要先使之有效。SERVLET的情況和JSP是壹樣的。

下面是:JAVA SERVLETS

JAVA SERVLETS

SERVLET提供的功能大多與JSP類似,不過實現的方式不同。JSP通常是大多數HTML代碼中嵌入少量的JAVA代碼,而SERVLETS全部由JAVA寫成並且生成HTML。

SERVLET是壹種小型的JAVA程序,它擴展了WEB服務器的功能。作為壹種服務器端的應用,當被請求時開始執行,這和CGI PERL腳本很相似。SERVLETS和CGI腳本的壹個很大的區別是:每壹個CGI在開始的時候都要求開始壹個新的進程 -- 而SERVLETS是在SERVLET引擎中以分離的線程來運行的。因此SERVLETS在可伸縮性上提供了很好的改進。在開發SERVLETS的時候,您常常需要擴展JAVA X.SERVLET.HTTP.HTTPSERVLET 類,並且OVERRIDE壹些它的方法,其中包括:

SERVICE(): 作為DISPATCHER來實現命令-定義方法

DOGET(): 處理客戶端的HTTP GET請求。

DOPOST(): 進行HTTP POST操作

其它的方法還包括處理不同類型的HTTP請求-- 可以參考HTTPSERVLET API文檔。

以上描述的是標準J2EE SERVLET API的各種方法。WEBLOGIC服務器提供了壹個該API完整的實現途徑。壹旦妳開發了壹個SERVLET,妳就可以在 WEBLOGIC.PROPERTIES 中加以註冊並由此可以在WEBLOGIC服務器中對它進行配置。通過JAVA SERVLETS,我們已經到達了J2EE主要技術的末尾了。但J2EE所提供的並不止於這些。

下面的段落中我們將簡要地看壹下現存的壹些技術,包括RMI,JAVA IDL和CORBA,JTA,以及XML(標準通用標記語言的子集),等等。

REMOTE METHOD INVOCATION (RMI)

正如其名字所表示的那樣,RMI協議是在遠程對象上調用壹些方法。它使用了連續序列方式在客戶端和服務器端傳遞數據。RMI是壹種被EJB使用的更下層的協議。

JAVA IDL/CORBA

在JAVA IDL的支持下,開發人員可以將JAVA和CORBA集成在壹起。他們可以創建JAVA對象並使之可在CORBA ORB中展開,或者他們還可以創建JAVA類並作為和其它ORB壹起展開的CORBA對象的客戶。後壹種方法提供了另外壹種途徑,通過它JAVA可以被用於將妳的新的應 用和LEGACY系統相集成。

JAVA TRANSACTION ARCHITECTURE (JTA)/JAVA TRANSACTION SERVICE (JTS)

JTA定義了壹種標準的API,應用系統由此可以存取各種事務監控。

JTS是CORBA OTS事務監控的基本實現。JTS規定了事務管理器的實現方式。該事務管理器是在高層支持JAVA TRANSACTION API (JTA)規範,並且在較底層實現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的字節流可以被轉換成JAVA對象,或者轉換自JAVA對象。由此大多數應用都可以不需要直接使用JAF。

JAVA MESSAGING SERVICE (JMS)

JMS是用於和面向消息的中間件相互通信的應用程序接口(API)。它既支持點對點的域,又支持發布/訂閱(PUBLISH/SUBSCRIBE)類型的域,並且提供對下列類型的支持:經認可的消息傳遞、事務型消息的傳遞、壹致性消息和具有持久性的訂閱者支持。JMS還提供了另壹種方式來對您的應用與LEGACY BACKEND系統相集成。

XML(標準通用標記語言的子集)

XML是壹種可以用來定義其它標記語言的語言。它被用來在不同的商務過程中***享數據。XML的發展和JAVA是相互獨立的,但是,它和JAVA具有的相同目標正是平臺獨立性。通過將JAVA和XML的組合,您可以得到壹個完美的具有平臺獨立性的解決方案。目前正有許多不同的公司在為JAVA和XML的組合而努力。如果要了解更多的這方面的信息,可以訪問SUN的JAVA-XML頁面,或者IBM DEVELOPERWORKS的XML ZONE。

總結

在本文中,我們介紹了建立在J2EE上的分布式應用結構,並且描述了WEBLOGIC服務器對J2EE的各種支持。然而,我們所揭示的僅僅是冰山之壹角而已,要以壹篇數千字的文章來展示J2EE潛在的對您的企業級應用的影響可是很不公平的。

我們已經關註了在您開始用J2EE進行工作時最有可能遇到的各類技術:JDBC,JNDI,EJB,JSP和SERVLET。我們也為您提供了壹些尚未常見的J2EE技術的背景知識。不管您是壹名開發人員,商務應用分析師,或者項目經理,都應該對J2EE和WEBLOGIC服務器所能提供給我們,給我們的企業以及我們的企業級應用所帶來的意義有壹個更好的認識。

J2EE 帶動了Java在企業級的發展,但隨著壹些輕量級組件的出現,J2EE的臃腫和開發難度高的缺點越來越引起了許多人的註意,EJB2.0也被許多人稱為累贅。隨著Spring,Hibernate的不斷完善和發展,EJB3.0出現了,成為了未來Java 企業級開發的新的方向。

使用元數據,註釋代替傳統的配置文件成為了新的熱點。JPA更是代替了傳統的CMP作為了更加便捷的持久化的方案。

  • 上一篇:有沒有那些讓妳舍不得卸載的軟件?
  • 下一篇:2012蘇教版小學五年級數學上冊期末考試試題及答案
  • copyright 2024編程學習大全網