10.EBJ知識點總結

1.EJB是基於哪些技術實現的?並說出SessionBean和EntityBean的區別,StatefulBean和StatelessBean的區別。

    EJB包括Session Bean、Entity Bean、Message Driven Bean,基於JNDI、RMI、JAT等技術實現。

SessionBean在J2EE應用程序中被用來完成一些服務器端的業務操作,例如訪問數據庫、調用其他EJB組件。EntityBean被用來代表應用系統中用到的數據。

對於客戶機,SessionBean是一種非持久性對象,它實現某些在服務器上運行的業務邏輯。

對於客戶機,EntityBean是一種持久性對象,它代表一個存儲在持久性存儲器中的實體的對象視圖,或是一個由現有企業應用程序實現的實體。

Session Bean 還可以再細分爲 Stateful Session Bean 與 Stateless SessionBean ,這兩種的 Session Bean都可以將系統邏輯放在 method之中執行,不同的是 Stateful Session Bean 可以記錄呼叫者的狀態,因此通常來說,一個使用者會有一個相對應的 Stateful Session Bean 的實體。Stateless SessionBean 雖然也是邏輯組件,但是他卻不負責記錄使用者狀態,也就是說當使用者呼叫 Stateless SessionBean 的時候,EJB Container 並不會找尋特定的Stateless Session Bean 的實體來執行這個 method。換言之,很可能數個使用者在執行某個 Stateless Session Bean 的 methods 時,會是同一個 Bean 的 Instance 在執行。從內存方面來看, Stateful Session Bean 與 Stateless SessionBean 比較, Stateful Session Bean 會消耗 J2EE Server 較多的內存,然而 Stateful Session Bean 的優勢卻在於他可以維持使用者的狀態。

2.簡要概述ejb的7個TransactionLevel

REQUIRED 如果存在一個事務,則支持當前事務。如果沒有事務則開啓一個新的事務。

SUPPORTS 如果存在一個事務,支持當前事務。如果沒有事務,則非事務的執行。但是對於事務同步的事務管理器,PROPAGATION_SUPPORTS與不使用事務有少許不同。

MANDATORY 如果已經存在一個事務,支持當前事務。如果沒有一個活動的事務,則拋出異常。

REQUIRES_NEW 總是開啓一個新的事務。如果一個事務已經存在,則將這個存在的事務掛起。

NOT_SUPPORTED 總是非事務地執行,並掛起任何存在的事務。

NEVER 總是非事務地執行,如果存在一個活動事務,則拋出異常

NESTED如果一個活動的事務存在,則運行在一個嵌套的事務中. 如果沒有活動事務, 則按REQUIRED 屬性執行

或:

先把那 7 個名字翻譯成漢語,再琢磨那7 個名字:

mandatory: 必須,表示調用者 A 調用 B 時 A 必須已經開啓了事務。如果沒有就報錯。
required: 表示,反正 B 需要有個事務,如果調用者 A 沒有提供就啓動一個新的,如果已經有就直接用人家的。
requiresNew: 不管人家有沒有,每次我都開啓一個新的,比如我是來做日誌的,不管人家事務成功還是回滾,我自己的事務都應該提交。
NotSupported: 不支持,表示不管人家A 有沒有,我反正幹活不需要事務,它有沒有事務跟我沒關係。
Supports:支持,表示你有我就用吧,你沒有我也不開啓。這種情況一般不應用,因爲你很難搞清楚最後到底有沒有開啓事務,也沒搞清楚在出錯時最後是提交了還是了回滾了。
Never: 禁止使用事務。如果你調用者有事務就報錯。

3.EJB與JAVA BEAN的區別?

Java Bean 是可複用的組件,對Java Bean並沒有嚴格的規範,理論上講,任何一個Java類都可以是一個Bean。但通常情況下,由於Java Bean是被容器所創建(如Tomcat)的,所以Java Bean應具有一個無參的構造器,另外,通常Java Bean還要實現Serializable接口用於實現Bean的持久性。Java Bean實際上相當於微軟COM模型中的本地進程內COM組件,它是不能被跨進程訪問的。Enterprise Java Bean 相當於DCOM,即分佈式組件。它是基於Java的遠程方法調用(RMI)技術的,所以EJB可以被遠程訪問(跨進程、跨計算機)。但EJB必須被佈署在諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問真正的EJB組件,而是通過其容器訪問。EJB容器是EJB組件的代理,EJB組件由容器所創建和管理。客戶通過容器來訪問真正的EJB組件。

4.EJB包括(SessionBean,EntityBean)說出他們的生命週期,及如何管理事務的?

SessionBean:Stateless Session Bean 的生命週期是由容器決定的,當客戶機發出請求要建立一個Bean的實例時,EJB容器不一定要創建一個新的Bean的實例供客戶機調用,而是隨便找一個現有的實例提供給客戶機。當客戶機第一次調用一個StatefulSession Bean 時,容器必須立即在服務器中創建一個新的Bean實例,並關聯到客戶機上,以後此客戶機調用Stateful Session Bean 的方法時容器會把調用分派到與此客戶機相關聯的Bean實例。

EntityBean:Entity Beans能存活相對較長的時間,並且狀態是持續的。只要數據庫中的數據存在,Entitybeans就一直存活。而不是按照應用程序或者服務進程來說的。即使EJB容器崩潰了,Entity beans也是存活的。Entity Beans生命週期能夠被容器或者 Beans自己管理。

EJB通過以下技術管理實務:對象管理組織(OMG)的對象實務服務(OTS),SunMicrosystems的Transaction Service(JTS)、Java Transaction API(JTA),開發組(X/Open)的XA接口。

5.EJB容器提供的服務

主要提供聲明週期管理、代碼產生、持續性管理、安全、事務管理、鎖和併發行管理等服務。

6.EJB的激活機制

以Stateful Session Bean 爲例:其Cache大小決定了內存中可以同時存在的Bean實例的數量,根據MRU或NRU算法,實例在激活和去激活狀態之間遷移,激活機制是當客戶端調用某個EJB實例業務方法時,如果對應EJB Object發現自己沒有綁定對應的Bean實例則從其去激活Bean存儲中(通過序列化機制存儲實例)回覆(激活)此實例。狀態變遷前會調用對應的ejbActive和ejbPassivate方法。

7.EJB的幾種類型

會話(Session)Bean ,實體(Entity)Bean消息驅動的(Message Driven)Bean

會話Bean又可分爲有狀態(Stateful)和無狀態(Stateless)兩種

實體Bean可分爲Bean管理的持續性(BMP)和容器管理的持續性(CMP)兩種

8.客服端調用EJB對象的幾個基本步驟

設置JNDI服務工廠以及JNDI服務地址系統屬性,查找Home接口,從Home接口調用Create方法創建Remote接口,通過Remote接口調用其業務方法。
發佈了44 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章