private static void setExtensionIfNotNull(
     final ModelNode dsModel,
     final String extensionclassname,
     final String extensionProperties,
     final org.jboss.jca.common.api.metadata.common.Extension extension) {
   if (extension != null) {
     setStringIfNotNull(dsModel, extensionclassname, extension.getClassName());
     if (extension.getConfigPropertiesMap() != null) {
       for (Map.Entry<String, String> entry : extension.getConfigPropertiesMap().entrySet()) {
         dsModel.get(extensionProperties, entry.getKey()).set(entry.getValue());
       }
     }
   }
 }
    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()));
          }
        }
      }
    }