程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> Enterprise JavaBeans導論三

Enterprise JavaBeans導論三

編輯:J2EE

會話bean 會話bean是一種通過home interface創建並對客戶端連接專有的enterprise bean.會話bean實例一般不與其它客戶端共享。這允許會話bean維護客戶端的狀態。會話bean的一個例子是購貨車,眾多顧客可以同時購貨,想他們自己的購貨車中加東西,而不是向一個公共的購貨車中加私人的貨物。定義一個會話bean 可以通過定義一個實現javax.ejb.SessionBean接口的類來創建一個會話bean.該接口定義如下: public interface javax.ejb.SessionBean extends javax.ejb.EnterpriseBean { public void ejbActivate() throws RemoteException; public void ejbPassivate() throws RemoteException; public void ejbRemove() throws RemoteException; public void setSessionContext(SessionContext context) throws RemoteException; } javax.ejb.EnterpriseBean是一個空接口,是會話bean和實體bean的超類。 會話bean的交換 容器開發商可以實現把會話bean的實例從主存移到二級存儲中的交換機制,這可以增加一段時間內實例化的會話bean的總數。容器維護一個bean的時間期限,當某個bean的不活動狀態時間達到這個阙值,容器就把這個bean拷貝到二級存儲中並從主存中刪除。 容器可以使用任何機制來實現bean的持久性存儲。最常用的方式是通過bean的串行化。Bean開發者在bean中應避免使用transient fields。EjbActivate()和ejbPassivate()用來維護這個fIElds值。 活化和鈍化 為了支持廠商提供會話bean的交換,規范定義了鈍化--把bean從主存轉移到二級存儲的過程,活化--把bean恢復到主存中去的過程。在SessionBean接口中聲明的EjbActivate()和ejbPassivate()方法,允許容器通知已經被活化的bean它將要被鈍化。Bean開發者可以用這些方法釋放和恢復處於鈍化狀態的bean所占有的值、引用和系統資源。一個可能的例子是數據庫連接,作為有限的系統資源,不能被鈍化的bean使用。 有了這些方法就使得不必在使用transient.事實上,使用transient可能是不安全的,因為串行化機制自動地把值設為null或0。而通過ejbActivate()和ejbPassivate()方法顯式地設置這些fields更好一些。依靠Java的串性化機制把transient fIElds設成null也是不可移植的,因為當bean部署在不使用Java的串性化機制獲得持久性的EJB容器中時該行為會發生改變。如果容器不提供交換,那麼這些方法將永遠不會被調用。 當客戶端調用bean的商業方法時鈍化的bean被激活。當EJBObject收到方法調用的請求時,它通知容器需要活化的bean.當活化完成時,EJBObject代理對bean的方法調用。 如果bean 參與一個事務,那麼它不能被鈍化。把bean放在主存中更有效率,因為事務通常在很短的時間內完成。如果bean沒有鈍化前必須釋放或活化前必須重置的狀態,那麼這些方法可置空。在大多數情況下,bean開發者不必在這些方法中做任何事。 會話bean的狀態管理 會話bean的部署描述符必須聲明該bean是有狀態或無狀態的。一個無狀態bean是在方法調用間不維護任何狀態信息的bean。通常,會話bean的優點是代替客戶端維護狀態。 然而,讓會話bean無狀態也有一個好處。無狀態bean不能被鈍化。因為它不維護狀態,所以沒有需要保存的信息。容器可以刪除bean的實例。客戶端永遠不會知道無狀態bean的刪除過程。客戶端的引用是EJBObject.如果客戶端稍後又調用了一個商業方法,則EJBObject通知容器在實例化一個新的會話bean.因為沒有狀態,因此也沒有信息需要恢復。 無狀態bean可以在客戶端間共享,只是在某一時刻只能有一個客戶端執行一個方法。因為在方法調用間沒有需要維護的狀態,所以客戶端可使用任何無狀態bean的實例。這使得容器可以維護一個較小的可服用bean的緩沖池,節省主存。因為無狀態bean在方法調用間不能維護狀態,因此從技術上講在home interface的create()方法不應有參數。在創建時向bean傳遞參數意味著在ejbCreate()返回時需要維護bean的狀態。而且,經由EJBObject調用商業方法的結果使得容器必須能重創建一個無狀態的bean.這時在開始創建bean時的參數就不存在了。廠商的安裝工具應該能檢查home interface的無狀態對話bean以保證其不包含帶參數的create()方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved