private void initializeDatabase()

in service/src/main/java/org/apache/fineract/cn/provisioner/internal/service/TenantService.java [229:265]


  private void initializeDatabase(final Tenant tenant) {
    final DataStoreOption dataStoreOption = provisionerProperties.getDataStoreOption();
    if (dataStoreOption.isEnabled(DataStoreOption.RDBMS)) {

      try (
              final Connection provisionerConnection = DataSourceUtils.createProvisionerConnection(this.environment, META_KEYSPACE);
              final Statement statement = provisionerConnection.createStatement()
      ) {
        final ResultSet resultSet = statement.executeQuery(
            " SELECT * FROM tenants WHERE identifier = '" + tenant.getIdentifier() + "' ");
        if (resultSet.next()) {
          this.logger.warn("Tenant {} already exists !", tenant.getIdentifier());
          throw ServiceException.conflict("Tenant {0} already exists!", tenant.getIdentifier());
        }
        else {
          final DatabaseConnectionInfo databaseConnectionInfo = tenant.getDatabaseConnectionInfo();
          this.logger.info("Create database for tenant {}", tenant.getIdentifier());
          statement.execute("CREATE DATABASE " + databaseConnectionInfo.getDatabaseName().toLowerCase());

          final TenantDAO tenantDAO = new TenantDAO();
          tenantDAO.setIdentifier(tenant.getIdentifier());
          tenantDAO.setDriverClass(databaseConnectionInfo.getDriverClass());
          tenantDAO.setDatabaseName(databaseConnectionInfo.getDatabaseName());
          tenantDAO.setHost(databaseConnectionInfo.getHost());
          tenantDAO.setPort(databaseConnectionInfo.getPort());
          tenantDAO.setUser(databaseConnectionInfo.getUser());
          tenantDAO.setPassword(databaseConnectionInfo.getPassword());
          tenantDAO.insert(provisionerConnection);
        }
      } catch (SQLException sqlex) {
        this.logger.error(sqlex.getMessage(), sqlex);
        throw new IllegalStateException("Could not provision database for tenant {}" + tenant.getIdentifier(), sqlex);
      }
    } else {
      this.logger.warn("Datastore option not chosen, Tenant in PostgreSQL RDBMS not created");
    }
  }