·@PostConstruct:當(dāng)bean對(duì)象完成實(shí)例化后,使用了這個(gè)注釋的方法會(huì)被立即調(diào)用。這個(gè)注釋同時(shí)適用于
有狀態(tài)和無(wú)狀態(tài)的會(huì)話bean。
·@PreDestroy:使用這個(gè)注釋的方法會(huì)在容器從它的對(duì)象池中銷(xiāo)毀一個(gè)無(wú)用的或者過(guò)期的bean 實(shí)例之前調(diào)
用。這個(gè)注釋同時(shí)適用于有狀態(tài)和無(wú)狀態(tài)的會(huì)話bean。
·@PrePassivate:當(dāng)一個(gè)有狀態(tài)的session bean實(shí)例空閑過(guò)長(zhǎng)的時(shí)間,容器將會(huì)鈍化(passivate)它,并把它的
狀態(tài)保存在緩存當(dāng)中。使用這個(gè)注釋的方法會(huì)在容器鈍化bean實(shí)例之前調(diào)用。這個(gè)注釋適用于有狀態(tài)的會(huì)話bean。
當(dāng)鈍化后,又經(jīng)過(guò)一段時(shí)間該bean 仍然沒(méi)有被操作,容器將會(huì)把它從存儲(chǔ)介質(zhì)中刪除。以后,任何針對(duì)該bean
方法的調(diào)用容器都會(huì)拋出例外。
·@PostActivate:當(dāng)客戶(hù)端再次使用已經(jīng)被鈍化的有狀態(tài)session bean時(shí),新的實(shí)例被創(chuàng)建,狀態(tài)被恢復(fù)。
使用此注釋的session bean會(huì)在bean的激活完成時(shí)調(diào)用。這個(gè)注釋只適用于有狀態(tài)的會(huì)話bean。
·@Init:這個(gè)注釋指定了有狀態(tài)session bean初始化的方法。它區(qū)別于@PostConstruct注釋在于:多個(gè)@Init
注釋方法可以同時(shí)存在于有狀態(tài)session bean 中,但每個(gè)bean實(shí)例只會(huì)有一個(gè)@Init注釋的方法會(huì)被調(diào)用。這取
決于bean是如何創(chuàng)建的(細(xì)節(jié)請(qǐng)看EJB 3.0規(guī)范)。@PostConstruct在@Init之后被調(diào)用。
另一個(gè)有用的生命周期方法注釋是@Remove,特別是對(duì)于有狀態(tài)session bean。當(dāng)應(yīng)用通過(guò)存根對(duì)象調(diào)用使用了
@Remove注釋的方法時(shí),容器就知道在該方法執(zhí)行完畢后,要把bean實(shí)例從對(duì)象池中移走。
我寫(xiě)了一個(gè)statful Session bean.需要等待9分鐘左右,容器才會(huì)鈍化此會(huì)話Bean。。。。。
然后經(jīng)證明,statfulBean的鈍化時(shí)間是10分鐘,完全銷(xiāo)毀差不多要15分鐘。。。Jboss是個(gè)愚蠢的東西
還沒(méi)有找到相應(yīng)的文檔說(shuō)明這一問(wèn)題的,因?yàn)殁g化后GC不會(huì)馬上來(lái)收,這就導(dǎo)致可能會(huì)有潛在的內(nèi)存泄露問(wèn)題了。
我只用到JBoss,不知道有沒(méi)有用Weblogic的朋友是不是也有同樣的問(wèn)題?
有狀態(tài)和無(wú)狀態(tài)的會(huì)話bean。
·@PreDestroy:使用這個(gè)注釋的方法會(huì)在容器從它的對(duì)象池中銷(xiāo)毀一個(gè)無(wú)用的或者過(guò)期的bean 實(shí)例之前調(diào)
用。這個(gè)注釋同時(shí)適用于有狀態(tài)和無(wú)狀態(tài)的會(huì)話bean。
·@PrePassivate:當(dāng)一個(gè)有狀態(tài)的session bean實(shí)例空閑過(guò)長(zhǎng)的時(shí)間,容器將會(huì)鈍化(passivate)它,并把它的
狀態(tài)保存在緩存當(dāng)中。使用這個(gè)注釋的方法會(huì)在容器鈍化bean實(shí)例之前調(diào)用。這個(gè)注釋適用于有狀態(tài)的會(huì)話bean。
當(dāng)鈍化后,又經(jīng)過(guò)一段時(shí)間該bean 仍然沒(méi)有被操作,容器將會(huì)把它從存儲(chǔ)介質(zhì)中刪除。以后,任何針對(duì)該bean
方法的調(diào)用容器都會(huì)拋出例外。
·@PostActivate:當(dāng)客戶(hù)端再次使用已經(jīng)被鈍化的有狀態(tài)session bean時(shí),新的實(shí)例被創(chuàng)建,狀態(tài)被恢復(fù)。
使用此注釋的session bean會(huì)在bean的激活完成時(shí)調(diào)用。這個(gè)注釋只適用于有狀態(tài)的會(huì)話bean。
·@Init:這個(gè)注釋指定了有狀態(tài)session bean初始化的方法。它區(qū)別于@PostConstruct注釋在于:多個(gè)@Init
注釋方法可以同時(shí)存在于有狀態(tài)session bean 中,但每個(gè)bean實(shí)例只會(huì)有一個(gè)@Init注釋的方法會(huì)被調(diào)用。這取
決于bean是如何創(chuàng)建的(細(xì)節(jié)請(qǐng)看EJB 3.0規(guī)范)。@PostConstruct在@Init之后被調(diào)用。
另一個(gè)有用的生命周期方法注釋是@Remove,特別是對(duì)于有狀態(tài)session bean。當(dāng)應(yīng)用通過(guò)存根對(duì)象調(diào)用使用了
@Remove注釋的方法時(shí),容器就知道在該方法執(zhí)行完畢后,要把bean實(shí)例從對(duì)象池中移走。
我寫(xiě)了一個(gè)statful Session bean.需要等待9分鐘左右,容器才會(huì)鈍化此會(huì)話Bean。。。。。
然后經(jīng)證明,statfulBean的鈍化時(shí)間是10分鐘,完全銷(xiāo)毀差不多要15分鐘。。。Jboss是個(gè)愚蠢的東西
還沒(méi)有找到相應(yīng)的文檔說(shuō)明這一問(wèn)題的,因?yàn)殁g化后GC不會(huì)馬上來(lái)收,這就導(dǎo)致可能會(huì)有潛在的內(nèi)存泄露問(wèn)題了。
我只用到JBoss,不知道有沒(méi)有用Weblogic的朋友是不是也有同樣的問(wèn)題?