J2EE簡(jiǎn)介
1. J2EE (Java 2 Enterprise Edition)架構(gòu) |
近年來(lái),J2EE平臺(tái)在企業(yè)內(nèi)資訊應(yīng)用系統(tǒng)的應(yīng)用上,佔(zhàn)有越來(lái)越重要的地位,今天的內(nèi)容,將先就J2EE的概念提供說(shuō)明,而實(shí)作上的範(fàn)例,我們將在後續(xù)的主題陸續(xù)提出討論。
J2EE平臺(tái)提供了能支援多層(Multi-Tier)企業(yè)應(yīng)用程式的技術(shù)規(guī)格,這些技術(shù)主要分為三部份,分別是元件(Component),服務(wù)(Service)及通訊(Communication)。
元件技術(shù)讓程式開發(fā)者能夠遵循標(biāo)準(zhǔn)方式建立可重用的元件,相同的企業(yè)邏輯可因此運(yùn)用在不同的應(yīng)用程式內(nèi)。在這些元件中,可以透過(guò)標(biāo)準(zhǔn)化的API使用執(zhí)行環(huán)境提供的服務(wù)以及準(zhǔn)備好的資源,比如資料庫(kù)、名稱及目錄服務(wù)(Naming and Directory)、訊息服務(wù)(Messaging Service),並可使用交易(Transaction)管理等,這樣一來(lái),也簡(jiǎn)化了程式開發(fā)的複雜性。在多層架構(gòu)下,各層間的通訊在J2EE中也提供解決方法。以下將針對(duì)元件及常見服務(wù),提供介紹。
J2EE 的大略架構(gòu)如下圖:
![]() |
2. EJB |
EJB(Enterprise JavaBeans)可看成是一組API的定義,它定義了的EJB開發(fā)及部署(Deploy)的方法以及架構(gòu)。EJB具有架構(gòu)上的延展性、可定義對(duì)交易的反應(yīng),而且能設(shè)定對(duì)不同使用者的存取控制。由於EJB Container提供了Networking, Transaction, Security及Bean Instance Pooling等Logic,因此EJB在EJB Container內(nèi)執(zhí)行,可以不須煩惱網(wǎng)路等問(wèn)題,且可使用EJB Container已經(jīng)準(zhǔn)備好的服務(wù)。EJB分為三種,分述如下。
2.1. Session Bean
Session Bean通常在一個(gè)Client與EJB的一個(gè)Session期間存在,但是真實(shí)物件的生命週期是由EJB Container控制。一般的應(yīng)用是將商業(yè)邏輯拆解成一個(gè)一個(gè)方法(Method),再將這些方法在Session Bean中實(shí)作,讓EJB Client呼叫使用。Session Bean又分為Stateful及Stateless,而Stateless Session Bean能支援同時(shí)多人使用,除非一定要儲(chǔ)存狀態(tài)於Session Bean內(nèi),否則建議使用Stateless Session Bean。
2.2. Entity Bean
Entity Bean是表達(dá)資料儲(chǔ)存內(nèi)容的EJB,雖然Entity Bean目前Persistence作法以將資料存放在Database為主,但不表示僅能使用關(guān)聯(lián)式資料庫(kù)儲(chǔ)存。就實(shí)務(wù)上來(lái)看,在資料查詢所須的SQL Statement較複雜的情況下,則不建議使用Entity Bean,此時(shí)直接使用JDBC存取資料庫(kù)會(huì)是比較方便的作法。
2.3. MDB(Message-driven Bean)
MDB顧名思義是由Message驅(qū)動(dòng)的EJB,提供J2EE平臺(tái)對(duì)非同步訊息(Asynchronized Messages)的處理能力。目前MDB僅能處理透過(guò)JMS(Java Message Service)傳遞的Message,其運(yùn)作原理是實(shí)作一個(gè)onMessage方法,這樣當(dāng)JMS內(nèi)有Message要交由MDB處理時(shí),會(huì)由EJB Container從Pool中選一個(gè)MDB出來(lái),接著呼叫它的onMessage方法。
3. J2EE平臺(tái)提供之服務(wù)及API |
接下來(lái)介紹一些常用的J2EE的API,這些服務(wù)執(zhí)行在J2EE Server內(nèi),可在Web Container及EJB Containaer內(nèi)使用。
3.1. JDBC
JDBC (Java DataBase Connectivity)主要提供連結(jié)至Data Source的方式,Data Source不只是Database,還包括檔案。
JDBC Driver 主要的工作有三項(xiàng):
a. 建立和Data Source之間的Connection。
b. 送出相關(guān)的SQL Statement。
c. 將結(jié)果傳回。
JDBC除了可以送出一般的SQL Statement之外,也可以呼叫寫好在Database裡的Stored Procedure。
由於各種Database的連結(jié)方式可能都不同,使用JDBC的好處是,不須要自己去寫存取 Database的相關(guān)程式,只要使用DBC的API,搭配相關(guān)的Driver,就可以讓程式存取各種不同的Database了。
目前最新版的JDBC 規(guī)格是 4.0,但是,在使用JDBC的相關(guān)功能之前,要先確認(rèn)所使用的JDBC Driver支援到哪一個(gè)版本。
JDBC最新的一個(gè)Implement叫做RowSet Implementation Specification,是就JDBC原本提供的RowSet再做更進(jìn)一步的強(qiáng)化。這個(gè)部份將會(huì)被納入J2SDK1.5中。
3.2. Servlet
Servlet是用來(lái)處理Request和Response的一些Class,主要是處理HTTP Protocol。它的Package主要有javax.servlet和javax.servlet.http。
在最新的Servlet 2.3 規(guī)格裡,新增了一個(gè)叫做「Filter」的功能,F(xiàn)ilter的作用是在Request送出之後、以及Response接到之前,再做一個(gè)判斷篩選的動(dòng)作。這個(gè)Filter最常用在Reuse原本的程式的時(shí)候,為了確保原本的程式結(jié)構(gòu)不被修改,但又須要加上一些新的設(shè)定時(shí),就可以使用Filter去做處理,F(xiàn)ilter所做的事情也都可以被Log下來(lái)。
3.3. JSP
JSP的全名是JavaServer Pages,算是Servlet技術(shù)的延伸,可以使用HTML或是XML。JSP提供了一個(gè)Create Web Content的簡(jiǎn)便方式,在搭配JSTL(JavaServer Pages Standard Tag Library)使用的時(shí)候,由於JSTL提供了一些很簡(jiǎn)便的Tag,所以在程式的撰寫和維護(hù)上都會(huì)容易許多。目前JSP 規(guī)格的最新版本是2.0。
早期在還沒有JSP的時(shí)候,程式和畫面的呈現(xiàn)都會(huì)放在Servlet裡,造成維護(hù)非常困難,在有JSP之後,可以將程式碼以及畫面切開,在維護(hù)上會(huì)比全部的東西都放在Servlet裡要方便得多。
3.4. JMS
JMS, Java Message Service, 提供了J2EE Components進(jìn)行相關(guān)的Message的功能。一個(gè)JMS的應(yīng)用程式可以分為以下幾個(gè)部份:
a. JMS Clients:是使用JMS API所開發(fā)的用來(lái)傳送/接收Message的應(yīng)用程式。
b. Non-JMS Clients:這些應(yīng)用程式並沒有使用JMS的API,而是使用Message System所提供的API。
c. Messages:定義好的一些用在Clients之間溝通的訊息。
d. JMS Provider:Message System所定義好的,使用JMS來(lái)開發(fā)的一些功能。
e. Administered Objects:提供給系統(tǒng)管理者方便使用的預(yù)先定義好的JMS Objects。
3.5. JNDI
JNDI, Java Naming and Directory Interface,主要是提供Naming和Directory的相關(guān)功能,使得應(yīng)用程式可以更具可攜性(Portable)。應(yīng)用程式中若使用JNDI相關(guān)的API來(lái)開發(fā),只要在設(shè)定的時(shí)候指定JNDI的名稱,就可以存取不同的Directory裡的屬性(Attribute)。JNDI的相關(guān)Package有:javax.naming、javax.naming.directory、javax.naming.event、javax.naming.ldap、和javax.naming.spi。
3.6. Transactions
J2EE提供了兩組Transactions相關(guān)的規(guī)格,分別是JTA(Java Transaction API)和JTS(Java Transaction Services)。
JTA提供了控制Transaction的相關(guān)API,程式是去呼叫JTA的API,再由JTA來(lái)交給JTS做控制。所提供的Package有javax.transaction和javax.transaction.xa。目前不Support NestedTransactions。在EJB裡,建議使用Bean-managed Transaction,也就是Session Bean或是Message-driven Bean,且在使用的時(shí)候,必須先定義目前要用的是JDBC的Transaction或者是JTA的Transaction。
3.7. Web Services
在J2EE的架構(gòu)中,提供了許多有關(guān)Web services的API,這些API都是以XML的語(yǔ)法來(lái)定義。
Web Services 相關(guān)的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)等。
簡(jiǎn)單介紹一下這幾個(gè)API:
a. JAXP:這組API被定義在javax.xml.parser這個(gè)Package裡,這個(gè)Package提供了SAX和DOM相關(guān)的Parser功能。
b. JAXR:主要是提供存取不同的XML Registry的功能。XML Registry目前最有名的是ebXML和UDDI。
c. SAAJ:主要是依循 SOAP這個(gè)標(biāo)準(zhǔn),提供了Message和Connection的相關(guān)功能。
posted on 2008-12-04 11:29 paulwong 閱讀(718) 評(píng)論(0) 編輯 收藏 所屬分類: J2EE