Fixing creation of database seshat and table tenants
diff --git a/service/src/main/java/org/apache/fineract/cn/provisioner/internal/repository/ProvisionerInitializer.java b/service/src/main/java/org/apache/fineract/cn/provisioner/internal/repository/ProvisionerInitializer.java
index 8cd6ffb..8c86dcf 100644
--- a/service/src/main/java/org/apache/fineract/cn/provisioner/internal/repository/ProvisionerInitializer.java
+++ b/service/src/main/java/org/apache/fineract/cn/provisioner/internal/repository/ProvisionerInitializer.java
@@ -32,6 +32,7 @@
import java.util.Date;
import java.util.UUID;
import javax.annotation.PostConstruct;
+
import org.apache.commons.lang.StringUtils;
import org.apache.fineract.cn.api.util.ApiConstants;
import org.apache.fineract.cn.cassandra.core.CassandraSessionProvider;
@@ -83,6 +84,7 @@
this.initializeCassandra();
this.initializeDatabase(PostgreSQLConstants.POSTGRESQL_DATABASE_NAME_DEFAULT);
+ this.createTableTenants();
//this.initializeDatabase("playground");
} catch (final Exception ex) {
throw new IllegalStateException("Could not initialize service!", ex);
@@ -200,37 +202,54 @@
this.logger.info("Creating meta database {} ", postgresDbName);
try (
- final Connection connection = DataSourceUtils.createProvisionerConnection(this.environment, postgresDbName);
+ final Connection connection = DataSourceUtils.createProvisionerConnection(this.environment, "postgres");
+ final Statement testStatement = connection.createStatement();
final Statement statement = connection.createStatement()
- ) {
+ ) {
+ final ResultSet validityQuery = testStatement.executeQuery("SELECT 1");
+ if (validityQuery.next()){
+ this.logger.info("Connection to database postgres established");
final ResultSet findDB = statement.executeQuery("SELECT datname FROM pg_database WHERE datname = '" + postgresDbName + "'");
if (!findDB.next()) {
- this.logger.info("Database {} does not exists, creating the database now.", postgresDbName);
+ this.logger.info("Database {} does not exists, creating the database {} now.", postgresDbName);
statement.execute("CREATE DATABASE " + postgresDbName);
} else {
- this.logger.info("Sorry, Database {} does exists.", postgresDbName);
+ this.logger.info("Database {} already exists.", postgresDbName);
}
-
- try (
- final Connection metaConnection = DataSourceUtils.createProvisionerConnection(this.environment, postgresDbName);
- final Statement metaStatement = metaConnection.createStatement()
- ) {
- this.createTableTenants(metaStatement, postgresDbName);
+ } else {
+ this.logger.warn("Could not connect to database postgres");
+ throw new IllegalMonitorStateException("Could not connect to database postgres");
}
}
}
- private void createTableTenants(final Statement statement, final String databaseName) throws SQLException {
- this.logger.info("Create tenants table if it does not exists");
- statement.execute("CREATE TABLE IF NOT EXISTS tenants (" +
- " identifier VARCHAR(32) NOT NULL," +
- " driver_class VARCHAR(255) NOT NULL," +
- " database_name VARCHAR(32) NOT NULL," +
- " host VARCHAR(512) NOT NULL," +
- " port VARCHAR(5) NOT NULL," +
- " a_user VARCHAR(32) NOT NULL," +
- " pwd VARCHAR(32) NOT NULL," +
- " PRIMARY KEY (identifier)" +
- ")");
+ private void createTableTenants() throws SQLException {
+ final String databaseName = PostgreSQLConstants.POSTGRESQL_DATABASE_NAME_DEFAULT;
+
+ this.logger.info("Create tenants table in database {} if it does not exists", databaseName);
+ try (
+ final Connection provisionerConnection = DataSourceUtils.createProvisionerConnection(this.environment, databaseName);
+ final Statement testStatement = provisionerConnection.createStatement();
+ final Statement findSeshatStatement = provisionerConnection.createStatement()
+ ) {
+ final ResultSet validityQuery = testStatement.executeQuery("SELECT 1");
+ if (validityQuery.next()) {
+ this.logger.info("Connection to database {} established", databaseName);
+ final ResultSet resultSet = findSeshatStatement.executeQuery("SELECT datname FROM pg_database where datname = '"+ databaseName +"'");
+ if (resultSet.next()) {
+ this.logger.info("Database {} exists !", databaseName);
+ this.logger.info("Creating table tenants now");
+ findSeshatStatement.execute("CREATE TABLE IF NOT EXISTS tenants (identifier VARCHAR(32) NOT NULL, driver_class VARCHAR(255) NOT NULL, database_name VARCHAR(32) NOT NULL, host VARCHAR(512) NOT NULL, port VARCHAR(5) NOT NULL, a_user VARCHAR(32) NOT NULL, pwd VARCHAR(32) NOT NULL, PRIMARY KEY (identifier))");
+ } else {
+ this.logger.warn("Database {} does not exists !", databaseName);
+ }
+ } else {
+ this.logger.warn("Could not connect to database seshat");
+ throw new IllegalMonitorStateException("Could not connect to database seshat");
+ }
+ } catch (SQLException sqlex) {
+ this.logger.error(sqlex.getMessage(), sqlex);
+ throw new IllegalStateException("Could not create table tenants");
+ }
}
-}
+}
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/provisioner/internal/util/DataSourceUtils.java b/service/src/main/java/org/apache/fineract/cn/provisioner/internal/util/DataSourceUtils.java
index 41be4cb..3560830 100644
--- a/service/src/main/java/org/apache/fineract/cn/provisioner/internal/util/DataSourceUtils.java
+++ b/service/src/main/java/org/apache/fineract/cn/provisioner/internal/util/DataSourceUtils.java
@@ -67,12 +67,13 @@
databaseConnectionInfo.setPort(environment.getProperty("postgresql.port"));
databaseConnectionInfo.setUser(environment.getProperty("postgresql.user"));
databaseConnectionInfo.setPassword(environment.getProperty("postgresql.password"));
- final Connection connection = DataSourceUtils.create(databaseConnectionInfo);
+
try {
+ final Connection connection = DataSourceUtils.create(databaseConnectionInfo);
connection.setAutoCommit(true);
- } catch (SQLException e) {
- // do nothing
+ return connection;
+ } catch (SQLException error) {
+ throw new IllegalStateException(error.getMessage(), error);
}
- return connection;
}
}
diff --git a/service/src/main/resources/application.yaml b/service/src/main/resources/application.yaml
index 475d9df..d584204 100644
--- a/service/src/main/resources/application.yaml
+++ b/service/src/main/resources/application.yaml
@@ -48,7 +48,6 @@
spring:
datasource:
driver-class-name: org.postgresql.Driver
- platform: postgres
url: jdbc:postgresql://localhost:5432/seshat
username: postgres
password: postgres
\ No newline at end of file