跳至內容

EJB

出自Taiwan Tongues 台語維基
這是此頁批准,以及是最近的修訂。

企業級 JavaBean(Enterprise JavaBean ,EJB)是一个用來構築企業級應用的侍服器捀會當予管理組件。

Java 企業版 API(Java Enterprise Edition)著提供矣著 EJB 的規範。EJB 是一个封裝有佗一个應用程式點心邏輯侍服器捀組件。EJB 上早為一九九七年由 IBM 提出,旋即被昇陽電腦採用並形成標準(EJB 一孵零佮 EJB 一孵一)。 其後佇 Java 社群行程(Java Community Process)支援下陸續有一寡 JSR 予人制定來定義新的 EJB 標準,分別是 JSR 十九 ( EJB 二孵空 ) , JSR 一百五十三 ( EJB 二嬸一 ) 猶閣有上新的 JSR 兩百二十 ( EJB 三-c零 )。

EJB 規範的目的是佇咧為企業佮應用開發人員實現後台業務提供一个標準的方式,從而解決一寡此前總是佇咧作業的過程內底總是重複發生的問題。EJB 用一个標準方式自動處理著諸如資料持久化,事務整合,安全對策等無仝應用的共有問題,予軟體開發人員會當專注佇程式的特定需求而無閣再飽受遐的非業務元素的困擾。

根據這个,EJB 規範明確矣一个應用侍服器應當支援的中央管理斟酌目,包括講:

  • 資料持久化
  • 事務處理
  • 並行控制
  • 是因為 JMS 的事件驅動
  • 是因為 JNDI 的名佮空間管理
  • 是因為 JCE 和 JAAS 的安全管理
  • 應用侍服器捀的軟體組件部署
  • 使用 RMI-IIOP 協定的遠端程序呼叫
  • 將業務方法暴露做 Web 服務此外,EJB 定義文件閣指定矣 EJB 容器佮各 EJB 的角色定位,閣有按怎共 EJB 部署到位 EJB 容器當中。

歷史

對相攬來放捒

因為 IBM 和 Sun Microsystems 等 EJB 提倡者力捒其前景,頭先的一寡大公司紛紛採用 EJB 部署𪜶的系統。毋過隨後各種問題往過磅空來,著 EJB 的惡評短時間內激增。對初學者,EJB 的 API 顯得傷過困難;對著濟濟程式的設計師來講,書寫彼著愛跋位特定異常的介面並將 bean 類似做抽象類實現的做法既然無直觀嘛無正常。當然喔,EJB 所予伊有的使命,親像物件關係對映佮事務管理有影是有其天然複雜性,猶毋過其 API 複雜猶是予人開發的人員感覺望而步,一寡人開始懷疑 EJB 除了引入著複雜的實現手段以外敢若並無帶來啥實際好處。

另外咧,實際運用中被發現,若使用 EJB 來封裝業務邏輯會帶來效能頂懸的下降。這是因為,上早的啊 EJB 規範干焦允准客戶捀通過特定協定(如 CORBA)進行遠端方法呼叫來呼叫,即使大部份實際應用根本就無需要分散式計算。一直到 EJB 二鋪空才引入了本地介面,來支援會當開發袂通過網路就會當直接本地呼叫的 EJB 系統。

就算講按呢,EJB 的廣泛普及猶原為其複雜度所制約。就算講已經有一寡高品質的整合開發工具會當協助開發人員通過自動編碼解決一部份重複作業,但是這並袂當降低學習這項技術的難度。另外一方面,「 草根階層」的編程愛好者發起了一場旨咧使用「輕量級」技術以代替複雜的 EJB 的運動。遮的技術包括 Hibernate(用佇提供資料誠久矣和物件-關係對映)佮 Spring 框架(用佇咧封裝業務邏輯)。 做你共𪜶無成 EJB 彼有巨頭支援,毋過其在庶民間煞更加流行,並且嘛予一寡著 EJB 深感失望的企業所採用。

重生

EJB 規範頭起先的一个主要價值—從分散式應用進行事務管理—佇隨後的實踐中予人一致認為講強欲無法度上用場。對企業級應用來講,Spring 和 Hibernate 等等簡化框架更加實用。所以,EJB 三更零規範(JSR 兩百二十)為著迎合這个趨勢比其他的前輩進行一擺激進行的大跳跳。受著 Spring 影響,EJB 三更零也使用所謂的「傳統簡單 Java 東西(POJO)」;同時,支援依賴注入來簡化全異系統的整合佮組態。Hibernate 的創始人 Gavin King 參與了這一新版規範的制訂,並著 EJB 大加提倡。Hibernate 的濟濟特性嘛予引入到 Java 維持久化 API 當中,對取代原來的實體 bean。EJB 三更零規範大幅採用 Java 註解(annotation)來對代碼進行元資料修飾,從而消減了此前 EJB 編程的雜差仔。

