Version 38

    Can JBossAS tell me when I don't close connections, statements or resultsets?







    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" 
        <depends optional-attribute-name="TransactionManagerServiceName">jboss:service=TransactionManager</depends>
        <!-- Enable connection close debug monitoring -->
        <attribute name="Debug">true</attribute>


    The generated message look like this (JBoss 4.x):

    2010-02-24 08:10:04,086 WARN [org.jboss.resource.connectionmanager.CachedConnectionManager] Closing a connection for you.  Please close them yourself: org.jboss.resource.adapter.jms.JmsSession@745889

    java.lang.Throwable: STACKTRACE




    Note!! To have this applied to connections openned by Servlets or JSP's see below {FOOTNOTE DEF 1 1}.




    Statements and ResultSets


    For statements (and from 3.2.4 ResultSets) you can add the following to your -ds.xml




    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.



    The generated messages looks like this (JBoss 4.x):

    2010-02-24 08:10:04,086 WARN  [org.jboss.resource.adapter.jdbc.WrappedConnection] Closing a result set you left open! Please close it yourself.
    java.lang.Throwable: STACKTRACE
            at org.jboss.resource.adapter.jdbc.WrappedStatement.registerResultSet(



    2010-02-24 08:10:04,102 WARN  [org.jboss.resource.adapter.jdbc.WrappedConnection] Closing a statement you left open, please do your own housekeeping
    java.lang.Throwable: STACKTRACE
            at org.jboss.resource.adapter.jdbc.WrappedConnection.registerStatement(







    Servlets and JSP {FOOTNOTE RED #1 1}



    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"
                transactionManagerObjectName="jboss:service=TransactionManager" ></Valve>


    JBoss 4.0.0 distribution still had the previous configuration that woulld cause a NullPointerException

    in CachedConnectionValve.checkTransactionComplete(


    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:







    Production and Stress Testing



    In production you will want to turn these off. You should have found all your leaks during development.