2012-04-10 222 views
1

我面臨一個問題,實際上我在我的項目中使用c3p0進行連接池,它也使用Spring,Hibernate和JSF。我的問題是,在我的網頁中,我們有一個名爲「註銷」的鏈接,當用戶單擊註銷時,連接應該被釋放,www.google.com返回到池中,這是可能的。釋放連接到c3p0連接池

在此先感謝 PRASHANT

+0

如果您知道 – 2012-04-10 10:42:23

+0

我增加了我接受的答案我不太理解這個問題,因爲您的c3p0池與您的用戶請求無關。該池是自我管理的(當連接在一段時間後沒有被使用時,該連接要麼關閉,要麼放回池中)。 – 2012-04-10 11:19:45

+0

是的,您的權利池與用戶請求無關,但在我們的網頁上,我們有一個名爲logout的鏈接。在一種情況下,如果我有一個maxPoolSize 2和2用戶登錄,那麼當第三個用戶嘗試登錄時,他應該等待連接free.I想要這樣做,如果我點擊我的註銷鏈接,然後用戶註銷,也是它釋放連接,以便等待獲取連接的另一個用戶獲得連接並完成工作。 – 2012-04-10 11:27:16

回答

1

你期待是控制併發用戶數登錄到你的系統

當3位用戶嘗試登錄那麼他應該等待連接 釋放

現在,您可以使用併發計數器

實現這個
  • 創建過濾器來過濾所有請求。
  • 每當一個新的請求創建增量計數器當用戶註銷遞減計數器
  • 當計數器命中最大值使該線程等待,直到插槽可

您可以通過JMX或單獨的管理控制檯控制最大用戶數。 此外,當處理它的線程終止時應該釋放一個連接(因爲會話對象沒有任何引用,所以它可以被GC化,超時之後它將在池中重用)。

它總是最好不要使用數據庫資源創建瓶頸。

+0

沒有其實我只是試圖這樣做,當任何用戶註銷然後連接返回到池 – 2012-04-10 11:50:22

+0

我明白,但一個連接是一個資源鏈接到正在運行的線程,如果線程死了,然後連接返回到池(遲早)。 – 2012-04-10 11:52:14

+0

你的意思是沒有辦法做到這一點嗎? – 2012-04-10 11:56:27