相應的喔,EJB 三更零差不多成做一个全新的 API,佮此前的數版會當算講無相𫝛。

EJB 種類

EJB 容器會當接受三類 EJB

  • 對談 Bean(Session Beans)
  • 無狀態對談 Bean(Stateless Session Beans)
  • 有狀態對談 Bean(Stateful Session Beans)
  • 實體 Bean(Entity Beans)
  • 訊息驅動 Bean(Message Driven Beans,MDBs)

無狀態對談 Bean 是一類無包含狀態資訊的分散式物件,允准來自數個客戶捀的閣行存取。實例變數的內容佇前後幾若改呼出中不被保留(確切講是無保證保留)。 因為毋免控制佮使用者間的對話資訊來減少囉開銷,無狀態對談 Bean 無像有狀態對談 Bean 彼款有資源集約性。比如講伊,一个傳送郵件的 EJB 就會當予人設計做一个無狀態對談 Bean。咧規个對談期,使用者干焦向侍服器提交一个動作:傳送指定郵件到指定位址。(號做開關行為)

有狀態對談 Bean 是包含狀態的分散式物件,就是講,貫穿規个對談𪜶攏愛有保持客戶捀的資訊。來比例來講,佇一个網路頂頭商店來進行實施結數真可能就需要一个有狀態對談 Bean,因為結數是一个偌步動作,侍服器捀著愛隨時了解著使用者已經進行到佗一步。此外,就算講有狀態對談 Bean 的狀態資訊會當保持,毋過始終只會當由仝一个使用者來存取之。

實體 Bean 是有久化狀態的分散式物件。這个維持久化狀態的管理既然會當交予 Bean 自身(Bean-Managed Persistence,BMP), 嘛會當交外部的機制(Container-Managed Persistence,CMP)。

訊息驅動 Bean 是支援非同步行為的分散式物件。𪜶並毋著請求進行彼當陣共應。可比講,某網站使用者點擊「請通知我更新資訊」揤鈕,將會摸著某一个 MDB 共這个使用者加入資料庫的向望得著更加新的資訊使用者列表中。這个動作就是一个非同步的訊息驅動過程,因為使用者毋免等待彼陣會倒轉來某一个結果。MDB 的訊息源源來自 Java 訊息服務(JMS)提供的訊息佇咧列訊息的主題。自 EJB 二鋪零規範起,JMS 予人加入來以允准佇容器內部實施事件驅動處理。佮其他 EJB 無仝,MDB 不存在一個使用者視圖(需要使用者參照的遠端介面), 使用者嘛袂當通過資源的定位得著一个 MDB 實例。MDB 只佇後台監聽訊息源閣實施自動處理。

除了喝以外,目前閣有一寡 EJB 佇遐設想階段,如 JSR 八十六提出矣用於在 Java EE 應用中整合多媒體物件的媒體 Bean(Enterprise Media Beans)。

EJB 實行

EJB 部署應用侍服器捀的 EJB 容器當中。規範予定矣 EJB 佮 EJB 容器之間,猶閣有使用者代碼佮 EJB / EJB 容器之間的互動方式。對於 Java EE API,javax . ejb 包定義矣 EJB 類,javax . ejb . spi 包定義矣 EJB 容器應當實現的逐个介面。

佇咧 EJB 二孵一佮較早的版本內底,彼每一个 EJB 攏由一个類和兩个介面組成。EJB 容器負責建立這个類別的實例,介面是供客戶捀呼叫。

兩个介面分別予人稱做 Home 介面和組件介面,負責提供逐个 EJB 遠端方法聲明。這是 EJB 遠端方法會當分做兩組:

  • 類別方法:由 Home 介面提供。佮特定實例無關係,干焦負責一寡公共內容,譬如講建立一个新的 EJB 實例(create 方法), 抑是走揣一个已經存在的 EJB 實例(find 方法)等咧。
  • 介面方法:由組件介面提供的針對特定實例的業務方法。

