Enterprise JavaBean(EJB)定義了三種企業Bean,分别是會話Bean(Session Bean),實體Bean(Entity Bean)
和消息驅動Bean(MessageDriven Bean)。
Session Bean:Session Bean 用于實作業務邏輯,它分為有狀态bean 和無狀态bean。每當用戶端請求時,容器就
會選擇一個Session Bean 來為用戶端服務。Session Bean 可以直接通路資料庫,但更多時候,它會通過Entity Bean
實作資料通路。
無狀态會話Bean 主要用來實作單次使用的服務,該服務能被啟用許多次,但是由于無狀态會話Bean 并不保留任
何有關狀态的資訊,其效果是每次調用提供單獨的使用。在很多情況下,無狀态會話Bean 提供可重用的單次使
用服務。
有狀态Bean 是一個可以維持自身狀态的會話Bean。每個使用者都有自己的一個執行個體,在使用者的生存期内,Stateful
Session Bean 保持了使用者的資訊,即“有狀态”;一旦使用者滅亡(調用結束或執行個體結束),Stateful Session Bean 的
生命期也告結束。即每個使用者最初都會得到一個初始的Stateful Session Bean。
這兩種Session Bean 都可以将系統邏輯放在方法之中執行,不同的是Stateful Session Bean 可以記錄呼叫者的狀态,
是以一個使用者會有自己的一個執行個體。Stateless Session Bean 雖然也是邏輯元件,但是他卻不負責記錄使用者狀态,
也就是說當使用者呼叫Stateless Session Bean 的時候,EJB 容器并不會尋找特定的Stateless Session Bean 的實體來
執行這個method。換言之,很可能數個使用者在執行某個Stateless Session Bean 的methods 時,會是同一個Bean
的執行個體在執行。從記憶體方面來看,Stateful Session Bean 與Stateless Session Bean 比較,Stateful Session Bean 會消
耗J2EE Server 較多的記憶體,然而Stateful Session Bean 的優勢卻在于他可以維持使用者的狀态。
實體Bean:從名字上我們就能猜到,實體bean 代表真實物體的資料,在JDBC+JavaBean 程式設計中,通常把JDBC
查詢的結果資訊存入JavaBean,然後供後面程式進行處理。在這裡你可以把實體Bean 看作是用來存放資料的
JavaBean。但比普通JavaBean 多了一個功能,實體bean 除了擔負起存放資料的角色,還要負責跟資料庫表進行
對象與關系映射(O/R Mapping)。
消息驅動Bean(MDB):是設計用來專門處理基于消息請求的元件。它能夠收發異步JMS 消息,并能夠輕易地與
其他EJB 互動。它特别适合用于當一個業務執行的時間很長,而執行結果無需實時向使用者回報的這樣一個場合。
因為JNDI 是一組接口,是以我們隻需根據接口規範程式設計就可以。要通過JNDI 進行資源通路,我們必須設定初始化上下文的參數,主要是設定JNDI 驅動的類名。因為Jndi 的實作産品有很多。
下面是通路Jboss 伺服器的例子代碼:
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
下面是通路Sun 應用伺服器的例子代碼:
Properties props = new Properties();
props.setProperty("java.naming.factory.initial","com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.provider.url", "localhost:3700");
下面是通路Weblogic10 應用伺服器的例子代碼:
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "weblogic.jndi.WLInitialContextFactory");
props.setProperty("java.naming.provider.url", "t3://localhost:7001");