转载自:
http://community.jboss.org/wiki/CanJBossTellMeWhenIDontCloseAConnection
Can JBoss AS tell me when I don't close connections, statements or resultsets?
Yes.
Connections
For connections the configuration is in deploy/transaction-service.xml
<attribute name="Debug">true</attribute>
Starting with 4.0.0, the configuration is in deploy/jbossjca-service.xml
<!--
| The CachedConnectionManager is used partly to relay started UserTransactions to
| open connections so they may be enrolled in the new tx.
-->
<mbean code="org.jboss.resource.connectionmanager.CachedConnectionManager"
name="jboss.jca:service=CachedConnectionManager">
<depends optional-attribute-name="TransactionManagerServiceName">jboss:service=TransactionManager</depends>
<!-- Enable connection close debug monitoring -->
<attribute name="Debug">true</attribute>
</mbean>
Statements and ResultSets
For statements (and from 3.2.4 ResultSets) you can add the following to your -ds.xml (data source xml: oracle-ds.xml, and so on)
<track-statements>true</track-statements>
Like this:
<!--pooling parameters-->
<min-pool-size>10</min-pool-size>
<max-pool-size>20</max-pool-size>
<blocking-timeout-millis>60000</blocking-timeout-millis>
<idle-timeout-minutes>180</idle-timeout-minutes>
<track-statements>true</track-statements>
Closing statements and ResultSets is important if you want to use prepared statement caching and/or don't won't to leak cursors in your database.
Servlets and JSP
From from 3.2.4 this checking is available in the web layer.
Enable the CachedConnectionValve by uncommenting the following in deploy/jbossweb-xxx.sar/server.xml:
<!-- Check for unclosed connections -->
<Valve className="org.jboss.web.tomcat.tc5.jca.CachedConnectionValve"
cachedConnectionManagerObjectName="jboss.jca:service=CachedConnectionManager" ></Valve>
NOTE: From 4.0.0 the CachedConnectionValve should be configured this way:
<Valve className="org.jboss.web.tomcat.tc5.jca.CachedConnectionValve"
cachedConnectionManagerObjectName="jboss.jca:service=CachedConnectionManager"
transactionManagerObjectName="jboss:service=TransactionManager" ></Valve>
JBoss 4.0.0 distribution still had the previous configuration that woulld cause a NullPointerException in CachedConnectionValve.checkTransactionComplete(CachedConnectionValve.java:198).
Once the valve is enabled, the CachedConnectionManager must be registered in deploy/jbossweb-xxx.sar/META-INF/jboss-service.xml.
At the end of the file, uncomment:
<depends>jboss.jca:service=CachedConnectionManager</depends>
Production and Stress Testing
In production you will want to turn these off. You should have found all your leaks during development.