rollback();
    public synchronized void close() throws SQLException {        if (s_cat.isDebugEnabled()) {            // There are some warnings in here, but they are            // only checked for if debug is enabled because            // they would slow things down if always checked            // for.            Throwable t = new Throwable("Connection close stack trace for " +                                        "debugging");            synchronized (dbgConnections) {                if (dbgConnections.size() >                    ConnectionManager.getConnectionPoolSize()) {                    s_cat.warn("connection close: un-closed connections " +                               "list exceeded pool size: " + dbgConnections);                }                if (!dbgConnections.contains(m_conn)) {                    s_cat.warn("connection close: closing connection that " +                               "was never opened or has already " +                               "been closed: " + m_conn + " from " + this);                } else {                    dbgConnections.remove(m_conn);                }                s_cat.debug("un-closed connection count is now " +                            dbgConnections.size() + ", connection was held " +                            "open for " +                            (System.currentTimeMillis() - dbgTimestamp) +                            " ms.", t);            }        }        m_softClose = false;        // put the connection back in the pool or just close it        try {            if (m_conn != null) {                if (m_pool != null ) {                    m_pool.returnToPool(m_conn);                } else {                    m_conn.close();                }                m_conn = null;            }        } catch (SQLException e) {            SQLExceptionHandler.throwSQLException(e);            throw e;  // code should never get here, but just in case        }    }