EJB 容器將為遮的介面提供對應的實現類以充當客戶遠端代理,做客戶捀呼叫這生成的代理類的某一个方法的時,代理類內部會將這此呼叫的方法佮參數封裝做一个訊息傳來傳送予侍服器。侍服器收著訊息了後佇遮轉予真實的 EJB 實例,後者負責執行真正的業務邏輯。

遠端通信

EJB 規範要求 EJB 容器閣會當支援是因為 RMI-IIOP 的 EJB 存取。EJB 既可被任何 CORBA 應用存取,嘛會用得提供 Web 服務。

事務

EJB 容器著愛支援符合 ACID(原子性/一致性/獨立性/永續性)特性的容器級事務管理,以及 bean 內部事務管理。容器級的事務需要佇部署來講符仔(EJB 應用的設定檔)做聲明。

事件

EJB 使用 JMS 向客戶物件傳送的訊息,客戶會當非同步接受遮的訊息。MDB 是接受自客戶捀的訊息。

號名和 kha-tá-lok-guh 服務

EJB 客戶捀使用 JNDI 抑是 CORBA 名服務定位 Home 介面實現物件。通過遮 Home 介面,使用者閣會當走揣,建立抑是刪除實體的物件。

安全

EJB 容器對客戶捀的存取權限負責。

部署 EJB

EJB 規範閣定義一个迒平台統一部署機制。部署是咧講符仔中定義有關於 EJB 應用的一切相關的內容。檔名通常為著 ejb-jar . xml。

部署描述符仔是一个 XML 文件,負責為該 EJB 應用中的每一个 EJB 定義入口。部署描述符仔的主要內容包括:

  • Home 介面名
  • Bean 的 Java 類別名
  • Home 介面的 Java 介面名
  • 組件介面的 Java 介面名
  • 提久化儲存(針對實體 Bean)
  • 安全策略佮角色的分配通常 EJB 容器提供者猶閣定義一寡加額的 XML 抑是其他格式來描述檔案來強化其容器的功能。𪜶猶同時提供遮的描述檔案的解讀工具類和對 Home 介面的自動實現類生成。

EJB 三樸零起開始講法使用 Java 注釋替代傳統的部署描述符仔 ejb-jar . xml。但是後者猶是有效。

版本變化

EJB 三-c零

二空空六年五月二號發布,JSR 兩百二十定義。

  • 全面採用 Java 注釋代替部署描述符仔。(後者猶是會使用,並且有閣較高優先級)
  • 共兩 . X 版的 EntityBean 改做是由 JPA 支援。

EJB 二嬸一

二空空三年十一月二四發布,JSR 一百五十三定義。

  • Web 服務:有可將無狀態對談 bean 暴露為 Web 服務;EJB 會當過參照存取 Web 服務。
  • EJB 定時器服務:提供一種新的因為定時器的事件驅動方式。會當供訊息驅動 bean 做訊息源使用。
  • 增加訊息的所在。
  • 進一步豐富矣 EJB 查詢語言,支援 ORDER BY , AVG , MIN , MAX , SUM , COUNT 和 MOD。
  • 使用 XML schema 代替 DTD 以定義部署來講符仔。

EJB 二孵空

二空空一年八月二二發布,JSR 十九定義。

  • 制定矣構建物件導向商務應用的標準組建結構。
  • 支援構築使用無仝開發工具所開發之組件的聯合應用部署。
  • 在多執行緒,連接池,事務管理等方面對使用者透明化。
  • 使符合「一改寫做,濟擺執行」的 Java 思想。
  • 關注企業級應用性命期間的開發,部署,執行等等的動作。
  • 定義無仝款開發工具所需要遵守的契約,通好用產品咧執行期互動。
  • 支援佮現行系統相容,開發者會當擴充現有產品會當使支援 EJB。
  • 佮其他 Java API 相容。
  • 支援 EJB 佮 Java 二平台企業版抑是其他非 Java 應用程式之間的互操作性。
  • 支援佮 CORBA 相容的 RMI-IIOP。

EJB 一孵一

一九九九年十二月十七號發布。

  • 開始採用 XML 部署描述符仔,預設的 JNDI 上下文佮支援 IIOP 的 RMI。
  • 安全機制由角色(Role)驅動,啊若非方法。
  • 支援實體類,而且著愛佇咧應用中實現。

EJB 一垺零

一九九八年三月二四發布。

  • 定義矣 EJB 和 EJB 容器的作用,實現佮互動。
  • 提供了上早的開發者佮使用者視圖。