2012-01-26 95 views
1

我在我的(簡單)應用程序中使用Glassfish 3.1,JEE6 JPA註釋,Hibernate提供程序和Derby數據庫。我似乎在連接池方面遇到很多困難。基本上,我的應用程序運行良好,沒有安全性,但現在我創建了一個安全領域,我發現無論我設置池的大小是多少,我都會運行連接。顯然,我在我的代碼中執行了一些操作,這意味着在servlet請求結束後連接不會返回到池中。Glassfish Derby連接池,未返回到池的連接

我見過StackOverflow上的各種發佈和建議,並嘗試過所有...似乎沒有任何工作。

我想知道的是...我如何從Glassfish中獲取日誌和跟蹤信息?我需要找出爲什麼它沒有返回連接池。這樣我希望能夠找到問題的根源。

非常感謝!

+0

你是否在你的finally塊或任何地方調用connection.close()?您需要關閉連接,才能將其返回到池中。 – oers

+0

我將entityManager.clear()和entityManager.close()作爲我的提交代碼的一部分調用>我不直接訪問連接。我可以做?我以爲容器處理了Entity Manager後面的連接。 –

+0

這應該夠了。它總是第一次猜測,由於缺乏清理,連接不會返回到池中。 – oers

回答

0

它始終是第一個猜測,由於缺乏清理,連接沒有返回到池中。

確保:

  • 接近你打開
  • 近,你在每一個路徑使用

所有EntityManagers所有連接。

這是很好的做法,這樣做

使用

try 
{ 
    //open 
    //work 
} 
catch 
{ 
    //exception handling 
} 
finally 
{ 
    //close 
} 

任何地方,你來處理這些情況。

邊注意: 像findbugs/sonar靜態分析器能夠檢測到這些情況。