FINCN-180 restore tenant-specific data sources functionality
diff --git a/README.md b/README.md
index 341a893..b8ccbac 100644
--- a/README.md
+++ b/README.md
@@ -11,11 +11,6 @@
Install PostgreSQL as described at
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-16-04.
-After installation you need to create the meta database:
-
- sudo -i -u postgres psql
- CREATE DATABASE system_console;
-
## Multi-tenancy
Multi-tenancy is reached by providing separate data storage on a per tenant basis.
diff --git a/src/main/java/org/apache/fineract/cn/postgresql/config/EclipseLinkJpaConfiguration.java b/src/main/java/org/apache/fineract/cn/postgresql/config/EclipseLinkJpaConfiguration.java
index 0ca5428..135d263 100644
--- a/src/main/java/org/apache/fineract/cn/postgresql/config/EclipseLinkJpaConfiguration.java
+++ b/src/main/java/org/apache/fineract/cn/postgresql/config/EclipseLinkJpaConfiguration.java
@@ -18,11 +18,13 @@
*/
package org.apache.fineract.cn.postgresql.config;
+import org.apache.fineract.cn.postgresql.util.EclipseLinkConstants;
import org.eclipse.persistence.config.BatchWriting;
import org.eclipse.persistence.config.PersistenceUnitProperties;
import org.eclipse.persistence.config.TargetDatabase;
import org.eclipse.persistence.logging.SessionLog;
import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
@@ -53,8 +55,10 @@
"org.apache.fineract.cn.postgresql.util"
})
public class EclipseLinkJpaConfiguration extends JpaBaseConfiguration {
-
-
+
+ @Value(EclipseLinkConstants.ECLIPSE_LINK_SHOW_SQL + ":" + EclipseLinkConstants.ECLIPSE_LINK_SHOW_SQL_DEFAULT)
+ private Boolean eclipseLinkShowSql;
+
protected EclipseLinkJpaConfiguration(DataSource dataSource, JpaProperties properties, ObjectProvider<JtaTransactionManager> jtaTransactionManagerProvider) {
super(dataSource, properties, jtaTransactionManagerProvider);
}
@@ -75,7 +79,7 @@
protected AbstractJpaVendorAdapter createJpaVendorAdapter() {
EclipseLinkJpaVendorAdapter vendorAdapter = new EclipseLinkJpaVendorAdapter();
vendorAdapter.setDatabasePlatform("org.eclipse.persistence.platform.database.PostgreSQLPlatform");
- vendorAdapter.setShowSql(true); // Todo: remove sql log
+ vendorAdapter.setShowSql(eclipseLinkShowSql);
vendorAdapter.setDatabase(Database.POSTGRESQL);
vendorAdapter.setGenerateDdl(false);
return vendorAdapter;
diff --git a/src/main/java/org/apache/fineract/cn/postgresql/config/PostgreSQLTenantBasedJavaConfiguration.java b/src/main/java/org/apache/fineract/cn/postgresql/config/PostgreSQLTenantBasedJavaConfiguration.java
index a11cd35..2848b28 100644
--- a/src/main/java/org/apache/fineract/cn/postgresql/config/PostgreSQLTenantBasedJavaConfiguration.java
+++ b/src/main/java/org/apache/fineract/cn/postgresql/config/PostgreSQLTenantBasedJavaConfiguration.java
@@ -24,6 +24,7 @@
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@@ -33,13 +34,14 @@
@Configuration
@ConditionalOnProperty(prefix = "postgresql", name = "enabled", matchIfMissing = true)
public class PostgreSQLTenantBasedJavaConfiguration {
+ @Bean
public DataSource dataSource(@Qualifier(PostgreSQLConstants.LOGGER_NAME) final Logger logger,
final MetaDataSourceWrapper metaDataSource) {
- final ContextAwareRoutingDataSource dataSources = new ContextAwareRoutingDataSource(logger, JdbcUrlBuilder.DatabaseType.POSTGRESQL);
- dataSources.setMetaDataSource(metaDataSource.getMetaDataSource());
- final HashMap<Object, Object> targetDataSources = new HashMap<>();
- dataSources.setTargetDataSources(targetDataSources);
- return dataSources;
+ final ContextAwareRoutingDataSource dataSource = new ContextAwareRoutingDataSource(logger, JdbcUrlBuilder.DatabaseType.POSTGRESQL);
+ dataSource.setMetaDataSource(metaDataSource.getMetaDataSource());
+ final HashMap<Object, Object> tenantDataSources = new HashMap<>();
+ dataSource.setTargetDataSources(tenantDataSources);
+ return dataSource;
}
}
diff --git a/src/main/java/org/apache/fineract/cn/postgresql/domain/ContextAwareRoutingDataSource.java b/src/main/java/org/apache/fineract/cn/postgresql/domain/ContextAwareRoutingDataSource.java
index 72b310a..a14f98d 100644
--- a/src/main/java/org/apache/fineract/cn/postgresql/domain/ContextAwareRoutingDataSource.java
+++ b/src/main/java/org/apache/fineract/cn/postgresql/domain/ContextAwareRoutingDataSource.java
@@ -56,7 +56,7 @@
@Override
protected Object determineCurrentLookupKey() {
- return TenantContextHolder.checkedGetIdentifier();
+ return TenantContextHolder.identifier().orElse(null);
}
@Override
@@ -118,4 +118,4 @@
throw new IllegalArgumentException("Could not fetch information for tenant '" + tenant.getIdentifier() + "'", ex);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/fineract/cn/postgresql/util/EclipseLinkConstants.java b/src/main/java/org/apache/fineract/cn/postgresql/util/EclipseLinkConstants.java
new file mode 100644
index 0000000..4719a70
--- /dev/null
+++ b/src/main/java/org/apache/fineract/cn/postgresql/util/EclipseLinkConstants.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.postgresql.util;
+
+public interface EclipseLinkConstants {
+
+ String ECLIPSE_LINK_SHOW_SQL = "eclipseLink.showSql";
+
+ String ECLIPSE_LINK_SHOW_SQL_DEFAULT = "true";
+}