EJB是基于哪些技術(shù)實(shí)現(xiàn)的?并說出SessionBeanEntityBean的區(qū)別,StatefulBeanStatelessBean的區(qū)別。
EJB
包括Session BeanEntity BeanMessage Driven Bean,基于JNDIRMIJAT等技術(shù)實(shí)現(xiàn)。
SessionBean
J2EE應(yīng)用程序中被用來完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪問數(shù)據(jù)庫、調(diào)用其他EJB組件。EntityBean被用來代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù)。
對于客戶機(jī),SessionBean是一種非持久性對象,它實(shí)現(xiàn)某些在服務(wù)器上運(yùn)行的業(yè)務(wù)邏輯。
對于客戶機(jī),EntityBean是一種持久性對象,它代表一個存儲在持久性存儲器中的實(shí)體的對象視圖,或是一個由現(xiàn)有企業(yè)應(yīng)用程序?qū)崿F(xiàn)的實(shí)體。
Session Bean
還可以再細(xì)分為 Stateful Session Bean Stateless Session Bean ,這兩種的 Session Bean都可以將系統(tǒng)邏輯放在 method之中執(zhí)行,不同的是 Stateful Session Bean 可以記錄呼叫者的狀態(tài),因此通常來說,一個使用者會有一個相對應(yīng)的 Stateful Session Bean 的實(shí)體。Stateless Session Bean 雖然也是邏輯組件,但是他卻不負(fù)責(zé)記錄使用者狀態(tài),也就是說當(dāng)使用者呼叫 Stateless Session Bean 的時候,EJB Container 并不會找尋特定的 Stateless Session Bean 的實(shí)體來執(zhí)行這個 method。換言之,很可能數(shù)個使用者在執(zhí)行某個 Stateless Session Bean methods 時,會是同一個 Bean Instance 在執(zhí)行。從內(nèi)存方面來看, Stateful Session Bean Stateless Session Bean 比較, Stateful Session Bean 會消耗 J2EE Server 較多的內(nèi)存,然而 Stateful Session Bean 的優(yōu)勢卻在于他可以維持使用者的狀態(tài)。
--->>如果一個業(yè)務(wù)流程需要多次方法調(diào)用才能完成服務(wù),適合Stateful Session Bean;如果一個業(yè)務(wù)流程只需要一次方法調(diào)用就能完成服務(wù),適合Stateless Session Bean


EJB JAVA BEAN 的區(qū)別?
Java Bean 
是可復(fù)用的組件,對 Java Bean 并沒有嚴(yán)格的規(guī)范,理論上講,任何一個 Java 類都可以是一個 Bean 。但通常情況下,由于 Java Bean 是被容器所創(chuàng)建(如 Tomcat )的,所以 Java Bean 應(yīng)具有一個無參的構(gòu)造器,另外,通常 Java Bean 還要實(shí)現(xiàn) Serializable 接口用于實(shí)現(xiàn) Bean 的持久性。 Java Bean 實(shí)際上相當(dāng)于微軟 COM 模型中的本地進(jìn)程內(nèi) COM 組件,它是不能被跨進(jìn)程訪問的。 Enterprise Java Bean  相當(dāng)于 DCOM ,即分布式組件。它是基于 Java 的遠(yuǎn)程方法調(diào)用( RMI )技術(shù)的,所以 EJB 可以被遠(yuǎn)程訪問(跨進(jìn)程、跨計算機(jī))。但 EJB 必須被布署在諸如 Webspere WebLogic 這樣的容器中, EJB 客戶從不直接訪問真正的 EJB 組件,而是通過其容器訪問。 EJB 容器是 EJB 組件的代理, EJB 組件由容器所創(chuàng)建和管理。客戶通過容器來訪問真正的 EJB 組件。



EJB 包括( SessionBean,EntityBean )說出他們的生命周期,及如何管理事務(wù)的?
SessionBean
Stateless Session Bean  的生命周期是由容器決定的,當(dāng)客戶機(jī)發(fā)出請求要建立一個 Bean 的實(shí)例時, EJB 容器不一定要創(chuàng)建一個新的 Bean 的實(shí)例供客戶機(jī)調(diào)用,而是隨便找一個現(xiàn)有的實(shí)例提供給客戶機(jī)。當(dāng)客戶機(jī)第一次調(diào)用一個 Stateful Session Bean  時,容器必須立即在服務(wù)器中創(chuàng)建一個新的 Bean 實(shí)例,并關(guān)聯(lián)到客戶機(jī)上,以后此客戶機(jī)調(diào)用 Stateful Session Bean  的方法時容器會把調(diào)用分派到與此客戶機(jī)相關(guān)聯(lián)的 Bean 實(shí)例。
EntityBean
Entity Beans 能存活相對較長的時間,并且狀態(tài)是持續(xù)的。只要數(shù)據(jù)庫中的數(shù)據(jù)存在, Entity beans 就一直存活。而不是按照應(yīng)用程序或者服務(wù)進(jìn)程來說的。即使 EJB 容器崩潰了, Entity beans 也是存活的。 Entity Beans 生命周期能夠被容器或者  Beans 自己管理。
EJB
通過以下技術(shù)管理實(shí)務(wù):對象管理組織( OMG )的對象實(shí)務(wù)服務(wù)( OTS ), Sun Microsystems Transaction Service JTS )、 Java Transaction API JTA ),開發(fā)組( X/Open )的 XA 接口。


 EJB 容器提供的服務(wù)
