EJB (Enterprise JavaBean)是J2EE的一部分,定義了一個(gè)用于開(kāi)發(fā)基于組件的企業(yè)多重應(yīng)用程序的標(biāo)準(zhǔn)。其特點(diǎn)包括網(wǎng)絡(luò)服務(wù)支持和核心開(kāi)發(fā)工具(SDK)。
在J2EE里,Enterprise Java Beans(EJB)稱(chēng)為Java 企業(yè)Bean,是Java的核心代碼,分別是會(huì)話Bean(Session Bean),實(shí)體Bean(Entity Bean)和消息驅(qū)動(dòng)Bean(MessageDriven Bean)。
1.Session Bean用于實(shí)現(xiàn)業(yè)務(wù)邏輯,它可以是有狀態(tài)的,也可以是無(wú)狀態(tài)的。每當(dāng)客戶(hù)端請(qǐng)求時(shí),容器就會(huì)選擇一個(gè)Session Bean來(lái)為客戶(hù)端服務(wù)。Session Bean可以直接訪問(wèn)數(shù)據(jù)庫(kù),但更多時(shí)候,它會(huì)通過(guò)Entity Bean實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)。
2.Entity Bean是域模型對(duì)象,用于實(shí)現(xiàn)O/R映射,負(fù)責(zé)將數(shù)據(jù)庫(kù)中的表記錄映射為內(nèi)存中的Entity對(duì)象,事實(shí)上,創(chuàng)建一個(gè)Entity Bean對(duì)象相當(dāng)于新建一條記錄,刪除一個(gè)Entity Bean會(huì)同時(shí)從數(shù)據(jù)庫(kù)中刪除對(duì)應(yīng)記錄,修改一個(gè)Entity Bean時(shí),容器會(huì)自動(dòng)將Entity Bean的狀態(tài)和數(shù)據(jù)庫(kù)同步。
3.MessageDriven Bean是EJB2.0中引入的新的企業(yè)Bean,它基于JMS消息,只能接收客戶(hù)端發(fā)送的JMS消息然后處理。MDB實(shí)際上是一個(gè)異步的無(wú)狀態(tài)Session Bean,客戶(hù)端調(diào)用MDB后無(wú)需等待,立刻返回,MDB將異步處理客戶(hù)請(qǐng)求。這適合于需要異步處理請(qǐng)求的場(chǎng)合,比如訂單處理,這樣就能避免客戶(hù)端長(zhǎng)時(shí)間的等待一個(gè)方法調(diào)用直到返回結(jié)果。
EJB實(shí)際上是SUN的J2EE中的一套規(guī)范,并且規(guī)定了一系列的API用來(lái)實(shí)現(xiàn)把EJB概念轉(zhuǎn)換成EJB產(chǎn)品.EJB是BEANS,BEANS是什么概念,那就是得有一個(gè)容納她,讓她可勁造騰的地方,就是得有容器.EJB必須生存在EJB容器中.這個(gè)容器可是功能強(qiáng)大之極!她首先要包裝你BEAN,EJB的客戶(hù)程序?qū)嶋H上從來(lái)就不和你編寫(xiě)的EJB直接打交道,他們之間是通過(guò)HOME/REMOTE接口來(lái)發(fā)生關(guān)系的.它負(fù)責(zé)你的BEAN的所有的吃喝拉薩睡,比如BEAN的持續(xù)化,安全性,事務(wù)管理...
一.什么是 EJB?
一個(gè)技術(shù)規(guī)范:EJB 從技術(shù)上而言不是一種"產(chǎn)品"
EJB 是一種標(biāo)準(zhǔn)描述了構(gòu)建應(yīng)用組件要解決的:
可擴(kuò)展 (Scalable)
分布式 (Distributed)
事務(wù)處理 (Transactional)
數(shù)據(jù)存儲(chǔ) (Persistent)
安全性 (Secure)
二.Sun 對(duì) EJB 的期望
提供一個(gè)標(biāo)準(zhǔn)的分布的、基于 OO 的組件架構(gòu)
屏蔽復(fù)雜的系統(tǒng)級(jí)功能需求
Write once, run anywhere
與非 Java 應(yīng)用之間的互操作能力
兼容 CORBA 標(biāo)準(zhǔn)
三.為什么選擇 EJB?
EJB 服務(wù)器完成"繁雜"的工作:
應(yīng)用開(kāi)發(fā)人員關(guān)注于業(yè)務(wù)邏輯的實(shí)現(xiàn)而不是底層的實(shí)現(xiàn)機(jī)制(類(lèi)似于4GL 語(yǔ)言設(shè)計(jì)的目標(biāo))
支持事務(wù)處理
多個(gè)業(yè)務(wù)操作同時(shí)成功,或全部失敗
可以通過(guò)在代碼外的描述來(lái)定義事務(wù)處理級(jí)別
可擴(kuò)展性
EJB 可以根據(jù)您應(yīng)用的增長(zhǎng)而擴(kuò)展
EJB 服務(wù)器往往還提供了負(fù)載均衡和
安全性:由 EJB 服務(wù)器提供資源的訪問(wèn)權(quán)限控制
四.EJB 架構(gòu)
為了滿(mǎn)足架構(gòu)的目標(biāo),規(guī)范中描述了
服務(wù)器 (Server)
容器 (Container)
類(lèi) (Class) 和實(shí)例 (Instance)
Home 和 Remote 接口
客戶(hù)端 (Client)
五. 簡(jiǎn)化的編程模型
關(guān)注于業(yè)務(wù)邏輯實(shí)現(xiàn):EJB 負(fù)責(zé)生命周期 (lifecycle), 數(shù)據(jù)存儲(chǔ) (persistence), 事務(wù)處理語(yǔ)義 (transactional semantic), 安全(security), ...
通用的編程模型:各種服務(wù)的高層 API
Java 是其編程語(yǔ)言
EJB(業(yè)務(wù)邏輯代碼)表示了與特定商業(yè)領(lǐng)域(例如銀行、零售等行業(yè))相適應(yīng)的邏輯。它由運(yùn)行在業(yè)務(wù)邏輯層的 enterprise bean 處理。一個(gè) enterprise bean 可以從客戶(hù)端接受數(shù)據(jù),對(duì)它進(jìn)行處理,并將其發(fā)送到企業(yè)信息系統(tǒng)層以作存儲(chǔ);同時(shí)它也可以從存儲(chǔ)器獲取數(shù)據(jù),處理后將其發(fā)送到客戶(hù)端應(yīng)用程序。
有三種類(lèi)型的 enterprise beans:session beans、entity beans 和 message-driven beans。Session bean 描述了與客戶(hù)端的一個(gè)短暫的會(huì)話。當(dāng)客戶(hù)端的執(zhí)行完成后,session bean和它的數(shù)據(jù)都將消失;與之相對(duì)應(yīng)的是一個(gè)entity bean描述了存儲(chǔ)在數(shù)據(jù)庫(kù)表中的一行持久穩(wěn)固的數(shù)據(jù),如果客戶(hù)端終止或者服務(wù)結(jié)束,底層的服務(wù)會(huì)負(fù)責(zé) entity bean 數(shù)據(jù)的存儲(chǔ)。
Message-driven bean 結(jié)合了 session bean 和 Java 信息服務(wù)(JMS)信息監(jiān)聽(tīng)者的功能,它允許一個(gè)商業(yè)組件異步地接受 JMS 消息。