什么是EJB?
EJB 構(gòu)件用于封裝業(yè)務(wù)邏輯,使開(kāi)發(fā)人員無(wú)須再擔(dān)心數(shù)據(jù)訪問(wèn)、事務(wù)處理支持、安全性、高速緩存和迸發(fā)等瑣碎任務(wù)的編程。在 EJB 規(guī)范中,它們由 EJB 容器負(fù)責(zé)。EJB 包含接口和類。客戶端通過(guò) EJB 的本地接口和遠(yuǎn)程接口訪問(wèn) EJB 方法。本地接口提供的方法可用于生成、刪除和查找 EJB,遠(yuǎn)程接口則提供業(yè)務(wù)方法。部署時(shí),容器從這些接口生成類,這些類使客戶端可以訪問(wèn)、生成、刪除、查找和調(diào)用 EJB 上的業(yè)務(wù)方法。EJB 類為業(yè)務(wù)方法、生成方法和查找方法提供實(shí)施,如果 Bean 管理自己的存儲(chǔ),還得提供生成生命周期方法的實(shí)施。
EJB 共有三種類型:EntityBean(實(shí)體 Bean)、Session Bean(會(huì)話 Bean)和 Message Driven Bean(消息驅(qū)動(dòng) Bean),下面分別說(shuō)明。
(1)實(shí)體 Bean。實(shí)體 Bean 表示數(shù)據(jù)庫(kù)中的數(shù)據(jù)及作用于數(shù)據(jù)的方法。在關(guān)系型數(shù)據(jù)庫(kù)中,表中的每一行就是一個(gè) Bean 的實(shí)例。實(shí)體 Bean 是具有持久性的事務(wù)處理型 EJB,只要數(shù)據(jù)存在于數(shù)據(jù)庫(kù)中,實(shí)體 Bean 就存在。
用容器管理的持久性訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)的 EJB,不需要為數(shù)據(jù)庫(kù)訪問(wèn)使用任何 JDBC API,因?yàn)槿萜骺梢载?fù)責(zé)完成這項(xiàng)任務(wù)。但是,如果使用 Bean 管理的持久性或想訪問(wèn)關(guān)系數(shù)
據(jù)庫(kù)以外的企業(yè)信息系統(tǒng),就需要提供相應(yīng)的程序代碼才能完成。但是如果 EJB 使用 Bean 管理的持久性訪問(wèn)數(shù)據(jù)庫(kù),用戶必須借助于 JDBC API 實(shí)施 Bean 生命周期方法,這樣才能加載和保存數(shù)據(jù),并保持運(yùn)行和持久數(shù)據(jù)庫(kù)存儲(chǔ)之間的一致性。
(2)會(huì)話 Bean。會(huì)話 Bean 代表與客戶間的短暫對(duì)話。在執(zhí)行數(shù)據(jù)庫(kù)讀寫時(shí),會(huì)話 Bean 可以請(qǐng)求 JDBC 調(diào)用,也可以使用實(shí)體 Bean 執(zhí)行調(diào)用,這時(shí)會(huì)話 Bean 是實(shí)體 Bean 的客戶端。會(huì)話 Bean 的字段中包含對(duì)話的狀態(tài),如果服務(wù)器或客戶端出現(xiàn)故障,會(huì)話 Bean 將消失。
會(huì)話 Bean 可以有狀態(tài),也可以無(wú)狀態(tài)。有狀態(tài)會(huì)話 Bean 包含客戶端方的對(duì)話狀態(tài),對(duì)話狀態(tài)是會(huì)話 Bean 實(shí)例的字段值加上可以從會(huì)話 Bean 字段閱讀的所有對(duì)象。有狀態(tài)的會(huì)話 Bean 不表示持久數(shù)據(jù)庫(kù)中的數(shù)據(jù),但能夠以客戶端的名義訪問(wèn)和更新數(shù)據(jù)。
無(wú)狀態(tài)會(huì)話 Bean 沒(méi)有客戶端的任何狀態(tài)信息。它們一般不提供保留任何狀態(tài)的服務(wù)器行為。無(wú)狀態(tài)會(huì)話 Bean 需要的系統(tǒng)資源較少。提供通用服務(wù)或表示共享數(shù)據(jù)視圖的業(yè)務(wù)對(duì)象適合作為無(wú)狀態(tài)的會(huì)話 Bean。
(3)消息驅(qū)動(dòng) Bean。EJB2.0 規(guī)范中的消息驅(qū)動(dòng) Bean 能處理從 JMS 消息隊(duì)列接收到的異步消息。JMS 將消息路由到消息驅(qū)動(dòng) Bean,由消息驅(qū)動(dòng) Bean 從池中選擇某個(gè)實(shí)例處理消息。
消息驅(qū)動(dòng) Bean 在 EJB 容器中管理。由于它們不是由用戶的應(yīng)用直接調(diào)用的,因此不能借助 EJB 本地接口從應(yīng)用進(jìn)行訪問(wèn)。但是,用戶的應(yīng)用可以將消息發(fā)送到 Bean 所監(jiān)聽(tīng)的 JMS 隊(duì)列中,以此來(lái)實(shí)例化消息驅(qū)動(dòng) Bean。
總結(jié)
- 上一篇: C语言 打印杨辉三角
- 下一篇: 3道题彻底搞定:套路解决递归问题