?? 轉(zhuǎn):第一部分:ejb 體系結(jié)構(gòu)的歷史和目標(biāo).txt
字號(hào):
Enterprise JavaBeans 體系結(jié)構(gòu)將處理企業(yè)應(yīng)用程序生命周期中的開發(fā)、部署和運(yùn)行等方面。
Enterprise JavaBeans 體系結(jié)構(gòu)將定義一些約定,這些約定使多個(gè)供應(yīng)商提供的工具能夠開發(fā)并部署可在運(yùn)行時(shí)互操作的組件。
Enterprise JavaBeans 體系結(jié)構(gòu)將與現(xiàn)有的服務(wù)器平臺(tái)兼容。供應(yīng)商將能夠擴(kuò)展它們的現(xiàn)有產(chǎn)品,以支持 Enterprise JavaBeans 組件。
Enterprise JavaBeans 體系結(jié)構(gòu)將與 Java 編程語(yǔ)言編寫的其他 API 兼容。
Enterprise JavaBeans 體系結(jié)構(gòu)將提供 EJB 組件和非 Java 編程語(yǔ)言應(yīng)用程序之間的互操作性。
Enterprise JavaBeans 體系結(jié)構(gòu)將與 CORBA 兼容。
使用 EJB 技術(shù)的好處
這些設(shè)計(jì)目標(biāo)會(huì)使企業(yè)和開發(fā)人員得到什么好處呢?下面列出了可望從采用 Enterprise JavaBeans 環(huán)境獲得的好處:
EJB 組件使編寫應(yīng)用程序更為簡(jiǎn)單。盡管 EJB 體系結(jié)構(gòu)復(fù)雜,但應(yīng)用程序開發(fā)人員一般都不必再編寫用于訪問系統(tǒng)服務(wù)的代碼。一種稱為 EJB 容器的系統(tǒng)組件使系統(tǒng)服務(wù)可用于 EJB 組件的任務(wù)。
服務(wù)器端商務(wù)邏輯可以移植。除了 Java 語(yǔ)言固有的可移植性外,EJB 體系結(jié)構(gòu)還在 bean 和支持該 bean 的容器之間提供了一套標(biāo)準(zhǔn)化的應(yīng)用程序編程接口。這使開發(fā)人員能夠?qū)?bean 從一種操作環(huán)境移植到另一種操作環(huán)境,而無須重新編寫其源代碼。
可以從現(xiàn)有的軟件組件裝配出服務(wù)器端應(yīng)用程序,這與從現(xiàn)有的 Java bean 可以裝配出客戶端應(yīng)用程序一樣,從而使軟件能夠重用。
EJB 體系結(jié)構(gòu)內(nèi)置了對(duì)典型企業(yè)級(jí)系統(tǒng)服務(wù)的支持,包括分布式對(duì)象、事務(wù)處理、數(shù)據(jù)庫(kù)、安全和全局命名。
多家 IT 供應(yīng)商都采納 EJB 體系結(jié)構(gòu),這是由于有這樣的承諾:客戶將能夠從選定的供應(yīng)商那里選購(gòu)軟件組件,如 EJB 組件、容器及 EJB 服務(wù)器;也由于承諾了不同供應(yīng)商的產(chǎn)品,只要符合 EJB 體系結(jié)構(gòu),就都是可互操作的。
用 EJB 組件構(gòu)建的應(yīng)用程序可以從一個(gè)服務(wù)器移植到另一個(gè)服務(wù)器,從而支持可伸縮性,這是因?yàn)樵?EJB 模型中,各個(gè)軟件組件都是嚴(yán)格分離的。
EJB 體系結(jié)構(gòu)能保障原有的 IT 投資,這是通過允許將現(xiàn)有的信息系統(tǒng)和資產(chǎn)“包裹”在這些應(yīng)用程序中,而不要求客戶更換現(xiàn)有技術(shù)。事實(shí)上,在關(guān)系數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù)的企業(yè)已經(jīng)有了一套已有雛形的實(shí)體 bean,正等著通過 EJB 外殼去訪問。
進(jìn)一步考察 JNDI
Enterprise JavaBeans 組件使用 Java Naming and Directory Interface (JNDI) 來訪問各種目錄服務(wù)。JNDI 分兩部分:應(yīng)用程序編程接口 (API) 和服務(wù)供應(yīng)商接口 (SPI):
“JNDI 體系結(jié)構(gòu)由 JNDI API 和 JNDI SPI 組成。JNDI API 允許 Java 應(yīng)用程序訪問各種命名和目錄服務(wù)。JNDI SPI 則是設(shè)計(jì)來供任意一種服務(wù)的供應(yīng)商(也包括目錄服務(wù)供應(yīng)商)使用。這使得各種各樣的目錄服務(wù)和命名服務(wù)能夠透明地插入到使用 JNDI API 的 Java 應(yīng)用程序中。(見 JavaSoft,“JNDI: Java Naming and Directory Interface”)
JNDI API 并不同某種專用的命名技術(shù)或目錄技術(shù)連在一起,也不同任何供應(yīng)商的目錄服務(wù)連在一起,因此它對(duì) EJB 組件的可移植性有所貢獻(xiàn)。例如,客戶可以從多種不同的技術(shù)中選擇,來為其 EJB 應(yīng)用程序提供目錄服務(wù),這些技術(shù)包括:
LDAP:Sun 的 LDAP 服務(wù)供應(yīng)商支持 LDAP 協(xié)議的第 2 版和第 3 版。
NIS:Sun 提供一個(gè) NIS 服務(wù)供應(yīng)商(NIS 即網(wǎng)絡(luò)信息服務(wù),以前稱為黃頁(yè))。
COS 命名:Sun 的 COS 命名服務(wù)供應(yīng)商提供對(duì) CORBA 命名服務(wù)的訪問。
文件系統(tǒng):Sun 提供一個(gè)服務(wù)供應(yīng)商來訪問文件系統(tǒng)。
RMI 注冊(cè):Sun 為 RMI 注冊(cè)提供一個(gè)服務(wù)供應(yīng)商。
Novell:有幾個(gè)服務(wù)供應(yīng)商可提供對(duì)目錄服務(wù) NDS 的訪問以及 NetWare 3X 連接庫(kù)、Novell 文件系統(tǒng)和其他 Novell 服務(wù)(如擴(kuò)展 NCP)的訪問。
雖然 JNDI 規(guī)范對(duì)供應(yīng)商是中立的,但不應(yīng)認(rèn)為,實(shí)現(xiàn) JNDI 接口的應(yīng)用程序服務(wù)器一定要能訪問來自多個(gè)供應(yīng)商的服務(wù)供應(yīng)商代碼。
JNDI 命名體系結(jié)構(gòu)的關(guān)鍵概念包括:
對(duì)象和名稱之間的綁定。
若干稱為命名上下文的綁定集。
命名系統(tǒng),即若干組命名上下文。
命名空間,指一個(gè)命名系統(tǒng)中的所有名稱。
名稱分類為原子名稱、復(fù)合名稱和合成名稱。原子名稱是不可分割的,可以綁定到一個(gè)對(duì)象上。復(fù)合名稱是原子名稱的組合,而合成名稱則跨越多個(gè)命名系統(tǒng)。
命名上下文特別重要:所有的命名操作均是在上下文對(duì)象上進(jìn)行的,并且名稱解析過程總是從最初的命名上下文開始。
EJB 應(yīng)用程序是如何使用 JNDI 的呢?JNDI 的主要用途是檢索對(duì) EJB 組件的引用。因?yàn)?EJB 框架是一個(gè)分布式對(duì)象框架,所以 EJB 應(yīng)用程序不應(yīng)當(dāng)假定 EJB 組件的位置。JNDI 就是獲取對(duì) bean 的起始引用的一種機(jī)制。當(dāng)一個(gè) bean 安裝到一個(gè) enterprise bean 服務(wù)器上時(shí),一個(gè)被稱為 EJB 容器的軟件組件就負(fù)責(zé)創(chuàng)建各個(gè)名稱-對(duì)象綁定,使所需的 Java 類文件能使用這個(gè) bean。應(yīng)用程序使用 JNDI 的查找方法來檢索對(duì)象引用,如下例所示:
Context initialContext = new InitialContext( );
CartHome cartHome = javax.rmi.PortableRemoteObject.narrow(
initialContext.lookup("applications/shopping_cart"), CartHome.class);
應(yīng)用程序有責(zé)任知道外部名稱,應(yīng)用程序就是通過這個(gè)名稱才得以引用一個(gè) enterprise bean,并通過 JNDI 來獲取對(duì)該 bean 的引用的。
進(jìn)一步考察 JTA
除 JNDI 以外,Enterprise JavaBeans 體系結(jié)構(gòu)還使用 Java Transaction API (JTA)。因?yàn)槭聞?wù)對(duì)維護(hù)數(shù)據(jù)完整性和可靠性很重要,所以支持事務(wù)處理是 EJB 體系結(jié)構(gòu)的一個(gè)基本部分。如果企業(yè)應(yīng)用程序是分布式的,事務(wù)處理就會(huì)更加重要:
“事務(wù)的概念是一個(gè)重要的編程范例,其目的在于簡(jiǎn)化既要求可靠性又要求可用性的應(yīng)用程序結(jié)構(gòu),特別是那些需要同時(shí)訪問共享數(shù)據(jù)的應(yīng)用程序。事務(wù)的概念最早是用在商務(wù)運(yùn)作的應(yīng)用程序中,其中它被用于保護(hù)集中式數(shù)據(jù)庫(kù)中的數(shù)據(jù)。后來,事務(wù)的概念已擴(kuò)展到分布式計(jì)算的更廣泛的環(huán)境中。今天,事務(wù)是構(gòu)建可靠的分布式應(yīng)用程序的關(guān)鍵,這一點(diǎn)已得到廣泛承認(rèn)。”(見對(duì)象管理組的“Transaction Service Specification”)
有時(shí)將事務(wù)描述為具有下列特征的工作單元:
原子性 — 如果因故障而中斷,所有結(jié)果均撤銷
一致性 — 事務(wù)的結(jié)果保留不變的特性
孤立性 — 中間狀態(tài)對(duì)其他事務(wù)是不可見的
持久性 — 已完成的事務(wù)的結(jié)果是持久的
事務(wù)的終止有兩種方式:提交一個(gè)事務(wù)會(huì)使其所有的更改永久不變,而回滾 (rolling back) 一個(gè)事務(wù)則撤銷其所有的更改。
對(duì)象管理組織 (OMG) 為一種面向?qū)ο蟮氖聞?wù)服務(wù),即對(duì)象事務(wù)服務(wù) (OTS),創(chuàng)建了一種規(guī)范。OTS 是 EJB 體系結(jié)構(gòu)內(nèi)的事務(wù)服務(wù)的基礎(chǔ)。下列事務(wù)規(guī)范就是為 enterprise bean 所采用的事務(wù)模型而設(shè):
OMG 的對(duì)象事務(wù)服務(wù) (OTS)
Sun Microsystems 的 Transaction Service (JTS)
Sun Microsystems 的 Java Transaction API (JTA)
開放組 (X/Open) 的 XA 接口
這種與語(yǔ)言無關(guān)的對(duì)象事務(wù)服務(wù),為一個(gè)強(qiáng)健的分布式事務(wù)服務(wù)提供了基本概念、定義和功能。
Java Transaction Service 是 OTS 的 Java 映射,在 org.omg.CosTransactions 和 org.omg.CosTSPortability 這兩個(gè)包中定義。JTS 對(duì)事務(wù)分界和事務(wù)環(huán)境的傳播之類的服務(wù)提供支持。JTS 功能由應(yīng)用程序通過 Java Transaction API 訪問。
Java Transaction API 指定事務(wù)管理器與分布式事務(wù)中涉及的其他系統(tǒng)組件之間的各種高級(jí)接口,這些系統(tǒng)組件有應(yīng)用程序、應(yīng)用程序服務(wù)器和資源管理器等。JTA 功能允許事務(wù)由應(yīng)用程序本身、由應(yīng)用程序服務(wù)器或由一個(gè)外部事務(wù)管理器來管理。JTA 接口包含在 javax.transaction 和 javax.transaction.xa 這兩個(gè)包中。
XA 接口定義了資源管理器和分布式事務(wù)環(huán)境中外部事務(wù)管理器之間的約定。外部事務(wù)管理器可以跨多個(gè)資源協(xié)調(diào)事務(wù)。XA 的 Java 映射包含在 Java Transaction API 中。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -