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


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 組件。



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


 EJB 容器提供的服務
主要提供聲明周期管理、代碼產生、持續性管理、安全、事務管理、鎖和并發行管理等服務。




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



 remote 接口和 home 接口主要作用
remote
接口定義了業務方法,用于 EJB 客戶端調用業務方法。
home
接口是 EJB 工廠用于創建和移除查找 EJB 實例


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


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


客服端調用 EJB 對象的幾個基本步驟
設置 JNDI 服務工廠以及 JNDI 服務地址系統屬性,查找 Home 接口,從 Home 接口調用 Create 方法創建 Remote 接口,通過 Remote 接口調用其業務方法。


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

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