J2EE簡介

J2EE簡介

1. J2EE (Java 2 Enterprise Edition)架構

近年來,J2EE平台在企業內資訊應用系統的應用上,佔有越來越重要的地位,今天的內容,將先就J2EE的概念提供說明,而實作上的範例,我們將在後續的主題陸續提出討論。
J2EE平台提供了能支援多層(Multi-Tier)企業應用程式的技術規格,這些技術主要分為三部份,分別是元件(Component),服務(Service)及通訊(Communication)。
元件技術讓程式開發者能夠遵循標準方式建立可重用的元件,相同的企業邏輯可因此運用在不同的應用程式內。在這些元件中,可以透過標準化的API使用執行環境提供的服務以及準備好的資源,比如資料庫、名稱及目錄服務(Naming and Directory)、訊息服務(Messaging Service),並可使用交易(Transaction)管理等,這樣一來,也簡化了程式開發的複雜性。在多層架構下,各層間的通訊在J2EE中也提供解決方法。以下將針對元件及常見服務,提供介紹。


J2EE 的大略架構如下圖:

Client端如為Web Browser,則須穿過Web Container,透過JSP及Servlet呼叫EJB的方法(Method),以存取後端資料。如Client為使用Swing撰寫之Application,則不須經過Web Container,而是直接呼叫EJB提供的方法。


2. EJB

EJB(Enterprise JavaBeans)可看成是一組API的定義,它定義了的EJB開發及部署(Deploy)的方法以及架構。EJB具有架構上的延展性、可定義對交易的反應,而且能設定對不同使用者的存取控制。由於EJB Container提供了Networking, Transaction, Security及Bean Instance Pooling等Logic,因此EJB在EJB Container內執行,可以不須煩惱網路等問題,且可使用EJB Container已經準備好的服務。EJB分為三種,分述如下。

2.1. Session Bean
Session Bean通常在一個Client與EJB的一個Session期間存在,但是真實物件的生命週期是由EJB Container控制。一般的應用是將商業邏輯拆解成一個一個方法(Method),再將這些方法在Session Bean中實作,讓EJB Client呼叫使用。Session Bean又分為Stateful及Stateless,而Stateless Session Bean能支援同時多人使用,除非一定要儲存狀態於Session Bean內,否則建議使用Stateless Session Bean。

2.2. Entity Bean
Entity Bean是表達資料儲存內容的EJB,雖然Entity Bean目前Persistence作法以將資料存放在Database為主,但不表示僅能使用關聯式資料庫儲存。就實務上來看,在資料查詢所須的SQL Statement較複雜的情況下,則不建議使用Entity Bean,此時直接使用JDBC存取資料庫會是比較方便的作法。

2.3. MDB(Message-driven Bean)
MDB顧名思義是由Message驅動的EJB,提供J2EE平台對非同步訊息(Asynchronized Messages)的處理能力。目前MDB僅能處理透過JMS(Java Message Service)傳遞的Message,其運作原理是實作一個onMessage方法,這樣當JMS內有Message要交由MDB處理時,會由EJB Container從Pool中選一個MDB出來,接著呼叫它的onMessage方法。

3. J2EE平台提供之服務及API

接下來介紹一些常用的J2EE的API,這些服務執行在J2EE Server內,可在Web Container及EJB Containaer內使用。

3.1. JDBC

JDBC (Java DataBase Connectivity)主要提供連結至Data Source的方式,Data Source不只是Database,還包括檔案。

JDBC Driver 主要的工作有三項:
a. 建立和Data Source之間的Connection。
b. 送出相關的SQL Statement。
c. 將結果傳回。

JDBC除了可以送出一般的SQL Statement之外,也可以呼叫寫好在Database裡的Stored Procedure。

由於各種Database的連結方式可能都不同,使用JDBC的好處是,不須要自己去寫存取 Database的相關程式,只要使用DBC的API,搭配相關的Driver,就可以讓程式存取各種不同的Database了。
目前最新版的JDBC 規格是 4.0,但是,在使用JDBC的相關功能之前,要先確認所使用的JDBC Driver支援到哪一個版本。

