private void setMcfProperties(
        final BaseWrapperManagedConnectionFactory managedConnectionFactory,
        CommonDataSource dataSourceConfig,
        final Statement statement) {

      if (dataSourceConfig.getTransactionIsolation() != null) {
        managedConnectionFactory.setTransactionIsolation(
            dataSourceConfig.getTransactionIsolation().name());
      }

      final DsSecurity security = dataSourceConfig.getSecurity();
      if (security != null) {
        if (security.getUserName() != null) {
          managedConnectionFactory.setUserName(security.getUserName());
        }
        if (security.getPassword() != null) {
          managedConnectionFactory.setPassword(security.getPassword());
        }
      }

      final TimeOut timeOut = dataSourceConfig.getTimeOut();
      if (timeOut != null) {
        if (timeOut.getUseTryLock() != null) {
          managedConnectionFactory.setUseTryLock(timeOut.getUseTryLock().intValue());
        }
        if (timeOut.getQueryTimeout() != null) {
          managedConnectionFactory.setQueryTimeout(timeOut.getQueryTimeout().intValue());
        }
        if (timeOut.isSetTxQueryTimeout()) {
          managedConnectionFactory.setTransactionQueryTimeout(true);
        }
      }

      if (statement != null) {
        if (statement.getTrackStatements() != null) {
          managedConnectionFactory.setTrackStatements(statement.getTrackStatements().name());
        }
        if (statement.isSharePreparedStatements() != null) {
          managedConnectionFactory.setSharePreparedStatements(
              statement.isSharePreparedStatements());
        }
        if (statement.getPreparedStatementsCacheSize() != null) {
          managedConnectionFactory.setPreparedStatementCacheSize(
              statement.getPreparedStatementsCacheSize().intValue());
        }
      }

      final Validation validation = dataSourceConfig.getValidation();
      if (validation != null) {
        if (validation.getCheckValidConnectionSql() != null) {
          managedConnectionFactory.setCheckValidConnectionSQL(
              validation.getCheckValidConnectionSql());
        }
        final Extension validConnectionChecker = validation.getValidConnectionChecker();
        if (validConnectionChecker != null) {
          if (validConnectionChecker.getClassName() != null) {
            managedConnectionFactory.setValidConnectionCheckerClassName(
                validConnectionChecker.getClassName());
          }
          if (validConnectionChecker.getConfigPropertiesMap() != null) {
            managedConnectionFactory.setValidConnectionCheckerProperties(
                buildConfigPropsString(validConnectionChecker.getConfigPropertiesMap()));
          }
        }
        final Extension exceptionSorter = validation.getExceptionSorter();
        if (exceptionSorter != null) {
          if (exceptionSorter.getClassName() != null) {
            managedConnectionFactory.setExceptionSorterClassName(exceptionSorter.getClassName());
          }
          if (exceptionSorter.getConfigPropertiesMap() != null) {
            managedConnectionFactory.setExceptionSorterProperties(
                buildConfigPropsString(exceptionSorter.getConfigPropertiesMap()));
          }
        }
        final Extension staleConnectionChecker = validation.getStaleConnectionChecker();
        if (staleConnectionChecker != null) {
          if (staleConnectionChecker.getClassName() != null) {
            managedConnectionFactory.setStaleConnectionCheckerClassName(
                staleConnectionChecker.getClassName());
          }
          if (staleConnectionChecker.getConfigPropertiesMap() != null) {
            managedConnectionFactory.setStaleConnectionCheckerProperties(
                buildConfigPropsString(staleConnectionChecker.getConfigPropertiesMap()));
          }
        }
      }
    }
  private void writeValidation(XMLExtendedStreamWriter streamWriter, Validation validation)
      throws XMLStreamException {
    if (validation != null) {
      if (validation.getValidConnectionCheckerClassName() != null) {
        streamWriter.writeStartElement(
            Validation.Tag.VALIDCONNECTIONCHECKERCLASSNAME.getLocalName());
        streamWriter.writeCharacters(validation.getValidConnectionCheckerClassName());
        streamWriter.writeEndElement();
      }

      if (validation.getCheckValidConnectionSql() != null) {
        streamWriter.writeStartElement(Validation.Tag.CHECKVALIDCONNECTIONSQL.getLocalName());
        streamWriter.writeCharacters(validation.getCheckValidConnectionSql());
        streamWriter.writeEndElement();
      }

      if (validation.isValidateOnMatch() != null) {
        streamWriter.writeStartElement(Validation.Tag.VALIDATEONMATCH.getLocalName());
        streamWriter.writeCharacters(validation.isValidateOnMatch().toString());
        streamWriter.writeEndElement();
      }

      if (validation.isBackgroundValidation() != null) {
        streamWriter.writeStartElement(Validation.Tag.BACKGROUNDVALIDATION.getLocalName());
        streamWriter.writeCharacters(validation.isBackgroundValidation().toString());
        streamWriter.writeEndElement();
      }

      if (validation.getBackgroundValidationMinutes() != null) {
        streamWriter.writeStartElement(Validation.Tag.BACKGROUNDVALIDATIONMINUTES.getLocalName());
        streamWriter.writeCharacters(validation.getBackgroundValidationMinutes().toString());
        streamWriter.writeEndElement();
      }

      if (validation.isUseFastFail() != null) {
        streamWriter.writeStartElement(Validation.Tag.USEFASTFAIL.getLocalName());
        streamWriter.writeCharacters(validation.isUseFastFail().toString());
        streamWriter.writeEndElement();
      }

      if (validation.getStaleConnectionCheckerClassName() != null) {
        streamWriter.writeStartElement(
            Validation.Tag.STALECONNECTIONCHECKERCLASSNAME.getLocalName());
        streamWriter.writeCharacters(validation.getStaleConnectionCheckerClassName());
        streamWriter.writeEndElement();
      }

      if (validation.getExceptionSorterClassName() != null) {
        streamWriter.writeStartElement(Validation.Tag.EXCEPTIONSORTERCLASSNAME.getLocalName());
        streamWriter.writeCharacters(validation.getExceptionSorterClassName().toString());
        streamWriter.writeEndElement();
      }
    }
  }