2011-02-27 38 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

相关问题