主要提供聲明周期管理、代碼產(chǎn)生、持續(xù)性管理、安全、事務(wù)管理、鎖和并發(fā)行管理等服務(wù)。




EJB 規(guī)范規(guī)定 EJB 中禁止的操作有哪些?  
    1.
不能操作線程和線程 API( 線程 API 指非線程對象的方法如 notify,wait ) 2. 不能操作 awt 3. 不能實(shí)現(xiàn)服務(wù)器功能, 4. 不能對靜態(tài)屬生存取, 5. 不能使用 IO 操作直接存取文件系統(tǒng), 6. 不能加載本地庫 . 7. 不能將 this 作為變量和返回, 8. 不能循環(huán)調(diào)用。



 remote 接口和 home 接口主要作用
remote
接口定義了業(yè)務(wù)方法,用于 EJB 客戶端調(diào)用業(yè)務(wù)方法。
home
接口是 EJB 工廠用于創(chuàng)建和移除查找 EJB 實(shí)例


EJB 的激活機(jī)制
Stateful Session Bean  為例:其 Cache 大小決定了內(nèi)存中可以同時存在的 Bean 實(shí)例的數(shù)量,根據(jù) MRU NRU 算法,實(shí)例在激活和去激活狀態(tài)之間遷移,激活機(jī)制是當(dāng)客戶端調(diào)用某個 EJB 實(shí)例業(yè)務(wù)方法時,如果對應(yīng) EJB Object 發(fā)現(xiàn)自己沒有綁定對應(yīng)的 Bean 實(shí)例則從其去激活 Bean 存儲中(通過序列化機(jī)制存儲實(shí)例)回復(fù)(激活)此實(shí)例。狀態(tài)變遷前會調(diào)用對應(yīng)的 ejbActive ejbPassivate 方法。 


EJB 的幾種類型
會話( Session Bean  ,實(shí)體( Entity Bean  消息驅(qū)動的( Message Driven Bean
會話 Bean 又可分為有狀態(tài)( Stateful )和無狀態(tài)( Stateless )兩種
實(shí)體 Bean 可分為 Bean 管理的持續(xù)性( BMP )和容器管理的持續(xù)性( CMP )兩種


客服端調(diào)用 EJB 對象的幾個基本步驟
設(shè)置 JNDI 服務(wù)工廠以及 JNDI 服務(wù)地址系統(tǒng)屬性,查找 Home 接口,從 Home 接口調(diào)用 Create 方法創(chuàng)建 Remote 接口,通過 Remote 接口調(diào)用其業(yè)務(wù)方法。


說說你所熟悉或聽說過的 j2ee 中的幾種常用模式 ? 及對設(shè)計模式的一些看法
  Session Facade Pattern
:使用 SessionBean 訪問 EntityBean
Message Facade Pattern
:實(shí)現(xiàn)異步調(diào)用
EJB Command Pattern
:使用 Command JavaBeans 取代 SessionBean ,實(shí)現(xiàn)輕量級訪問
Data Transfer Object Factory
:通過 DTO Factory 簡化 EntityBean 數(shù)據(jù)提供特性
Generic Attribute Access
:通過 AttibuteAccess 接口簡化 EntityBean 數(shù)據(jù)提供特性
Business Interface
:通過遠(yuǎn)程(本地)接口和 Bean 類實(shí)現(xiàn)相同接口規(guī)范業(yè)務(wù)邏輯一致性

說說在 weblogic 中開發(fā)消息 Bean 時的 persistent non-persisten 的差別
persistent
方式的 MDB 可以保證消息傳遞的可靠性 , 也就是如果 EJB 容器出現(xiàn)問題而 JMS 服務(wù)器依然會將消息在此 MDB 可用的時候發(fā)送過來,而 non persistent 方式的消息將被丟棄。