SessionBean生命周期_第1頁
SessionBean生命周期_第2頁
SessionBean生命周期_第3頁
SessionBean生命周期_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、五、SessionBean生命周期無狀態(tài)會話Bean的生命周期注意,本圖中也涵蓋了EJB的標(biāo)準(zhǔn)首先,如果容器沒有檢測到EJB的存在,或者用戶調(diào)用了Create方法,則首先使用Class類的newInstance()創(chuàng)建一個實(shí)例,這就是為什么要求SessionBean的實(shí)現(xiàn)類要提供一個共有的不帶參數(shù)的構(gòu)造函數(shù)的原因。之后,需要的話,會使用相關(guān)的依賴注入,這里暫時不予以考慮。緊接著是調(diào)用SessionBean接口中定義的setSessionContext方法,為實(shí)現(xiàn)類注入一個會話上下文實(shí)例引用。至于上下文中到底保存了啥內(nèi)容,看你開發(fā)人員往里面放了些啥唄。最后,調(diào)用ejbCreate方法,創(chuàng)建相關(guān)的

2、內(nèi)容,所以ejbCreate方法,實(shí)際上,相當(dāng)于一個初始化函數(shù)。當(dāng)無狀態(tài)會話Bean已經(jīng)被創(chuàng)建了,那么就處于池中,并且是就緒狀態(tài),這個時候就可以使用它其中實(shí)現(xiàn)的EJBObject或者EJBLocalObject中所定義的方法了?;蛘?,如果設(shè)定了定時器(起增加的,以前沒有),就調(diào)用ejbTimeout方法,巡回檢測,這個跟js腳本中的setTimeout方法沒啥區(qū)別,換到C抻就是timer類的那個事件方法。不過要注意,這里調(diào)用ejbTimeout之后,無狀態(tài)的仍然是可用的就緒狀態(tài),只不過可能是歸還給會話bean池了(這要看你方法寫什么了)。當(dāng)要刪除此會話Bean的時候,調(diào)用ejbRemove方法

3、,進(jìn)行刪除。annotations(名字)形式的都是EJB規(guī)范使用的,不適用。從上圖可見,對于無狀態(tài)會話Bean沒有ejbPassivate和ejbActivate方法的調(diào)用,因?yàn)樗鼰o需激活和休眠。有狀態(tài)會話Bean的生命周期首先,創(chuàng)建那個部分就跟無狀態(tài)的都一樣。此處略過。重點(diǎn)討論一下就緒狀態(tài)。當(dāng)有狀態(tài)的會話Bean處于就緒狀態(tài)的時候,如果調(diào)用非事務(wù)方法,并且正常返回沒有出錯的話,那么仍然回到就緒狀態(tài)。關(guān)于使用事務(wù)的方法,稍后再說。處于就緒狀態(tài)的會話Bean,如果調(diào)用了remove、ejbTimeout或者ejbRemove方法,會讓次會話bean被刪除。如果處于就緒狀態(tài)的時候,如果容器使用了

4、LRU算法,不幸的成為了犧牲品,那么容器會讓當(dāng)前的Bean休眠,此時會調(diào)用ejbPassivate方法,使之進(jìn)入休眠狀態(tài)。在休眠態(tài)的Bean,如果要被重新激活,則會觸發(fā)激活事件,此時調(diào)用ejbActivate方法。當(dāng)然,如果休眠太久超時了,或者從任何實(shí)例方法拋出系統(tǒng)級異常(這個并非Bean本身能控制的),就會刪除此Bean,重新回到不存在的狀態(tài)。激活和休眠中可以保存的內(nèi)容對于有狀態(tài)會話Bean,有必要關(guān)注一下哪些東西在休眠的時候得以保存。這樣,我們就可以省點(diǎn)力氣干別的。在激活和休眠過程中可以被保存的對象有:1. 實(shí)現(xiàn)序列化接口的對象2. null3. 對另一個EJB的遠(yuǎn)程主對象或組件對象的引用

5、4. 對一個實(shí)體EJB的本地主對象或者組件對象的引用5. 對SessionContext的引用6. 對UserTransaction的引用(JTA中的內(nèi)容,用于Bean管理的事務(wù)劃分)7. 對JNDI上下文環(huán)境的引用(ENC)會話同步使用事務(wù)的有狀態(tài)會話Bean在上圖中我們看到,在會話Bean處于就緒狀態(tài)的時候,也可以對其進(jìn)行事務(wù)方法調(diào)用。在這種情況下,需要讓會話Bean的實(shí)現(xiàn)類實(shí)現(xiàn)SessionSynchronization接口。而實(shí)現(xiàn)此接口的會話Bean所使用的是容器管理的事務(wù)(CMT,并非Bean管理器管理的事務(wù)(BMT。此接口定義了如下方法:publicvoidafterBegin()

6、throwsEJBException,RemoteException通知一個會話Bean實(shí)例,有一個新的事務(wù)已經(jīng)開啟,并且此實(shí)例后繼的業(yè)務(wù)方法將在此業(yè)務(wù)中被調(diào)用publicvoidafterCompletion(booleancommitted)throwsEJBException,RemoteException通知一個會話Bean實(shí)例,一個事務(wù)提交協(xié)議已經(jīng)完成,并且其中的參數(shù)指明到底是提交成功了,還是回滾了。publicvoidbeforeCompletion()throwsEJBException,RemoteException通知一個會話Bean實(shí)例,一個事務(wù)將要被提交?;貋碓倏瓷蠄D。當(dāng)處于方法就緒狀態(tài)時候的有狀態(tài)會話Bean調(diào)用了事務(wù)方法。那么首先會觸發(fā)調(diào)用afterBegin方法。之后,Bean會在事務(wù)方法中處于就緒狀態(tài),此時,調(diào)用任何事務(wù)方法,如果成功仍然會保持在事務(wù)方法就緒狀態(tài)。當(dāng)事務(wù)提交的時候,首先會調(diào)用beforeCompletion方法做相關(guān)處理,之后,如果傳給afterCompletion的參數(shù)是true,則在afterCompletion方法

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論