JDBC最新的一個Implement叫做RowSet Implementation Specification,是就JDBC原本提供的RowSet再做更進一步的強化。這個部份將會被納入J2SDK1.5中。


3.2. Servlet
Servlet是用來處理Request和Response的一些Class,主要是處理HTTP Protocol。它的Package主要有javax.servlet和javax.servlet.http。

在最新的Servlet 2.3 規格裡,新增了一個叫做「Filter」的功能,Filter的作用是在Request送出之後、以及Response接到之前,再做一個判斷篩選的動作。這個Filter最常用在Reuse原本的程式的時候,為了確保原本的程式結構不被修改,但又須要加上一些新的設定時,就可以使用Filter去做處理,Filter所做的事情也都可以被Log下來。


3.3. JSP
JSP的全名是JavaServer Pages,算是Servlet技術的延伸,可以使用HTML或是XML。JSP提供了一個Create Web Content的簡便方式,在搭配JSTL(JavaServer Pages Standard Tag Library)使用的時候,由於JSTL提供了一些很簡便的Tag,所以在程式的撰寫和維護上都會容易許多。目前JSP 規格的最新版本是2.0。

早期在還沒有JSP的時候,程式和畫面的呈現都會放在Servlet裡,造成維護非常困難,在有JSP之後,可以將程式碼以及畫面切開,在維護上會比全部的東西都放在Servlet裡要方便得多。

3.4. JMS
JMS, Java Message Service, 提供了J2EE Components進行相關的Message的功能。一個JMS的應用程式可以分為以下幾個部份:
a. JMS Clients:是使用JMS API所開發的用來傳送/接收Message的應用程式。
b. Non-JMS Clients:這些應用程式並沒有使用JMS的API,而是使用Message System所提供的API。
c. Messages:定義好的一些用在Clients之間溝通的訊息。
d. JMS Provider:Message System所定義好的,使用JMS來開發的一些功能。
e. Administered Objects:提供給系統管理者方便使用的預先定義好的JMS Objects。


3.5. JNDI
JNDI, Java Naming and Directory Interface,主要是提供Naming和Directory的相關功能,使得應用程式可以更具可攜性(Portable)。應用程式中若使用JNDI相關的API來開發,只要在設定的時候指定JNDI的名稱,就可以存取不同的Directory裡的屬性(Attribute)。JNDI的相關Package有:javax.naming、javax.naming.directory、javax.naming.event、javax.naming.ldap、和javax.naming.spi。

3.6. Transactions
J2EE提供了兩組Transactions相關的規格,分別是JTA(Java Transaction API)和JTS(Java Transaction Services)。

JTA提供了控制Transaction的相關API,程式是去呼叫JTA的API,再由JTA來交給JTS做控制。所提供的Package有javax.transaction和javax.transaction.xa。目前不Support NestedTransactions。在EJB裡,建議使用Bean-managed Transaction,也就是Session Bean或是Message-driven Bean,且在使用的時候,必須先定義目前要用的是JDBC的Transaction或者是JTA的Transaction。

3.7. Web Services
在J2EE的架構中,提供了許多有關Web services的API,這些API都是以XML的語法來定義。
Web Services 相關的API有 JAXP(Java API for XML Processing)、JAXR(Java API for XML Registries)、JAX-RPC(Java API for XML-based RPC)和SAAJ(SOAP with Attachments API for Java)等。
簡單介紹一下這幾個API:
a. JAXP:這組API被定義在javax.xml.parser這個Package裡,這個Package提供了SAX和DOM相關的Parser功能。
b. JAXR:主要是提供存取不同的XML Registry的功能。XML Registry目前最有名的是ebXML和UDDI。
c. SAAJ:主要是依循 SOAP這個標準,提供了Message和Connection的相關功能。

你可能感兴趣的:(J2EE簡介)