您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)如何使用EJB3.0,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
什么是EJB?
一個(gè)企業(yè)JavaBean (EJB)是一個(gè)可重用的,可移植的J2EE組件。 EJB由封裝了業(yè)務(wù)邏輯的多個(gè)方法組成。例如,一個(gè)EJB可以有包括一個(gè)更新客戶(hù)數(shù)據(jù)庫(kù)中數(shù)據(jù)的方法的業(yè)務(wù)邏輯。多個(gè)遠(yuǎn)程和本地客戶(hù)端可以調(diào)用這個(gè)方法。另外,EJB運(yùn)行在一個(gè)容器里,允許開(kāi)發(fā)者只關(guān)注與bean中的業(yè)務(wù)邏輯而不用考慮象事務(wù)支持,安全性和遠(yuǎn)程對(duì)象訪問(wèn)等復(fù)雜和容易出錯(cuò)的事情。EJB以POJO或者普通舊的Java對(duì)象形式開(kāi)發(fā),開(kāi)發(fā)者可以用元數(shù)據(jù)注釋來(lái)定義容器如何管理這些Bean。
EJB類(lèi)型
EJB主要有三種類(lèi)型:會(huì)話Bean,實(shí)體Bean和消息驅(qū)動(dòng)Bean。會(huì)話Bean完成一個(gè)清晰的解耦的任務(wù),例如檢查客戶(hù)賬戶(hù)歷史記錄。實(shí)體Bean是一個(gè)代表存在于數(shù)據(jù)庫(kù)中業(yè)務(wù)對(duì)象的復(fù)雜業(yè)務(wù)實(shí)體。消息驅(qū)動(dòng)Bean用于接收異步JMS消息。讓我們更詳細(xì)的認(rèn)識(shí)這些類(lèi)型。
會(huì)話Bean
會(huì)話Bean一般代表著業(yè)務(wù)流程中象"處理訂單"這樣的動(dòng)作。會(huì)話Bean基于是否維護(hù)過(guò)度狀態(tài)分為有狀態(tài)或者無(wú)狀態(tài)。無(wú)狀態(tài)會(huì)話Bean 沒(méi)有中間狀態(tài)。它們不保持追蹤一個(gè)方法調(diào)用另一個(gè)方法傳遞的信息。因此一個(gè)無(wú)狀態(tài)業(yè)務(wù)方法的每一次調(diào)用都獨(dú)立于它的前一個(gè)調(diào)用;例如,稅費(fèi)計(jì)算或者轉(zhuǎn)移賬款。 當(dāng)計(jì)算稅費(fèi)額的方法被調(diào)用時(shí),稅費(fèi)值被計(jì)算并返回給調(diào)用的方法,沒(méi)有必要存儲(chǔ)調(diào)用者為將來(lái)調(diào)用備用的內(nèi)部狀態(tài)。因?yàn)樗鼈儾痪S護(hù)狀態(tài),所以這些Bean是僅僅由容器管理。當(dāng)客戶(hù)端請(qǐng)求一個(gè)無(wú)狀態(tài)的Bean實(shí)例時(shí),它可以接收來(lái)自由容器管理的無(wú)狀態(tài)會(huì)話Bean實(shí)例集中的一個(gè)實(shí)例。也因?yàn)闊o(wú)狀態(tài)會(huì)話Bean能夠被共享,所以容器可以維護(hù)更少數(shù)量的實(shí)例來(lái)為大量的客戶(hù)端服務(wù)。簡(jiǎn)單地象該Bean增加元注釋@Stateless 來(lái)指定一個(gè) Java Bean作為一個(gè)無(wú)狀態(tài)會(huì)話Bean被部署和管理。
一個(gè)有狀態(tài)的會(huì)話Bean維護(hù)一個(gè)跨越多個(gè)方法調(diào)用的會(huì)話狀態(tài);例如在線購(gòu)物籃應(yīng)用。當(dāng)客戶(hù)開(kāi)始在線購(gòu)物時(shí),客戶(hù)的詳細(xì)信息從數(shù)據(jù)庫(kù)獲得。相同的信息對(duì)于當(dāng)客戶(hù)從購(gòu)物籃中增加或者移除商品等等操作時(shí)被調(diào)用的其他方法也是可訪問(wèn)的 。但是因?yàn)樵摖顟B(tài)不是在會(huì)話結(jié)束,系統(tǒng)崩潰或者網(wǎng)絡(luò)失敗時(shí)保留,所以有狀態(tài)會(huì)話Bean是暫時(shí)的。當(dāng)一個(gè)客戶(hù)端請(qǐng)求一個(gè)有狀態(tài)會(huì)話Bean實(shí)例時(shí),客戶(hù)端將會(huì)得到一個(gè)會(huì)話實(shí)例,該Bean的狀態(tài)只為給客戶(hù)端維持。通過(guò)向方法增加元注釋@Remove來(lái)告訴容器當(dāng)某個(gè)方法調(diào)用結(jié)束一個(gè)有狀態(tài)會(huì)話Bean實(shí)例應(yīng)該被移除。會(huì)話Bean實(shí)例
|
實(shí)體Bean
實(shí)體Bean是管理持久化數(shù)據(jù)的一個(gè)對(duì)象,潛在使用一些相關(guān)的Java對(duì)象并且可以依靠主鍵被***識(shí)別。通過(guò)包括@Entity 元注釋來(lái)指定一個(gè)類(lèi)是一個(gè)實(shí)體Bean。實(shí)體Bean表示來(lái)自數(shù)據(jù)庫(kù)的持久化數(shù)據(jù),例如客戶(hù)表中的一個(gè)紀(jì)錄,或者一個(gè)員工表中的一個(gè)員工記錄。實(shí)體Bean也可以被多個(gè)客戶(hù)端共享。例如一個(gè)員工實(shí)體能夠被多個(gè)計(jì)算一個(gè)員工每年工資總額或者更新員工地址的客戶(hù)端使用。實(shí)體Bean對(duì)象特定變量能夠保持持久化。實(shí)體Bean中所有沒(méi)有@Transient 元注釋的變量需要考慮持久化。EJB3.0的一個(gè)主要特色是創(chuàng)建包含使用元數(shù)據(jù)注釋的對(duì)象/關(guān)系映射實(shí)體Bean的能力。例如,指定實(shí)體Bean的empId變量映射到employee表中的EMPNO屬性,象下面實(shí)例中一樣用@Table(name="Employees") 注釋這個(gè)表的名字和用@Column(name="EMPNO")注釋empId變量。另外,EJB3.0中的一個(gè)特色是你可以很容易的在開(kāi)發(fā)時(shí)測(cè)試實(shí)體Bean,可以用Oracle Application Server Entity Test Harness在容器外部運(yùn)行一個(gè)實(shí)體Bean。
|
消息驅(qū)動(dòng)Bean
驅(qū)動(dòng)Bean (MDB) 提供了一個(gè)實(shí)現(xiàn)異步通信比直接使用Java消息服務(wù)(JMS)更容易地方法。創(chuàng)建MDB接收異步JMS消息。容器處理為JMS隊(duì)列和主題所要求加載處理的大部分工作。它向相關(guān)的MDB發(fā)送所有的消息。一個(gè)MDB允許J2EE應(yīng)用發(fā)送異步消息,該應(yīng)用能處理這些消息。實(shí)現(xiàn)javax.jms.MessageListener接口和使用@MessageDriven注釋該Bean來(lái)指定一個(gè)Bean是消息驅(qū)動(dòng)Bean。
|
使用EJB
客戶(hù)端是訪問(wèn)Bean的應(yīng)用程序。雖然沒(méi)有必要保存在客戶(hù)層,但是能夠作為一個(gè)獨(dú)立的應(yīng)用,JSP,Servlet,或者另一個(gè)EJB。客戶(hù)端通過(guò)Bean的遠(yuǎn)程或者本地接口訪問(wèn)EJB中的方法,主要取決于客戶(hù)端和Bean運(yùn)行在同一個(gè)還是不同的JVM中。這些接口定義了Bean中的方法,而由Bean類(lèi)實(shí)際實(shí)現(xiàn)這些方法。當(dāng)一個(gè)客戶(hù)端訪問(wèn)該Bean類(lèi)中的一個(gè)方法時(shí),容器生成Bean的一個(gè)代理,被叫做遠(yuǎn)程對(duì)象或者本地對(duì)象。遠(yuǎn)程或者本地對(duì)象接收請(qǐng)求,委派它到相應(yīng)的Bean實(shí)例,返回結(jié)果給客戶(hù)端。調(diào)用一個(gè)Bean中的方法,客戶(hù)端使用定義在EJB不是描述文件的名字查找到Bean。在以下實(shí)例中,客戶(hù)端使用上下文對(duì)象找到命名為"StateLessejb"Bean。
EJB 客戶(hù)端實(shí)例
import javax.naming.Context; import javax.naming.InitialContext; /** * A simple bean client which calls methods on a stateless session bean. */ public class CalculateejbClient { public static void main(String [] args) { Context context = new InitialContext(); CalculateEJB myejb = (CalculateEJB)context.lookup("java:comp/env/ejb/CalculateEJB"); myejb.incrementValue(); } } |
關(guān)于“如何使用EJB3.0”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。