【发布时间】:2015-04-06 14:13:10
【问题描述】:
我已经为 JBoss AS 7.4 定义了一个数据源,具有最小/最大池大小、空闲连接跟踪等。
我对数据源use-ccm 属性感到困惑。
- 它有什么作用?
- 为什么要使用它?
我认为数据源本身管理连接池。
【问题讨论】:
标签: jakarta-ee jboss jboss7.x datasource wildfly
我已经为 JBoss AS 7.4 定义了一个数据源,具有最小/最大池大小、空闲连接跟踪等。
我对数据源use-ccm 属性感到困惑。
我认为数据源本身管理连接池。
【问题讨论】:
标签: jakarta-ee jboss jboss7.x datasource wildfly
要跟踪池的使用情况,需要在适当的记录器上启用调试并在数据源上启用统计信息。
<logger category="org.jboss.jca.core.connectionmanager.pool">
<level name="DEBUG"/>
</logger>
<datasource jndi-name="java:jboss/jf/ds" pool-name="java:jboss/jf/ds" statistics-enabled="true">
【讨论】:
它有什么作用?
它只是一个有用的调试工具,可通过检查其日志记录来检测手动管理事务 (BMT) 中的连接泄漏。在调试模式下打开时,它将记录应用程序代码获取和释放的所有连接以及查询。这可用于追踪应用程序代码中的连接泄漏。
JBoss AS 5 Administration Guide 比 JBoss AS 7 Administration Guide 和更新版本更能解释这一点。 WildFly 文档中甚至没有。以下摘录来自 JBoss AS 5 指南:
3.1。缓存连接管理器
缓存连接管理器用于调试数据源连接并支持事务中数据源连接的延迟登记,跟踪它们是否被应用程序正确使用和释放。以一些开销为代价,它可以提供使用情况跟踪,并确保来自数据源的连接不会被您的应用程序泄露。虽然这似乎是一个优势,但在某些情况下它被认为是一种反模式,因此应该避免。
[...]
在默认、标准和所有配置中,
CachedConnectionManager被配置为处于调试模式的 servlet 容器中。它也在生产配置中配置,但调试模式关闭。如果您不使用 BMT,和/或您没有前面描述的反模式,最好删除CachedConnectionManager。
为什么要使用它?
仅当您不使用容器管理事务 (CMT) 而是手动管理事务 (BMT) 时,才在调试模式下打开它并且您遇到了连接泄漏问题,您可以不要确定。一旦根据 CCM 的日志记录找到并在应用程序代码中修复,最好将其关闭以节省性能。
如果您正在使用 CMT,即您无法在应用程序中手动处理 Connection 和/或 UserTransaction 实例,而只是让 EJB+JTA 完成他们的辛勤工作,请不要使用它。
我认为数据源本身管理连接池。
它只在服务器和数据库之间进行。它不在服务器和应用程序代码之间执行此操作。使用 CMT 时,这一切都会自动发生。使用 BMT 时,应用程序代码开发人员对此负责。在这种情况下遇到连接泄漏时,可以使用 CCM 来解决。
另见Mastertheboss.com - How to trace JDBC statements with JBoss and WildFly。
【讨论】: