DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG·
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=33938>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND·
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=33938

           Summary: org.apache.catalina.realm.DataSourceRealm.getRoles()
                    does not close the Connection it allocated
           Product: Tomcat 5
           Version: 5.5.7
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
        AssignedTo: tomcat-dev@jakarta.apache.org
        ReportedBy: [EMAIL PROTECTED]


I'm seeing quick resource exhaustion if a Realm uses pooled connections
using DataSourceRealm. I checked whether every 'open' was correctly followed
by a close. In org.apache.catalina.realm.DataSourceRealm.getRoles(), one
finds code that seems to miss something:

   /**
     * Return the roles associated with the gven user name.
     */
    protected ArrayList getRoles(String username) {

        ResultSet rs = null;
        PreparedStatement stmt = null;
        Connection dbConnection = null;

        // Ensure that we have an open database connection
        dbConnection = open();
        if (dbConnection == null) {
            return null;
        }

        try {
            // Accumulate the user's roles
            ArrayList list = new ArrayList();
            stmt = roles(dbConnection, username);
            rs = stmt.executeQuery();
            while (rs.next()) {
                String role = rs.getString(1);
                if (role != null) {
                    list.add(role.trim());
                }
            }
            
            return (list);
        } catch(SQLException e) {
                container.getLogger().error(sm
                        .getString("datasourceRealm.getRoles.exception",
                                           username));
        } finally {
                try {
                    if (rs != null) {
                        rs.close();
                    }
                    if (stmt != null) {
                        stmt.close();
                    }
            } catch(SQLException e) {
                container.getLogger().error(sm
                        .getString("datasourceRealm.getRoles.exception",
                                           username));
                }
        }

        return (null);
    }


The 'finally' of getPassword() looks better:


} finally {
                try {
                    if (rs != null) {
                        rs.close();
                    }
                    if (stmt != null) {
                        stmt.close();
                    }
                    if( !dbConnection.getAutoCommit() ) {
                        dbConnection.commit();             
                    }
                } catch (SQLException e) {
                container.getLogger().error(sm
                        .getString("datasourceRealm.getPassword.exception",
                                           username));
                        
                }
            // Release the database connection we just used
            close(dbConnection);
            dbConnection = null;

        }

-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to