2011-02-27 41 views
0

我已經使用MYSQL 5.1 db和Tomcat 7構建了一個(相對)簡單的JSF應用程序。事情沒有什麼大起大落,但有好奇心...JSF應用程序創建了太多的數據庫連接

使用MySQL工作臺,我可以看到,在一段時間內,我建立了一個不斷增加的永遠不會釋放的數據庫連接列表。每個人都有格式:

[id] [user] [host] [dbname] [command] [time] [State] [info] 

國家始終是空白,命令始終是「休眠」。

當我打開和關閉連接,語句時,我正在遵循最佳實踐,並且據我所知,我的ManagedBeans沒有任何持久連接到數據源,所有這些連接都應儘快脫離範圍我在頁面之間切換。

我在努力尋找答案,這部分是因爲我不太確定在哪裏尋找答案。有什麼建議評論/排除故障,有沒有一些常見的JSF/DBCP陷阱我不知道?

這可能是有用的:

<Resource 
    name="jdbc/TrackerDB" 
    auth="Container" 
    type="javax.sql.DataSource" 
    maxActive="20" 
    maxIdle="10" 
    maxWait="100" 
    username="xxxx" 
    password="xxxx" 
    removeAbandoned="true" 
    removeAbandonedTimeout="300" 
    logAbandoned="true" 
    driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/tracker" 
/> 

回答

3

什麼樣的持久化框架您使用的是?

如果是JPA,你應該每次都在close() EntityManager(超出範圍不夠好)!

如果它正在休眠,那麼您應該每次都會話close()

如果是JDBC,你應該每次都要聲明close()

關閉此類資源通常在finally子句(try塊的子句)中完成。

P.S.你沒有提到關閉ResultSet。我假設你也關閉這些?

+0

已經這樣做了,它的JDBC和所有打開的東西都被正確關閉了。 – JHarnach 2011-02-27 20:30:18

+0

@JHarnach DBCP的maxIdle配置是什麼?默認值是8. – extraneon 2011-02-27 20:40:01

+0

已編輯原始帖子,yes結果集也會被關閉。 – JHarnach 2011-02-27 20:52:03

相關問題