private static DataSource createRealmDataSource(RealmConfiguration realmConfig) {
    String dataSourceName = realmConfig.getRealmProperty(JDBCRealmConstants.DATASOURCE);
    if (dataSourceName != null) {
      return lookupDataSource(dataSourceName);
    }
    RDBMSConfiguration dsConfig = new RDBMSConfiguration();
    dsConfig.setDriverClassName(realmConfig.getRealmProperty(JDBCRealmConstants.DRIVER_NAME));
    dsConfig.setUrl(realmConfig.getRealmProperty(JDBCRealmConstants.URL));
    dsConfig.setUsername(realmConfig.getRealmProperty(JDBCRealmConstants.USER_NAME));
    dsConfig.setPassword(realmConfig.getRealmProperty(JDBCRealmConstants.PASSWORD));

    if (realmConfig.getRealmProperty(JDBCRealmConstants.MAX_ACTIVE) != null
        && !realmConfig.getRealmProperty(JDBCRealmConstants.MAX_ACTIVE).equals("")) {
      dsConfig.setMaxActive(
          Integer.parseInt(realmConfig.getRealmProperty(JDBCRealmConstants.MAX_ACTIVE)));
    } else {
      dsConfig.setMaxActive(DEFAULT_MAX_ACTIVE);
    }

    if (realmConfig.getRealmProperty(JDBCRealmConstants.MIN_IDLE) != null
        && !realmConfig.getRealmProperty(JDBCRealmConstants.MIN_IDLE).equals("")) {
      dsConfig.setMinIdle(
          Integer.parseInt(realmConfig.getRealmProperty(JDBCRealmConstants.MIN_IDLE)));
    } else {
      dsConfig.setMinIdle(DEFAULT_MIN_IDLE);
    }

    if (realmConfig.getRealmProperty(JDBCRealmConstants.MAX_IDLE) != null
        && !realmConfig.getRealmProperty(JDBCRealmConstants.MAX_IDLE).equals("")) {
      dsConfig.setMinIdle(
          Integer.parseInt(realmConfig.getRealmProperty(JDBCRealmConstants.MAX_IDLE)));
    } else {
      dsConfig.setMinIdle(DEFAULT_MAX_IDLE);
    }

    if (realmConfig.getRealmProperty(JDBCRealmConstants.MAX_WAIT) != null
        && !realmConfig.getRealmProperty(JDBCRealmConstants.MAX_WAIT).equals("")) {
      dsConfig.setMaxWait(
          Integer.parseInt(realmConfig.getRealmProperty(JDBCRealmConstants.MAX_WAIT)));
    } else {
      dsConfig.setMaxWait(DEFAULT_MAX_WAIT);
    }

    if (realmConfig.getRealmProperty(JDBCRealmConstants.TEST_WHILE_IDLE) != null
        && !realmConfig.getRealmProperty(JDBCRealmConstants.TEST_WHILE_IDLE).equals("")) {
      dsConfig.setTestWhileIdle(
          Boolean.parseBoolean(realmConfig.getRealmProperty(JDBCRealmConstants.TEST_WHILE_IDLE)));
    }

    if (realmConfig.getRealmProperty(JDBCRealmConstants.TIME_BETWEEN_EVICTION_RUNS_MILLIS) != null
        && !realmConfig
            .getRealmProperty(JDBCRealmConstants.TIME_BETWEEN_EVICTION_RUNS_MILLIS)
            .equals("")) {
      dsConfig.setTimeBetweenEvictionRunsMillis(
          Integer.parseInt(
              realmConfig.getRealmProperty(JDBCRealmConstants.TIME_BETWEEN_EVICTION_RUNS_MILLIS)));
    }

    if (realmConfig.getRealmProperty(JDBCRealmConstants.MIN_EVIC_TABLE_IDLE_TIME_MILLIS) != null
        && !realmConfig
            .getRealmProperty(JDBCRealmConstants.MIN_EVIC_TABLE_IDLE_TIME_MILLIS)
            .equals("")) {
      dsConfig.setMinEvictableIdleTimeMillis(
          Integer.parseInt(
              realmConfig.getRealmProperty(JDBCRealmConstants.MIN_EVIC_TABLE_IDLE_TIME_MILLIS)));
    }

    if (realmConfig.getRealmProperty(JDBCRealmConstants.VALIDATION_QUERY) != null) {
      dsConfig.setValidationQuery(
          realmConfig.getRealmProperty(JDBCRealmConstants.VALIDATION_QUERY));
    }
    try {
      dataSource = new RDBMSDataSource(dsConfig).getDataSource();
      return dataSource;
    } catch (DataSourceException e) {
      throw new RuntimeException("Error in creating data source: " + e.getMessage(), e);
    }
  }