docs: private void initializeDataSource()
     {
        final String jdbcUrl = config.getJdbcUrl();
        final String username = config.getUsername();
        final String password = config.getPassword();
        final String dsClassName = config.getDataSourceClassName();
        final String driverClassName = config.getDriverClassName();
        final String dataSourceJNDI = config.getDataSourceJNDI();
        final Properties dataSourceProperties = config.getDataSourceProperties();
  
        DataSource ds = config.getDataSource();
        if (dsClassName != null && ds == null) {
           ds = createInstance(dsClassName, DataSource.class);
           PropertyElf.setTargetFromProperties(ds, dataSourceProperties);
        }
        else if (jdbcUrl != null && ds == null) {
           ds = new DriverDataSource(jdbcUrl, driverClassName, dataSourceProperties, username, password);
        }
        else if (dataSourceJNDI != null && ds == null) {
           try {
              InitialContext ic = new InitialContext();
              ds = (DataSource) ic.lookup(dataSourceJNDI);
           } catch (NamingException e) {
              throw new PoolInitializationException(e);
           }
        }
  
        if (ds != null) {
           setLoginTimeout(ds);
           createNetworkTimeoutExecutor(ds, dsClassName, jdbcUrl);
        }
  
        this.dataSource = ds;
     }