2016-05-14 44 views

回答

4

大多數時候當你使用有狀態的會話豆(這是不推薦真的,除了一些很少需要的條件),這可能是有用的容器管理和重用一些非活動的連接在某個點的時間,以幫助保持從您的數據庫的連接數在一定的最佳數量。

例如你的DBMS可以管理1000連接。因此,您可以在容器中創建一個大小爲1000的連接池(Application Server,例如GlassFish,Weblogic,...)。

然後,當你的應用程序達到1000屆例如數量,如果其他用戶希望成爲進入到應用程序時,他/她應該等到1000個連接中的一個被釋放。

在這種形勢下,Passivate/Activate的機制可能是有用的。因爲很明顯Passivate/Activate在小應用程序中不會發生。但對於一些高度使用的併發用戶數量很大的應用程序,這可能由於池大小,非活動超時以及其他一些參數而發生。

場景

也許至少200出1000個連接採取了很多領域的一些大單的一些數據項。所以用戶至少需要2或3分鐘才能完成數據輸入。在這3分鐘內,專用於有狀態會話Bean的連接處於非活動狀態,可用於其他用戶(其他會話Bean)。

因此,在指定的超時後容器將passivate會話bean的當前狀態(將它們序列化到特定的數據庫或文件或內存)並釋放其連接到要使用的連接池。

當用戶完成表單並單擊提交按鈕時,容器將重新分配池中的連接(如果可用),並且該會話bean的先前鈍化狀態將繼續從鈍化。

因此@PrePassivate@PostActivate對您有用,如果您需要在該事件中進行一些手動操作。

希望這將是有益的。