@Override
  public void passivateObject(PooledObject<PoolableConnection> p) throws Exception {

    validateLifetime(p);

    PoolableConnection conn = p.getObject();
    Boolean connAutoCommit = null;
    if (rollbackOnReturn) {
      connAutoCommit = Boolean.valueOf(conn.getAutoCommit());
      if (!connAutoCommit.booleanValue() && !conn.isReadOnly()) {
        conn.rollback();
      }
    }

    conn.clearWarnings();

    // DBCP-97 / DBCP-399 / DBCP-351 Idle connections in the pool should
    // have autoCommit enabled
    if (enableAutoCommitOnReturn) {
      if (connAutoCommit == null) {
        connAutoCommit = Boolean.valueOf(conn.getAutoCommit());
      }
      if (!connAutoCommit.booleanValue()) {
        conn.setAutoCommit(true);
      }
    }

    conn.passivate();
  }