簡介
在今日瞬息萬變、充斥著複雜的分散式應用程式的電子商業領域中,企業應用程式能否快速上市,事關重大。這表示專案小組沒有太多時間可開發系統層次的服務,例如遠端連線功能、命名、持續性、安全性或交易管理。專案小組必須開發和利用可攜性、可重複使用的元件;您一定不希望浪費時間去重複發明已證實可行的架構。
Java™ 2 Platform 企業版 (J2EE™) 滿足這項需求,提供一套明確、標準的架構,可用來開發和執行分散式、多層、元件式 Java
應用程式。這套架構解決應用程式底層的許多複雜性,例如遠端連線功能、命名、持續性、安全性及交易管理,讓開發人員可以專心處理應用程式的商業邏輯。
J2EE 平台包含:
-
J2EE 元件的一套標準及執行元件的 J2EE 平台。
-
應用程式開發藍圖,詳細描述 J2EE 平台,對如何開發 J2EE 應用程式提供業界公認的最佳做法。
-
J2EE 平台的參考實作,由 Sun Microsystems Inc. 提供,以此為標準來衡量商業性 J2EE 產品。參考實作包含完整開發的範例應用程式。
-
相容性測試套組,依據 J2EE 標準來測試和評估商業性 J2EE 實作成果。
J2EE 平台類似電腦的作業系統所提供的服務,作業系統利用程式語言提供標準的服務,方便您開發和執行應用程式,不必擔心底層的磁碟存取、記憶體、視訊輸出、網路運作等管理。您只需要注意應用程式的細節,不必顧慮底層系統的細節。J2EE
平台為企業應用程式提供一套精密的作業系統。
運用 J2EE
平台可以簡化您的開發工作,讓專案小組將全部精力貫注在應用程式的實際商業邏輯上,不必將寶貴的開發時間浪費在解決系統層次的問題上。只要專案小組可以專注於研究應用程式做什麼,不去研鑽如何交付應用程式所需的全部底層的服務,就很有可能交出及時、正確無誤的系統,符合使用者的需求。
如需相關資訊,請參閱 Sun 的 J2EE 平台概觀,網址是 http://java.sun.com/。請循著鏈結瀏覽至
Products & APIs > Java™ 2 Platform, Enterprise Edition (J2EE™) > Overview。
J2EE 開發概述
應用程式開發者的觀點:
-
以 J2EE 相容伺服器的形式購買商務版 J2EE 平台。J2EE 伺服器的性能由 J2EE 標準指定。
-
開發或購買現成的 J2EE 元件。
-
在 J2EE 相容伺服器上部署和執行 J2EE 元件,伺服器上提供 J2EE 元件所需的全部服務。
電子商務站台是一種簡單的 J2EE 應用程式例子,用戶端(使用者)利用 Web 瀏覽器從遠端存取 J2EE 伺服器。J2EE 伺服器提供 Web 層和商業層服務,並與提供 RDBMS 存取機制的企業資訊系統(後端)層互動。
為何使用 J2EE?
在下列情況下,則適合以 J2EE 平台來開發 Java 電子商務或企業應用程式:
本節其餘內容詳細討論上述每一個目的。
標準化、經過業界試驗
J2EE 元件在 J2EE 儲存區執行,通常以 J2EE 相容伺服器的一部分來提供。這些儲存區提供一組給 J2EE
元件使用的標準服務 (API)。API 包括:
-
J2SE 1.4
-
JDBC
-
Java IDL
-
遠端方法呼叫與 CORBA 的網際網路 ORB 交換通訊協定 (RMI-IIOP)
-
Java 命名和目錄介面 (JNDI)
-
Java 鑑別和授權服務 (JAAS)
-
Java 交易 API (JTA)
-
JavaMail
-
Java 訊息服務 (JMS)。
如需 JMS 的相關資訊,請參閱概念:Java 傳訊服務 (JMS)。
-
JavaBeans Activation Framework (JAF)
-
Enterprise JavaBeans (EJB)
-
Java Servlet
-
Java API for XML Processing (JAXP)
-
Java Connector(附註:J2EE 1.3 以前不支援)
-
JavaServer Pages (JSP)
-
Web Services for J2EE(附註:J2EE 1.4 以前不支援)
-
Java API for XML-based RPC (JAX-RPC)(附註:J2EE 1.4 以前不支援)
-
SOAP with attachments API for Java (SAAJ)(附註:J2EE 1.4 以前不支援)
-
Java API for XML Registries (JAXR)(附註:J2EE 1.4 以前不支援)
-
J2EE Management(附註:J2EE 1.4 以前不支援)
-
Java Management Extensions (JMX)(附註:J2EE 1.4 以前不支援)
-
J2EE Deployment(附註:J2EE 1.4 以前不支援)
-
Java Authorization Service Provider Contract for Containers (JACC)(附註:J2EE 1.4 以前不支援)
J2EE 元件和應用程式可移植於不同的 J2EE 相容伺服器,不必修改程式碼,所以,只要在「延伸標記語言 (XML)」部署描述子檔案中更新伺服器特有的部署資訊,即可輕易將應用程式部署到您選擇的 J2EE 相容伺服器。
J2EE 規格的標準化已掀起業界競爭的戰火 - 您可以根據需求和預算來選擇 J2EE 相容伺服器。
可重複使用的元件
由於符合 J2EE 標準,必要時可以購買現成的 J2EE 元件來插入 J2EE 應用程式中,節省開發成本(尤其是除錯和測試)。
如果自行開發元件,您可以根據需要在別的應用程式中重複使用此元件,或部署到不同的 J2EE 相容伺服器。
證實可行的架構和設計型樣
J2EE 平台定義一套完整建構、多層的應用程式架構。借助 J2EE 架構,開發人員可以迅速著手開發應用程式的實際商業邏輯。
J2EE 文件包含:
-
應用程式開發藍圖,詳細描述 J2EE 平台,對如何開發 J2EE 應用程式提供最佳做法。
-
明確的 J2EE 型樣 - 業界最佳作法 - 描述 J2EE 架構和設計常見問題的解決方案。
如需 J2EE 平台的相關資訊,請造訪 http://java.sun.com/。請循著鏈結瀏覽至 J2EE >
Blueprints。
延展性
J2EE 有幾種方法可支援延展性來提高效能或因應增加的負載:
-
J2EE 儲存區的效能強化功能 - 這些功能包括資源儲存區作業(資料庫連線儲存區作業、階段作業 Bean 實例儲存區作業及執行緒儲存區作業)、
非同步訊息傳遞及有效率的元件生命週期管理。例如,資料庫連線的開啟速度很慢。而且,由於版權限制,資料庫連線可算是稀有資源。J2EE 平台以資料庫連線儲存區作業來解決這項問題;J2EE 儲存區會保留一堆開啟的連線,再根據需要來分配給元件,形成快速又有效率的連線。
-
以叢集達到負載平衡 - 將相同的元件部署到不同機器上的多個伺服器。每一個伺服器的負載可以根據需要來取得平衡;例如,根據循環式演算法或伺服器負載。在 J2EE 伺服器中,J2EE
平台規格不需要負載平衡功能,但高階伺服器最好有此能力。J2EE 伺服器供應商提供各種不同的負載平衡解決方案。
-
應用程式分割 - 應用程式在邏輯上不同的部分可部署到不同的伺服器;例如,將線上郵件訂購應用程式的庫存和會計子系統分別部署到不同的伺服器。
開發和部署工具
供應商已察覺到 J2EE 工具的需求,於是在 Java 整合開發環境 (IDE) 中對 Java 開發提供非常好的支援,包括:
-
Servlet 建立精靈
-
EJB 建立和維護精靈與對話框
-
部署描述子產生與維護
-
EJB 物件至資料庫的對映(包括產生儲存區管理關係的部署描述子資訊)
-
整合 Web 儲存區來測試 Web 服務
-
整合 J2EE EJB 儲存區及其部署工具,在 IDE 內順暢地部署、除錯及測試 EJB
-
自動產生 J2EE 測試用戶端
-
整合 UML 建模工具
後端整合
後端是指應用程式的企業資訊系統 (EIS) 層。例如,RDBMS、舊版系統或企業資源規劃系統 (ERP),即可能為後端系統。
J2EE 支援以 JDBC 和 JTA API 對 RDBMS EIS 執行交易式存取。此外,EJB 儲存區還支援儲存區管理的持續性,交易式 RDBMS 連線和存取由儲存區自動管理。
J2EE 的 Connector Architecture Service Provider Interface (SPI) 定義非 RDBMS EIS 資源至 J2EE 儲存區的連線標準。EIS 特定資源配接器(由 EIS
供應商提供)插入 J2EE 儲存區中來延伸儲存區,為此 EIS 提供交易式、安全的支援。然後,儲存區裡的元件就可以透過 J2EE Connector Architecture SPI 來存取 EIS。
附註:J2EE 1.3 以前不支援 J2EE 的 Connector Architecture SPI。
安全
J2EE 提供簡單、強大的安全功能。J2EE 元件的安全資訊定義在部署描述子中。這項資訊定義哪些安全角色有權存取元件的特定 URL
及/或方法。安全角色只是一群使用者的邏輯名稱;例如,組織的管理團隊成員可能被指派為「經理」這個角色。
由於安全資訊是在部署描述子中宣告,所以變更安全行為不需要浪費時間經過一次程式碼更新、除錯、測試週期。
多層架構
J2EE 是多層分散式應用程式架構 - 包含用戶端層、中間層及 EIS 或後端層。
圖 1 顯示 J2EE 平台的多層架構,以及支援 J2EE 元件的各種 J2EE 儲存區。
圖 1:J2EE 多層架構
用戶端層
用戶端層元件在用戶端儲存區中執行。用戶端層有下列實作方式:
-
獨立式 Java 應用程式 - 通常有 GUI(又稱為「重型用戶端」)。這種 Java 應用程式必須安裝在每一台用戶端機器上。Java 應用程式可以透過
JDBC 等 API 來存取 EIS 層或中間層。
-
靜態 HTML 網頁 - 為應用程式提供簡單 GUI。
-
動態 HTML - 由 JSP 網頁或 Servlet 產生。
-
Applet - 在 Web 瀏覽器中執行。Applet 內含在 HTML 網頁中,通常用來提供 GUI。
中間層
中間層由 Web 層和商業層組成。Web 層元件在提供 Web 儲存區的
J2EE Web 伺服器中執行。商業層元件在提供 EJB 儲存區的 J2EE 應用程式伺服器中執行。
Web 層
Web 層元件包含 Servlet 和 JSP 網頁,負責管理與用戶端層之間的互動,可以隔離用戶端與商業和 EIS
層。用戶端對 Web 層提出要求,Web 層會處理要求並將結果傳回給用戶端。用戶端對 Web 層的元件提出要求,通常會造成 Web 層對商業層的元件提出要求,可能再轉而對 EIS 層提出要求。
商業層
商業層元件是 EJB。
-
內含應用程式商業邏輯。
-
根據商業邏輯對 EIS 層提出要求,通常是為了回應來自 Web 層的要求。
EIS 層
EIS 層代表應用程式儲存的資料,通常是 RDBMS 形式。EIS 層也可能包含舊版系統或 ERP,須透過 J2EE Connector Architecture API 存取。
如需 J2EE Connector Architecture API 的相關資訊,請造訪 http://java.sun.com/。請循著鏈結瀏覽至 Products & Technologies > J2EE > J2EE Connector
Architecture。
如需 J2EE 標準部署配置的相關資訊,請參閱概念:J2EE 部署配置。
J2EE 伺服器
J2EE 伺服器是實作 J2EE 平台的商業性產品。例如 BEA WebLogic、Borland Enterprise Server、IBM WebSphere 及 iPlanet,即為商業性 J2EE 伺服器。
使用「J2EE 伺服器」這個術語有點兒不夠嚴謹。通常是指「同時支援 Web 儲存區與 EJB 儲存區的 J2EE 伺服器」。以更嚴謹的定義而言,J2EE Web 伺服器(例如 J2EE 參照 Web 伺服器實作 Tomcat)支援 Web
儲存區;J2EE 應用程式(或 EJB)伺服器支援 EJB 儲存區。
J2EE 儲存區
J2EE 元件在 J2EE 儲存區中執行或受管理,此儲存區通常是商業性 J2EE 伺服器的一部分。除了支援標準的 J2SE API,儲存區也提供執行環境和一組標準的服務 (API),供儲存區內執行的 J2EE 元件使用。
J2EE 定義下列儲存區類型:
應用程式用戶端儲存區
J2EE 應用程式用戶端在應用程式用戶端儲存區中執行,此儲存區支援這些 J2EE
API:JDBC、JMS、JAXP、JAAS、JavaMail、JAF、JSR、JAX-RPC、SAAJ、J2EE Management 及 JMX。
實際上,應用程式用戶端儲存區由標準的 J2SE 安裝組成。應用程式用戶端儲存區必須支援 JAAS 回呼處理常式介面,以滿足 Web 和 EJB 儲存區中其餘企業應用程式的安全限制。
Applet 儲存區
Applet 在 Applet 儲存區中執行,此儲存區支援 Applet 程式設計模型和標準的 J2SE API。實際上,Applet 儲存區以 Web 瀏覽器的 Java 外掛程式來提供。
Web 儲存區
Web 元件(JSP 網頁和 Servlet)在
J2EE 伺服器或獨立式 J2EE Web 伺服器所包含的 Web 儲存區中執行。Web 儲存區支援下列 J2EE API 和套件:JDBC、JMS、JAXP、JAX-RPC、 JAXR、JAAS、Java Mail、JAF、J2EE
Connector Architecture、JTA、JSR、SAAJ、J2EE Management、Java Servlet 及 JSP。
EJB 儲存區
EJB 元件在 EJB 儲存區中執行,此儲存區是 J2EE 伺服器的一部分。
EJB 儲存區支援下列 J2EE API 和技術:EJB、JDBC、JMS、JAXP、JAX-RPC、JAXR、JAAS、Java Mail、JAF、JTA、JSR、SAAJ、J2EE Management 及 J2EE
Connector Architecture。
下列小節總結 EJB 儲存區支援的主要功能:
遠端通訊
EJB 儲存區利用本身實作 EJB 介面的類別(在編輯 EJB 時由儲存區工具產生,以及供用戶端使用的 RMI Stub 類別),讓開發人員不會感覺到遠端通訊的複雜性。這些實作類別是可供用戶端以 Java RMI 來存取的遠端 Java
物件。從用戶端的觀點來看,用戶端只是呼叫 EJB 介面上的方法,完全不必顧慮遠端通訊。
並行性
EJB 儲存區暗中地管理多個用戶端的並行要求。用戶端仿拂以獨佔方式存取 EJB 一樣。比方說,如果有兩個用戶端要求相同的實體 EJB,儲存區會提供各自的實例給每一個用戶端,且在內部維持同步,而用戶端完全不會察覺。
命名
EJB 儲存區提供 JNDI 名稱空間來尋找儲存區內部署的 EJB。EJB 用戶端可以查閱 EJB 來取得 Home 介面。EJB 的 Home 介面提供方法來尋找和建立 EJB 實例。只要可從位置上取得 JNDI
命名環境,用戶端就能夠存取 EJB。
持續性
EJB 開發人員有兩種設計可選擇如何儲存實體 EJB 持續資料:儲存區管理的持續性 (CMP) 和 Bean 管理的持續性 (BMP)。CMP 將實作資料存取程式碼的責任委派給儲存區,BMP 則留給 EJB 開發人員實作此程式碼。CMP
可讓 EJB 開發人員以標準實作來存取持久性儲存體,開發人員只需要在部署描述子中宣告儲存區管理的欄位。
交易管理
交易是一連串全部一起成功或失敗的操作 -
因此,只要其中有任何操作失敗,系統狀態就不變。例如,假設您要核發飛機票:您會先驗證客戶的信用卡帳戶、以此帳戶支付,然後核發機票。這一連串操作應該全部在單一交易中發生,如果有任何操作失敗,則客戶的信用卡帳戶不會有任何改變,也就不會核發機票。
EJB 可以利用 Bean 管理的交易區分或儲存區管理的交易區分,以下兩個標題中將進一步說明。
Bean 管理的交易區分
在 Bean 管理的交易區分中,您利用簡單的 API 來區分交易界限。這就是 Java Transaction API (JTA),可讓您以程式化的方式控制交易區分;例如,呼叫 JTA UserTransaction 介面的
begin() 、commit() 及 rollback() 方法。開發人員負責撰寫交易異常狀況的回復邏輯,因為儲存區不會自動處理這個問題。
附註:實體 EJB 無法使用 Bean 管理的交易區分 - 只能使用儲存區管理的交易區分。
儲存區管理的交易區分
在儲存區管理的交易區分中,您不提供啟動和結束交易的程式碼。相反地,您要在 EJB 部署描述子中為 EJB
的每一個方法提供交易屬性資訊。交易屬性(Required、RequiresNew、NotSupported、Supports、Mandatory 或 Never
的其中一個)向儲存區表示方法使用什麼交易範圍。比方說,如果有一個用戶端在交易內執行,且呼叫您的 EJB 的方法,此方法的交易屬性設為 Required,則會在現有交易的範圍內呼叫此方法。
請儘量以儲存區管理的交易區分來代替 Bean 管理的交易區分,這樣就不必在元件中新增、除錯及測試交易區分程式碼。此外,每一個 EJB
方法的交易行為是在部署時於部署描述子中指定。這表示變更交易行為不需要浪費時間經過一次程式碼更新、除錯、測試週期。
分散式交易
分散式異動是指必須在多個資料庫及/或多個應用程式之間取得協調的交易。這與集中式交易恰好相反,例如向單一資料庫確認交易的單一 J2EE 應用程式伺服器。
分散式異動需要兩階段確定;例如,在更新多個資料庫的情況。有些 EJB 儲存區(例如 BEA WebLogic Server 6.0)採用 Open Group 的 XA
通訊協定來支援兩階段確定。應用程式設計師不必撰寫程式碼來處理兩階段確定;EJB 儲存區會負責處理。
安全管理
EJB 安全由 EJB 儲存區根據部署描述子中的安全資訊來處理。在部署描述子中,您要為每一個 EJB 方法宣告一組角色,亦即宣告您授權呼叫方法的角色。
在執行時期,EJB 的每一個用戶端會指定為一個角色,EJB 儲存區會檢查用戶端角色是否已授權呼叫此方法,以管理 EJB 方法的存取。
由於安全資訊是在部署描述子中宣告,所以變更安全行為不需要浪費時間經過一次程式碼更新、除錯、測試週期。
生命週期管理
EJB 在生命週期內會經過一連串狀態來回應用戶端要求。EJB 儲存區負責管理此生命週期。
在儲存區啟動時,儲存區會在資源儲存區建立一堆 EJB 實例(在需要 EJB 資源時可以省去啟動時間)。當 EJB 用戶端要求建立 EJB 時,儲存區會分配出一個實例。用戶端就可以立即對 EJB 提出要求。當 EJB 用戶端要求移除 EJB
時,此實例會歸還給儲存區。
儲存區會利用一組標準的回呼方法,在 EJB 生命週期內向 EJB 實例通知各種事件,例如:
-
ejbCreate() - 由儲存區在建立 EJB 實例之後呼叫
-
ejbRemove() - 由儲存區在即將刪除 EJB 實例時呼叫
-
ejbActivate() - 由儲存區在 EJB 實例從被動狀態還原之後呼叫
-
ejbPassivate() - 由儲存區在 EJB 實例即將取消時呼叫
-
ejbStore() - 由儲存區在 EJB 實例即將寫入資料庫時呼叫
-
ejbLoad() - 由儲存區在 EJB 實例欄位從資料庫載入之後呼叫
雖然 EJB 的回呼方法實作通常空白,但每一個 EJB 一定要實作這些回呼。例如,儲存區呼叫 EJB 的 ejbRemove() 方法,向 EJB 通知即將移除 EJB(用戶端先前已提出要求來移除 EJB)。在
EJB 的 ejbRemove() 方法中,您可撰寫移除 EJB 之前的任何必要操作,例如釋放 EJB 佔用的任何資源。
儲存區可以要求取消 EJB - 保存狀態資訊,並釋放 EJB 實例供資源儲存區使用。如果收到用戶端對此特定 EJB 物件的要求,儲存區將會啟動取消的 EJB - 回復狀態資訊。
資料庫連線儲存區作業
資料庫連線的開啟速度很慢。而且,由於版權限制,資料庫連線可算是稀有資源。EJB 儲存區會透過資料庫連線儲存區作業來解決這個問題 - 儲存區會保留一堆開啟的連線,再根據需要來分配給 EJB 或索回,形成快速又有效率的連線。
對於使用 CMP 的實體 EJB,資料庫連線會自動處理妥當。不必撰寫連線或 SQL 程式碼,只需要在 EJB 部署描述子中指定 JDBC 資料來源的 JNDI 名稱,再利用儲存區特有的部署工具來產生連接常式。儲存區會管理資料庫連線儲存區。
對於使用 BMP 的實體 EJB 或階段作業 EJB,您必須撰寫連線程式碼來連接 JDBC 資料來源,也要撰寫 SQL 程式碼來存取資料庫。JDBC 資料來源仍然由儲存區管理 - JDBC
資料來源實際上會使用儲存區維護的資料庫連線儲存區。
傳訊
EJB 儲存區必須提供傳訊支援來達到非同步訊息交換。訊息驅動 EJB 程序所傳遞的訊息可以使用 JMS 或其他傳訊類型。由於 JMS 和 EJB 相互牽連的關係,它們必須支援來自 Web 和 EJB 儲存區元件的交易式存取,例如
Servlet、JSP 網頁及 EJB。
J2EE 元件
下節簡短討論所有類型的 J2EE 元件。J2EE 元件包括 Applet、應用程式用戶端、Web 元件及 Enterprise JavaBeans。J2EE 元件在 J2EE 儲存區中執行。
Applet
Applet 是小程式,可以隨著網頁一起傳送到 Web 瀏覽器中執行。也可以在其他支援 Applet 程式設計模型的環境下執行。
Applet 主要用於實作使用者介面,大幅延伸 HTML 網頁的功能。
應用程式用戶端
應用程式用戶端是 Java 應用程式。可以存取 J2EE 中間層和 EIS 層的機能。通常是提供使用者介面的桌面應用程式。可以用來實作「重型用戶端」,請參閱概念:分送型樣。
Web 元件
Java Servlet
Java Servlet 技術可讓 Web 伺服器處理 Web 用戶端的要求,並以動態內容做回應。Java Servlet 可以與其他 Web 和 EJB 元件互動來產生此動態內容。產生的內容可以是任何文字型文件,包括 HTML 和
XML。Java Servlet 也可以做為與 JAX-RPC API 合作的 Web 服務端點。
附註:以 Servlet 做為 Web 服務端點是 J2EE 1.4 (JAX-RPC 1.1) 的新特性,在舊版中不支援。
如需 J2EE Servlet 的相關資訊,請造訪 http://java.sun.com/。請循著鏈結瀏覽至 J2EE >
Blueprints。
JavaServer Pages
JavaServer Pages (JSP) 技術以 Java Servlet 為基礎,但為文字型,而不是以程式碼為主。JSP 網頁會處理要求和產生回應,就像 Servlet 一樣,但以呈現導向為主要邏輯。JSP 網頁大多包含靜態
HTML,對來自其他來源的資料定義呈現格式,例如來自 JavaBeans 和 EJB。Web 元件開發人員可以建立自訂標示庫,延伸 JSP 來增加新的功能。
如需 JSP 的相關資訊,請造訪 http://java.sun.com/。請循著鏈結瀏覽至 J2EE > Blueprints。
HTML 網頁
HTML 網頁可用來支援使用者介面。可能定義為靜態網頁,或由 Servlet 和 JSP 網頁產生。J2EE 規格要求 J2EE Web 用戶端必須支援顯示 HTML 網頁。
JavaBeans
JavaBeans API 定義一套架構來建立簡單、可重複使用的元件。這些元件可利用應用程式建置器工具來編輯和組合。由於以標準的 Java 程式碼來實作 JavaBeans,其他程式設計師(可能使用這些元件)和工具仍然可以理解實作。
JavaBeans 不是 J2EE 技術,而是由 J2EE 技術採用。例如,EJB 可以使用 JavaBeans 做為值物件。有關 JavaBeans 和 Enterprise JavaBeans 的差異,請參閱標題比較 JavaBeans 與 EJB。
如需 JavaBeans 的相關資訊,請參閱概念:JavaBeans。
Enterprise JavaBeans
Enterprise JavaBeans 規格規定一套架構來開發和部署元件式、交易式的分散式商業應用系統。
以 EJB 規格定義的元件稱為 Enterprise JavaBeans (EJB)。EJB 是伺服器端 Java 元件,供您實作應用程式的商業規則。
EJB 在稱為 EJB 儲存區的環境中部署和執行,EJB 儲存區在 EJB 儲存區標題中已說明,提供交易管理、資料庫連線功能及安全等服務。由於隱藏這些複雜性,EJB 架構可讓元件開發人員專注於商業邏輯。
Enterprise JavaBean (EJB) 是 Java 介面、一個 EJB 實作類別及一個 XML 部署描述子的合作。EJB 介面和實作類別必須符合 EJB 規格定義的規則,例如實作特定介面和提供特定的回呼方法。
EJB 介面包含 Home 介面,提供方法來尋找和建立 EJB 實例,也包含元件介面,提供特定 EJB 實例的商業方法。這些可能是遠端介面,表示可經由網路呼叫,或是本端介面,表示呼叫端必須在相同的程序中(更明確地說,在相同的 Java
Virtual Machine 中)。EJB 介面由 EJB 儲存區類別實作,儲存區類別會將方法委派給 EJB 實作類別。但儲存區管理的實體 EJB 的 finder 方法是例外,此方法由儲存區類別來處理。
EJB 有三種:Session Bean、Entity Bean 及訊息驅動 Bean。
如需 EJB 的相關資訊,請造訪 http://java.sun.com/。請循著鏈結瀏覽至 J2EE > Blueprints。
Session Bean
Session Bean 元件提供實作用戶端特有商業邏輯的服務。單一用戶端可以透過本端或遠端介面來存取每一個 Session Bean 實例。Session Bean 可以將資料儲存至資料庫,但通常會呼叫代表商業物件的 Entity
Bean 來儲存資料。Session Bean 實例可以保存暫時性交談狀態。
Session Bean 可能有 getAllCustomers() 方法,可傳回資料庫中所有客戶的集合。這個 Bean 可以從 Customer Entity Bean 取得資訊,再將結果傳給用戶端。
根據 JSR 和 EJB 規格的定義,Stateless Session Bean 可以做為 Web 服務端點。
附註:以 Stateless Session Bean 做為 Web 服務是 J2EE 1.4 (JSR 109 and EJB 2.1) 的新特性,在舊版中不支援。
如需 Session Bean 的相關資訊,請參閱 http://java.sun.com/ 的 Enterprise
JavaBeans Specification, Version 2.1。請循著鏈結瀏覽至 Products & Technologies > J2EE > Enterprise JavaBeans。
Entity Bean
Entity Bean 元件提供實作商業物件特有邏輯的服務。多個用戶端可以同時透過本端或遠端介面來存取一個 Entity Bean 實例。Entity Bean 將商業物件資料儲存至資料庫,持續性資料在儲存區或用戶端損毀之後仍得以倖存。
Entity Bean 可能代表客戶,可能在關聯式資料庫的客戶表格中儲存為一列。EJB 開發人員可選擇持續性方法,在此例子中是關聯式資料庫。
Entity Bean 持續性有兩種:Bean 管理的持續性 (BMP) 和儲存區管理的持續性 (CMP)。BMP Entity Bean 必須實作資料存取程式碼,而 CMP Entity Bean
則由儲存區實作這項能力。雖然有其他類型的持續性(物件資料庫、檔案型持續性等),但通常以 CMP 儲存區實作做為關聯式資料庫持續性。
如需 Entity Bean 的相關資訊,請參閱 http://java.sun.com/ 的 Enterprise JavaBeans
Specification, Version 2.1。請循著鏈結瀏覽至 Products & Technologies > J2EE > Enterprise JavaBeans。
訊息驅動 Bean
訊息驅動 Bean 元件提供一項實作訊息處理特有商業邏輯的服務。只有儲存區可以呼叫此服務;用戶端不能直接透過遠端或本端介面來呼叫此服務。相反地,當訊息抵達 Bean 所服務的目的地或端點時,儲存區會呼叫訊息驅動 Bean 的實例,此實例以
MessageListener 指定給目的地。訊息驅動 Bean 實例不保存交談狀態,但可以跨方法呼叫來保存含有資源參照的實例變數(例如,資料庫連線)。
附註:EJB 2.0 以前不支援訊息驅動 Bean。支援不同於 JMS 的傳訊類型是 EJB 2.1 規格的新特性,在舊版中不支援。
如需訊息驅動 Bean 的相關資訊,請參閱 http://java.sun.com/ 的 Enterprise JavaBeans
Specification, Version 2.0。請循著鏈結瀏覽至 Products & Technologies > J2EE > Enterprise JavaBeans。
比較 JavaBeans 與 EJB
雖然名稱類似,但 EJB 比一般的 JavaBeans 更複雜。兩者都是為可重複使用的元件定義架構,但 EJB 多了必要的支援,可建立分散式、多使用者服務。這兩種元件都可利用應用程式建置器工具來組合,但 EJB 必須部署到 EJB
儲存區才能執行。
J2EE 元件的服務 (API)
J2EE 儲存區支援所有 J2SE 標準 API,也支援一部分的 J2EE API,視儲存區類型而定。儲存區內的元件可以存取這個可用的子集。下表簡單描述每一個 API 並列出所在的 J2EE 儲存區。
名稱
|
說明
|
J2EE 儲存區,
API 存在的位置
|
EJB 2.1
|
EJB 規格為 EJB 商業層元件定義一套元件模型,這些元件自動支援一些服務,例如遠端通訊、交易管理、安全及持續性。
如需 EJB 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至
Products & Technologies > J2EE > Enterprise JavaBeans。
|
* 只有用戶端 API
|
JAAS
|
Java 鑑別和授權服務 (JAAS) 提供使用者鑑別和授權的服務,確保他們有權限執行動作。
如需 JAAS 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至
Products & Technologies > J2SE > Core Java > Java Authentication and Authorization
Service (JAAS)。
|
|
JAF 1.0
|
JavaBeans Activation Framework (JAF) 提供服務來識別資料,並實例化 JavaBean 來操作資料。
如需 JAF 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至
Products & Technologies > J2SE > Desktop Java > JavaBeans > JavaBeans Activation
Framework。
|
|
JAXP 1.2
|
Java API for XML Processing (JAXP) 為 XML 文件處理提供抽象介面,適用於使用 DOM SAX 或 XSLT 的相容性剖析器和轉換器。
如需 JAXP 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至
Products & Technologies > J2EE > Java API for XML Processing (JAXP)。
|
|
JAX-RPC 1.1
|
JAX-RPC 規格定義用戶端存取 Web 服務的 API 及 Web 服務端點的實作技術。
如需 JAX-RPC 的相關資訊,請造訪 JAX-RPC/font>
|
|
Web Services for J2EE 1.1
|
Web Services for J2EE 規格 (JSR-109) 定義 J2EE 應用程式
伺服器在 Web 服務端點部署方面必須支援的功能...
如需 Web Services for J2EE 的相關資訊,請造訪 http://jcp.org/aboutJava/communityprocess/final/jsr109/index.html
|
|
SAAJ 1.2
|
SSAJ API 提供操作 SOAP 訊息的能力.
如需 JAXP 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至
Products & Technologies > J2EE > SOAP with Attachments API for Java (SAAJ)。
|
|
JAXR 1.0
|
JAXR 規格定義 API 讓用戶端存取 XML 型的登錄,例如 WebXML 登錄和 UDDI 登錄。
如需 JAXP 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至
Products & Technologies > J2EE > Java API for XML Registries (JAXR)。
|
|
JavaMail 1.3
|
JavaMail API 提供一套架構,可以延伸來建置 Java 型郵件應用程式。
如需 JavMail 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至 Products & Technologies > J2EE >
JavaMail。
|
|
JDBC 3.0
|
Java 資料庫連線功能 (JDBC) 是一套存取列表式資料來源的 API,例如 SQL 資料庫、試算表及純文字檔。
如需 JDBC 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至
Products & Technologies > J2EE > JDBC。
|
|
JMS 1.1
|
Java 訊息服務 (JMS) 提供資料傳送和事件通知的非同步傳訊服務。利用 JMS,即可能以訊息驅動 EJB 非同步地處理傳遞至 JMS 主題和佇列的訊息。
如需 JMS 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至
Products & Technologies > J2EE > Java Message Service。
|
|
JNDI
|
Java 命名和目錄介面規格 (JNDI) 提供命名和目錄服務,可登錄和查閱分散式元件與資源。用戶端只需要知道元件或資源已登錄的 JNDI 名稱,不必知道實際的網路位置。
範例:在部署時,以部署描述子 ejb-name 欄位在企業目錄中登錄 EJB。J2EE 用戶端以 JNDI lookup 來查閱 EJB - 所有用戶端只需要知道 EJB
在目錄中登錄的名稱。JNDI lookup 會傳回 EJB Home 物件的參照。
如需 JNDI 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至
Products & Technologies > J2SE > Core Java > Java 命名和目錄介面 (JNDI)。
|
|
JTA 1.0
|
Java Transaction API (JTA) 定義介面來管理交易管理程式、資源管理程式、應用程式伺服器及應用程式之間的分散式交易服務。
如需 JTA 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至 Products & Technologies > J2EE >
Transactions。
|
|
J2EE Connector 1.5
|
J2EE Connector Architecture Service Provider Interface (SPI) 定義 EIS 資源至 J2EE 儲存區的連線標準 - EIS
特定資源配接器(由 EIS 廠商提供)插入 J2EE 儲存區中來延伸儲存區,為此 EIS 提供交易式、安全的支援。然後,儲存區裡的元件就可以透過 J2EE Connector
Architecture SPI 來存取 EIS。
如需 J2EE Connector 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至 Products & Technologies > J2EE >
J2EE Connector Architecture。
|
|
JSP 2.0
|
JavaServer Pages 技術讓 Web 開發人員有能力建立和維護動態網頁。JSP 網頁是文字型,且以 XML 之類的標示來執行商業邏輯和產生自訂內容。JSP
技術可將商業邏輯委派給其他元件,所以只有呈現邏輯需要放在 JSP 網頁中。
如需 JSP 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至 Products & Technologies > J2EE >
JavaServer Pages。
|
Web
|
Servlet 2.4
|
Java Servlet 延伸 Web 伺服器的功能來協助建置 Web 型應用程式。Servlet 通常用於互動式 Web 應用程式,Web
伺服器會從現有商業系統取得動態產生的內容來回應使用者要求。
如需 Java Servlet 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至 Products & Technologies > J2EE >
Java Servlet。
|
Web
|
RMI-IIOP
|
「遠端方法呼叫」技術在 Internet Inter-Orb Protocol (RMI-IIOP) 上執行,可讓 Java 元件與其他語言(例如 C++ 或 Smalltalk)撰寫的舊式
CORBA 元件溝通。
如需 RMI-IIOP 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至 Products and APIs > RMI-IIOP。
|
|
J2EE Management 1.0
|
J2EE Management API 提供 API 讓管理工具查詢 J2EE 應用程式伺服器,以判斷
目前狀態、已部署的應用程式等。
如需 RMI-IIOP 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至 Products & Technologies > J2EE > J2EE
Management Specification。
|
|
JMX 1.2
|
J2EE Management API 以 JMX API 提供一些必要支援來管理 J2EE 產品。
如需 RMI-IIOP 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至 Products & Technologies > J2SE > Core
Java > Java Management Extensions (JMX)。
|
|
J2EE Deployment 1.1
|
J2EE Deployment API 在部署工具的執行時期環境和 J2EE 應用程式伺服器提供
的外掛元件之間定義介面。
如需 J2EE Deployment 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至 Products & Technologies > J2EE > J2EE
Deployment Specification。
|
|
JACC 1.0
|
JACC 規格定義 J2EE 應用程式伺服器和授權原則支援模組之間的合約。
如需 JACC 的相關資訊,請造訪 http://java.sun.com/,循著鏈結瀏覽至
Products & Technologies > J2EE > Java Authorization Contract for Containers。
|
|
組合與部署
J2EE 應用程式是由應用程式部署描述子 (application.xml) 和一或多個構成應用程式的 J2EE 模組所組成。模組是可重複使用的可攜性元件。J2EE 應用程式包裝在 .ear 保存檔中。
部署描述子
部署描述子是 J2EE 應用程式和 J2EE 模組中使用的 XML 檔案。提供配置資訊由 J2EE 伺服器在部署時讀取。此配置資訊可讓伺服器明確地自訂 J2EE 應用程式或模組,不必變更程式碼或類別。
每一個 J2EE 應用程式或模組都有通用的部署描述子類型。不論 EJB 部署在什麼伺服器上,通用的部署描述子(例如 EJB 模組的 ejb-jar.xml)定義的資訊適用於
EJB。伺服器特定部署描述子指定只對特定伺服器才有意義的資訊。伺服器特定部署描述子的名稱會反映所指定的伺服器。
J2EE 模組
J2EE 模組包含模組的部署描述子及構成模組的許多元素,包括:
-
在 Web 伺服器上部署的非 Java 元素(JSP 網頁、影像檔、靜態 HTML 網頁);也就是虛擬目錄元素
-
在 Web 伺服器上部署的 Java 元素(Servlet、JavaBeans、Java 類別)
-
在 EJB 伺服器上部署的元素(EJB 和支援 Java 類別)
J2EE 模組有三種:
J2EE 應用程式用戶端
J2EE 應用程式用戶端模組包裝在 .jar 保存檔中,且包含:
-
application-client.xml 部署描述子
-
應用程式用戶端實作 .class 檔案
Web 元件
Web 元件模組包裝在 .war 保存檔中,且包含:
-
web.xml 部署描述子和伺服器特有的部署描述子
-
JSP 網頁
-
HTML 網頁
-
影像(例如 .gif 和 .jpg)
-
Servlet 類別檔案
如果模組是 Web 服務,則 .war 保存檔中包含:
-
webservices.xml 部署描述子
-
Servlet 類別檔案
-
WSDL 檔案
Enterprise JavaBean
單一 Enterprise JavaBean JAR 保存檔可能包含許多 EJB,但部署資訊儲存在一組部署描述子中(ejb-jar.xml 及任何伺服器特定部署描述子)。
標準的 Enterprise JavaBean 模組包含:
-
ejb-jar.xml 和伺服器特有的部署描述子
-
EJB 實作類別檔案
Web 服務 Enterprise JavaBean 模組包含:
-
webservices.xml 部署描述子
-
EJB 實作類別檔案
如需 J2EE 包裝和部署的相關資訊,請造訪 http://java.sun.com/。請循著鏈結瀏覽至 Docs &
Training > J2EE Platform, Enterprise Edition > Java Blueprints Program。
J2EE 應用程式開發
J2EE 應用程式開發流程會定義多個角色和階段。下列幾節定義 J2EE 規格所提供的開發角色和這些角色參與的開發階段。
J2EE 應用程式開發角色
這個表格總結應用程式開發角色。
角色名稱
|
說明
|
J2EE 產品提供者
|
J2EE 產品提供者是 J2EE 平台實作(又稱為 J2EE 產品)的供應商。J2EE 產品提供者包括 BEA、IBM 及 Sun。這些組織通常會以現有的能力來努力研發 J2EE
平台的實作。例如,BEA 實作以 BEA 成就非凡的 Tuxedo 交易處理監督程式為基礎。J2EE 產品提供者也供應必要的工具來支援應用程式部署和管理。
|
應用程式元件提供者
|
應用程式元件提供者實際上扮演許多角色,例如 EJB 開發人員和 HTML 文件設計師。這些角色負責以提供的工具來生產 J2EE 應用程式元件。
|
應用程式組合人員
|
應用程式組合人員會以提供的工具將 J2EE 應用程式元件組合為 J2EE 應用程式。J2EE 應用程式以「企業保存檔 (EAR)」檔案的格式提供。應用程式組合人員也描述 J2EE
應用程式的任何外部相依性。在實際部署 J2EE 應用程式時,部署人員會解決這些相依性。
|
部署人員
|
部署人員負責將 J2EE 應用程式及用來建構的應用程式元件部署到作業環境中。第一個部署階段是將各種應用程式元件安裝在適當的 J2EE
儲存區內。第二個部署階段是配置任何已宣告的外部相依性,以利於解決。例如,已定義的安全角色會對映至作業環境的使用者群組和帳戶。第三個部署階段是執行新的應用程式,開始接收要求。
|
系統管理員
|
系統管理員負責執行時期的基礎架構,包括任何已部署的 J2EE 應用程式。此角色以 J2EE 產品提供者供應的適當工具來完成這項作業。
|
工具提供者
|
工具提供者會提供工具來支援開發和包裝應用程式元件。這些工具通常對應於產生的各種不同的應用程式元件,且包含 IDE,例如 IBM VisualAge for Java 和 Borland
JBuilder。
|
系統元件提供者
|
「系統元件提供者」提供不同系統層次的元件,例如資源配接器或授權原則支援模組。
|
這些角色不抵觸,單一個人可以扮演多個角色,尤其是在小型開發團隊或原型塑造狀況中。
J2EE 應用程式開發階段
本節按照 J2EE 規格的規定,描述 J2EE 應用程式的不同開發階段。開發階段如下:
-
元件開發
-
J2EE 應用程式至少要包含一個 J2EE 模組,所以至少需要一個元件開發階段。因為所有 J2EE 應用程式都必須組合和部署,一定需要最後兩個階段。
下表總結 J2EE 應用程式的開發階段。
J2EE 開發階段
|
作業
|
由 J2EE 角色執行
|
結果(交付項目)
|
J2EE
應用程式用戶端建立
|
-
撰寫用戶端程式碼和編譯類別
-
建立 application-client.xml 部署描述子
-
建立內含類別和 XML 檔案的 JAR 保存檔
|
應用程式元件提供者(軟體開發人員)
|
內含 J2EE 應用程式用戶端的 JAR 檔案
|
Web 元件建立
|
-
撰寫 servlet 程式碼和編譯類別
-
撰寫 JSP 和 HTML 網頁
-
建立 web.xml 部署描述子
-
建立含有類別、.jsp、.html 及 XML 檔的 Web 應用程式保存檔 (WAR)
|
應用程式元件提供者(軟體開發人員;Web 設計師:JSP 網頁、HTML 網頁)
|
內含 Web 元件的 WAR 檔案
|
Enterprise
JavaBean 建立
|
-
撰寫 EJB 程式碼和編譯類別
-
建立 ejb-jar.xml 和伺服器特有的部署描述子
-
建立內含類別和 XML 檔案的 JAR 保存檔
|
應用程式元件提供者(軟體開發人員)
|
內含 Enterprise JavaBean 的 JAR 檔案
|
J2EE 應用程式組合
|
-
建立 application.xml 部署描述子
-
建立內含 EJB (JAR)、Web 元件 (WAR) 及 XML 檔案的 EAR 保存檔
|
應用程式組合人員
|
內含 J2EE 應用程式的 EAR 檔案
|
J2EE 應用程式部署
|
-
將 J2EE 應用程式 (EAR) 新增至 J2EE 伺服器環境
-
根據本端環境配置來編輯 application.xml 部署描述子
-
將 J2EE 應用程式部署到 J2EE 伺服器
|
部署人員
|
已安裝和已配置的 J2EE 應用程式
|
每一個開發流程階段會產生下一個階段使用的交付項目。「J2EE 應用程式組合」階段會以「元件開發」階段所建立的元件來產生 J2EE 應用程式 EAR 保存檔。在 J2EE 應用程式部署階段,EAR 保存檔會部署到 J2EE
伺服器上。
每一個階段的交付項目具有可攜性,不一定由同一人執行,只要環境滿足 J2EE 平台需求,甚至不會在相同的環境下執行。
如需 J2EE 包裝和部署的相關資訊,請造訪 http://java.sun.com/。請循著鏈結瀏覽至 J2EE
> Blueprints。
詳細資訊
如需 J2EE 的相關資訊,請參閱 Sun J2EE 藍圖。請造訪 http://java.sun.com/。請循著鏈結瀏覽至 J2EE > Blueprints > Guidelines: Designing Enterprise
Applications with the J2EE Platform, Second Edition。
Rational Unified Process 中也包含本文件的副本。
關於特定主題的資訊,本表總結「Sun J2EE 藍圖」的相關章節。
J2EE 概念
|
J2EE 藍圖章節
|
J2EE 平台技術
|
第 2 章
|
Enterprise JavaBeans
|
第 5 章
|
交易
|
第 8 章
|
安全
|
第 9 章
|
Servlet
|
第 4 章
|
JavaServer Pages
|
第 4 章
|
部署與包裝
|
第 7 章
|
|