JSF应用程序创建太多数据库连接

时间:2011-02-27 20:21:45

标签: mysql jsf-2 connection-pooling

我使用MYSQL 5.1 db和Tomcat 7构建了一个(相对)简单的JSF应用程序。事情正在发挥作用,没有任何事情爆发,但有一种好奇心......

使用MySQL工作台,我可以看到,在一段时间内,我构建了一个不断发布的数据库连接列表。每个都有格式:

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

状态始终为空白,命令始终为“睡眠”。

我在打开和关闭连接,语句时遵循最佳实践,据我所知,我的ManagedBeans都没有与dataSource的任何持久连接,所有这些都应该在我不知道的情况下不在我的范围之内在页面之间切换。

我很难找到答案,这部分是因为我不太确定在哪里看。有关查看/排除故障的任何建议,是否存在一些我不知道的常见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"
/>

1 个答案:

答案 0 :(得分:3)

您使用什么样的持久性框架?

如果是JPA,每次都应该close() EntityManager(超出范围不够好)!

如果它是休眠的,你每次都应该close()会话。

如果是JDBC,则每次都应close()语句。

关闭此类资源通常在(finally块的try子句中完成。

P.S。您没有提到关闭ResultSet。我猜你也关闭了它们?