国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

全面研讀 EJB 2.0

2019-11-18 12:35:32
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  新的 EJB 2.0 規(guī)范不僅僅是一個(gè)新的階段性發(fā)行版,它加入了許多引人注目的變動(dòng),包括 CMP 組件模型中的一些變動(dòng)和一種新的 bean 類(lèi)型,它們將增強(qiáng)您在開(kāi)發(fā)應(yīng)用程序時(shí)的靈活性和可移植性。請(qǐng)率先了解此新規(guī)范的功能,本月已發(fā)布了它的公開(kāi)草案。
  
  
    2000年6月2日發(fā)布的 EnterPRise javaBeans 2.0 不僅是一個(gè)階段性發(fā)行版,而且是該規(guī)范的一個(gè)新版本。整個(gè)規(guī)范有 500 多頁(yè),比以前的 EJB 1.1 規(guī)范長(zhǎng)了 200 頁(yè) (66%)。該規(guī)范中最重要的變動(dòng)是對(duì)容器治理的持久性 (CMP) 所作的更改,以及引入了一種全新的 bean 類(lèi)型,即 MessageDrivenBean。
  
  
    EJB 2.0 中的大量更改都集中在一種新 CMP 組件模型的定義中。它完全不同于舊的 CMP 模型,因?yàn)樗肓艘粋€(gè)全新的成員,即持久性治理器,并引入了全新的方式來(lái)定義容器治理的字段,以及定義這些字段與其它 bean 和從屬對(duì)象的關(guān)系。
  
  
    MessageDrivenBean (消息 bean)的引入也是非常重要的。消息 bean 體現(xiàn)出 JMS (Java Message Service)與 EJB 相集成,以創(chuàng)建出一種全新的 bean 類(lèi)型,它設(shè)計(jì)用來(lái)處理異步的 JMS 消息。這種振奮人心的新型 bean 為 JMS 客戶(hù)機(jī)提供一種組件模型,答應(yīng)將它們部署到 EJB 容器系統(tǒng)的豐富而強(qiáng)健的環(huán)境中去。
  
  
    對(duì)該規(guī)范還作了許多較小的其它更改。這些其它更改雖然也重要,但它們主要是涉及使該規(guī)范更嚴(yán)格,以便消除多義性,并使這些組件具有更高的可移植性。本文集中討論 EJB 2.0 中引入的新 CMP 和消息 bean 組件模型。
  
  
    我將提供幾個(gè)具體的例子,所以讀者應(yīng)該很輕易跟上并理解它。但是,EJB 初學(xué)者可能發(fā)現(xiàn)這個(gè)材料比較困難,因?yàn)樗俣ㄗx者已對(duì) EJB 有了基本的了解。有關(guān) EJB 的具體信息,請(qǐng)參閱參考資料。
  
  
    容器治理的持久性
  
  
    容器治理的持久性在 EJB 2.0 中發(fā)生了根本變化。在 EJB 2.0 中,持久性治理器在運(yùn)行時(shí)自動(dòng)處理 CMP 實(shí)體 bean 的持久性。持久性治理器負(fù)責(zé)根據(jù)一種稱(chēng)為抽象持久性方案的新的 bean 持久性治理器合約,將實(shí)體 bean 映射到數(shù)據(jù)庫(kù)。此外,持久性治理器還負(fù)責(zé)實(shí)現(xiàn)和執(zhí)行多種查找方法,這些查找方法均基于一種稱(chēng)為 EJB QL 的新型查詢(xún)語(yǔ)言。
  
  
    注重到以下事實(shí)是很重要的,即符合 EJB 2.0 規(guī)范的產(chǎn)品必須能支持 EJB 1.1 CMP 模型,又能支持新的 EJB 2.0 模型。雖然這兩種模型并不兼容,但是為了保證向后兼容性,就必須能支持 EJB 1.1 模型。
  
  
    抽象持久性方案
  
  
    為了理解抽象持久性方案是如何工作的,以及它為什么重要,我將為您快速地回顧一下在 EJB 1.1 中是如何處理 CMP 的,隨后再討論在 EJB 2.0 中如何定義它。
  
  
  EJB 1.1 中的 CMP 模型
  
  
    在 EJB 1.1 中,bean 開(kāi)發(fā)人員負(fù)責(zé)將 bean 類(lèi)的持久性字段聲明為 Java 基本類(lèi)型或可序列化類(lèi)型。下列示例顯示了一個(gè) Employee 企業(yè)級(jí) bean 類(lèi),它是按 EJB 1.1 定義的,帶有幾個(gè) CMP 字段:
  
  
    // Employee bean 類(lèi)
    public class EmployeeBean implements
    java.ejb.EntityBean {
    // 實(shí)例字段
    EntityContext ejbContext;
  
  
    file:// 容器治理的字段
    public int identity;
    public String firstName;
    public String lastName;
    public double salary;
    public Address address;
  
  
    public Integer ejbCreate(int id, String fname,String lname){
     identity = id;
     firstName = fname;
     lastName = lname;
     return null;
     }
     ...
    
     // Address 從屬類(lèi)
    public class Address implements Serializable{
    public String street;
    public String city;
    public String state;
    public String zip;
   }
  
  
    當(dāng)將關(guān)系數(shù)據(jù)庫(kù)用于持久性時(shí),基本字段如 identity、firstName、lastName 和 salary,很輕易持久化,因?yàn)樗鼈兒芎玫赜成錇?SQL 類(lèi)型,如 INTEGER、CHAR 和 DOUBLE。
  
  
    在 EJB 1.1 中,CMP bean 的 xml 部署描述符提供 cmp-field 元素,用以標(biāo)識(shí)此 bean 類(lèi)中的持久性字段(容器治理的字段)。如下所示,cmp-field 元素用來(lái)區(qū)分寫(xiě)入數(shù)據(jù)庫(kù)的字段和不寫(xiě)入數(shù)據(jù)庫(kù)的字段。例如,ejbContext 字段就不包括在容器治理的字段的列表中,因此它不是持久性字段。
  
  
    
    
    
    EmployeeEJB
      ...
    Container
  
  
    ...
    identity
  
  
    firstName
  
  
    lastName
  
  
    salary
  
  
    address
  
  
     ...
  
  
    容器提供者提供一種工具,用來(lái)將 bean 的持久性字段映射到數(shù)據(jù)庫(kù)表中的列,通常每個(gè) bean 對(duì)應(yīng)一個(gè)表。但是,可序列化的類(lèi)型,如 Address,就比較難于持久化。在 EJB 1.1 中,沒(méi)有標(biāo)準(zhǔn)的方法將可序列化的對(duì)象映射到關(guān)系數(shù)據(jù)庫(kù)。雖然 Address 類(lèi)有其自身的字段集,但 XML 部署描述符并沒(méi)有提供一種機(jī)制,來(lái)將這些字段映射到數(shù)據(jù)庫(kù)。在大多數(shù)情況下,人們期望將可序列化的對(duì)象(如 Address)作為二進(jìn)制類(lèi)型(有時(shí)稱(chēng)為 blob 類(lèi)型)持久化到某個(gè)數(shù)據(jù)庫(kù)表中。
  
  
    由于實(shí)體 bean 的數(shù)據(jù)方案逐漸復(fù)雜起來(lái),所以這個(gè)問(wèn)題也變得嚴(yán)重了。例如,Employee bean 可能有多個(gè)類(lèi)似于 Address 的子對(duì)象,如 Benefits 和 JobPosition。這些子對(duì)象稱(chēng)為從屬對(duì)象,可以形成關(guān)系數(shù)據(jù)庫(kù)中跨幾個(gè)表的復(fù)雜對(duì)象圖。另外,EJB 1.1 中的 CMP 在很大程度上不足以持久化與其它 bean 的關(guān)系。在 EJB 1.1 中,假如某個(gè) bean 預(yù)備維持與另一個(gè) bean 的關(guān)系,則容器會(huì)自動(dòng)將主要害字或句柄用作一個(gè)鏈接。與某些其它 bean 的關(guān)系其性質(zhì)可能是雙向的,或者要依靠于一些不易用主要害字或句柄來(lái)表示的字段,為了保持與這類(lèi) bean 的關(guān)系,上面的辦法已被證實(shí)是一種遠(yuǎn)未完善的機(jī)制。
  
  
    EJB 2.0 的 CMP 模型
  
  
    在 EJB 2.0 中,CMP 實(shí)體 bean 和持久性治理器之間的新合約,使您能夠在實(shí)體 bean 中定義更復(fù)雜的、可移植性更強(qiáng)的關(guān)系,包括 bean 與 bean 之間、bean 與從屬對(duì)象之間、甚至從屬對(duì)象與從屬對(duì)象之間的關(guān)系。
  
  
    持久性治理器是新加入到 Enterprise JavaBeans 部署過(guò)程中的。容器廠商,或?qū)iL(zhǎng)于特定數(shù)據(jù)庫(kù)的持久性的廠商,將能提供這種持久性治理器。其思路是將用于治理 bean 關(guān)系的機(jī)制從容器中分離出來(lái),容器只負(fù)責(zé)治理安全、事務(wù)和資源。這種職責(zé)上的分離使不同的持久性治理器能夠與不同的容器一起工作。它也使實(shí)體 bean 在不同 EJB 廠商之間以及在各種持久性治理器之間具有更強(qiáng)的可移植性。
  
  
    假如您使用或?qū)W習(xí)過(guò) Thought Inc. 生產(chǎn)的,能自動(dòng)為 EJB 1.1 容器生成 BMP(bean 治理的持久性)bean 的產(chǎn)品 CocoBase,則您對(duì)持久性治理器工具如何工作就已經(jīng)比較熟悉了。CocoBase 根據(jù) bean 部署者提供的,從對(duì)象到關(guān)系的映射信息,為 BMP bean 生成全部數(shù)據(jù)庫(kù)訪問(wèn)邏輯。在 EJB 2.0 中,持久性治理器能夠根據(jù)部署描述符、bean 的抽象持久性方案和部署者完成的工作所提供的信息,生成 CMP 實(shí)體到關(guān)系數(shù)據(jù)庫(kù)的映射。但是,持久性治理器并不局限于關(guān)系數(shù)據(jù)庫(kù)。也可以為對(duì)象數(shù)據(jù)庫(kù)以及遺留的系統(tǒng)和 ERP 系統(tǒng)(如 SAP)開(kāi)發(fā)持久性治理器。
    為了將持久性治理器從容器中分離出來(lái),必須定義 bean 與持久性治理器之間的合約。這個(gè)合約在新的抽象持久性方案中表現(xiàn)出來(lái)。此方案是通過(guò)部署描述符中一組新的 XML 元素和 CMP 實(shí)體 bean 中的一組代碼習(xí)語(yǔ)定義的。在 EJB 2.0 中,CMP bean 類(lèi)被聲明為抽象類(lèi),它的持久性字段和關(guān)系字段是使用抽象的讀方法和寫(xiě)方法來(lái)訪問(wèn)的,而這兩種方法的方法特征則映射為 XML 部署描述符中的特定元素。
  
  
    在部署該 bean 時(shí),您將使用持久性治理器工具,根據(jù) XML 部署描述符和 bean 類(lèi),來(lái)具體實(shí)現(xiàn)此抽象 bean 類(lèi)及其從屬對(duì)象類(lèi)。具體實(shí)現(xiàn)將包括數(shù)據(jù)訪問(wèn)代碼,此代碼將在運(yùn)行時(shí)將 bean 的狀態(tài)實(shí)際讀出和寫(xiě)到數(shù)據(jù)庫(kù)中。在運(yùn)行時(shí),容器使用由持久性治理器工具生成的子類(lèi),而不使用 bean 提供者定義的抽象類(lèi)。
  
  
    bean 類(lèi)的繼續(xù)層次結(jié)構(gòu)
  
  
    為了使討論更充實(shí),這里提供一個(gè) CMP 實(shí)體的示例,它更具體地說(shuō)明了抽象持久性方案是如何工作的。
  
  EJB 2.0 中的一個(gè)示例 CMP 實(shí)體
  
  
    在 EJB 2.0 中,容器治理的實(shí)體 bean 被定義為抽象的,而且它的持久性字段并不在 bean 類(lèi)中直接定義。作為替代,開(kāi)發(fā)了一種抽象的持久性方案,從而答應(yīng) bean 提供者間接地聲明持久性字段和 bean 關(guān)系。下面是 Employee bean 的一個(gè)示例,它使用了新的

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 长岛县| 昭觉县| 湖北省| 文昌市| 莱州市| 沈丘县| 赤峰市| 白沙| 周口市| 珠海市| 葵青区| 右玉县| 莱阳市| 上饶市| 开封市| 长海县| 隆德县| 楚雄市| 军事| 浏阳市| 敦化市| 西林县| 辽中县| 皮山县| 建水县| 尚志市| 洱源县| 石门县| 东方市| 淮滨县| 临城县| 包头市| 会宁县| 吴堡县| 嘉义县| 永济市| 横峰县| 南汇区| 蒙自县| 都安| 阿克苏市|