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");
}
}