2012-08-14 63 views
1

在會話範圍的bean中,在web應用中的用戶操作的上下文中存儲掛起的執行列表是否安全,然後在會話結束時通過@Predestroy註釋的方法可靠地執行這些操作(我的意思是,安全上下文@predestroy方法沒有被稱爲&因此在某些情況下動作沒有被執行,所以!?)。使用@predestroy方法在會話結束時執行掛起的指令?

+0

什麼語言是什麼? – 2012-08-14 18:19:09

+0

那瞬間壞標題是同時,我按下提交按鈕,由於其我的頭銜得到了擦除的錯字錯誤的結果.. – 2012-08-14 18:23:01

+0

@Juan :看看問題標籤 – BalusC 2012-08-14 18:42:23

回答

0

您可能想要將您的邏輯移至HttpSessionListener實現(它是一個接口)。你會觸發sessionDestroyed事件(通過在你的具體實現中實現該方法)。 (我在當前產品中實現了一個作爲JMX bean來處理運行時的控制會話),這非常容易,也很適合處理這種事情。

TIA

+0

'@ SessionScoped'託管bean的'@ Predestroy'註釋方法位於已由'HttpSessionListener#sessionDestroyed()'調用的JSF場景後面。所以我完全沒有看到它是如何有用和「更安全」的,用自制的實現代替它。 – BalusC 2012-08-16 16:17:31

+0

沒有提供它作爲「更安全」,只是使它的語義目標。是的,有不止一種方式來對這隻貓進行皮膚處理,但是由於他在會話銷燬期間特別感興趣觸發了某些行爲/方面,因此將邏輯放入針對該行爲的bean中可能更有意義。如果他的回調需要在「正常操作」期間不需要的其他豆類/資源,注入它們以便它們在會話銷燬時可用,則可能構成對豆類的污染。再次,沒有顯示代碼,它必須在抽象中權衡。 – him 2012-08-21 16:59:24

0

它是完全安全的儲存待處理的執行或DB在@PreDestroy方法提交。在這種狀態下,託管bean不會被銷燬。因此,託管bean的狀態將與bean內部的常規方法調用相同。請參閱下面的文檔。

http://docs.oracle.com/javaee/6/tutorial/doc/gmgkd.html#gmghg

「準備一個managed bean的使用@PreDestroy註釋 爲一個managed bean的破壞準備銷燬指定生命週期回調方法,其發信號通知應用程序組件是將被摧毀

在託管bean類或其任何超類中,準備銷燬託管bean 在此方法中,執行任何在bean銷燬之前所需的清理,例如釋放資源該豆已被持有。

用javax.annotation.PreDestroy批註註釋該方法的聲明。 CDI開始破壞bean之前調用這個方法。」