public static boolean isValid(DatasourceConnection dc, Boolean autoCommit) {
    try {
      if (dc.getConnection().isClosed()) return false;
    } catch (Throwable t) {
      return false;
    }

    try {
      if (dc.getDatasource().validate() && !DataSourceUtil.isValid(dc, 10)) return false;
    } catch (Throwable t) {
    } // not all driver support this, because of that we ignore a error here, also protect from java
      // 5

    try {
      if (autoCommit != null) dc.getConnection().setAutoCommit(autoCommit.booleanValue());
    } catch (Throwable t) {
      return false;
    }

    return true;
  }
  public void releaseDatasourceConnection(DatasourceConnection dc, boolean closeIt) {
    if (dc == null) return;
    DCStack stack = getDCStack(dc.getDatasource(), dc.getUsername(), dc.getPassword());
    synchronized (stack) {
      if (closeIt) IOUtil.closeEL(dc.getConnection());
      else stack.add(dc);
      int max = dc.getDatasource().getConnectionLimit();

      if (max != -1) {
        _dec(dc.getDatasource());
        stack.notify();

      } else _dec(dc.getDatasource());
    }
  }