You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by na...@apache.org on 2016/02/16 14:54:53 UTC

incubator-fineract git commit: moving driver info to a property file

Repository: incubator-fineract
Updated Branches:
  refs/heads/develop 9c27413cf -> 1c0e5502e


moving driver info to a property file


Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/1c0e5502
Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/1c0e5502
Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/1c0e5502

Branch: refs/heads/develop
Commit: 1c0e5502e0832f56c09c34f1ad3e6d8616e825fd
Parents: 9c27413
Author: unknown <na...@confluxtechnologies.com>
Authored: Tue Feb 16 18:41:16 2016 +0530
Committer: unknown <na...@confluxtechnologies.com>
Committed: Tue Feb 16 18:41:33 2016 +0530

----------------------------------------------------------------------
 .../properties/basicauth/application.properties | 18 +++++
 .../properties/oauth/application.properties     | 18 +++++
 .../boot/AbstractApplicationConfiguration.java  |  2 +
 .../core/boot/JDBCDriverConfig.java             | 74 ++++++++++++++++++++
 .../core/boot/db/DataSourceConfiguration.java   |  9 ++-
 .../core/boot/db/DataSourceProperties.java      | 13 ++--
 .../FineractPlatformTenantConnection.java       |  6 +-
 .../service/TenantDatabaseUpgradeService.java   | 11 +--
 .../TomcatJdbcDataSourcePerTenantService.java   | 10 ++-
 .../resources/META-INF/spring/jdbc.properties   | 23 ++++++
 10 files changed, 164 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/1c0e5502/fineract-provider/properties/basicauth/application.properties
----------------------------------------------------------------------
diff --git a/fineract-provider/properties/basicauth/application.properties b/fineract-provider/properties/basicauth/application.properties
index adbef74..d1fad00 100644
--- a/fineract-provider/properties/basicauth/application.properties
+++ b/fineract-provider/properties/basicauth/application.properties
@@ -1,2 +1,20 @@
+#
+# 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.
+#
 
 spring.profiles.default=basicauth
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/1c0e5502/fineract-provider/properties/oauth/application.properties
----------------------------------------------------------------------
diff --git a/fineract-provider/properties/oauth/application.properties b/fineract-provider/properties/oauth/application.properties
index 05ef979..4d266fe 100644
--- a/fineract-provider/properties/oauth/application.properties
+++ b/fineract-provider/properties/oauth/application.properties
@@ -1,3 +1,21 @@
+#
+# 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.
+#
 
 spring.profiles.default=basicauth
 spring.profiles.active=oauth
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/1c0e5502/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/AbstractApplicationConfiguration.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/AbstractApplicationConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/AbstractApplicationConfiguration.java
index 282eb33..2d2e312 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/AbstractApplicationConfiguration.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/AbstractApplicationConfiguration.java
@@ -26,6 +26,7 @@ import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfigurat
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 import org.springframework.context.annotation.ImportResource;
+import org.springframework.context.annotation.PropertySource;
 
 /**
  * Base Spring Configuration with what's common to all Configuration subclasses.
@@ -41,6 +42,7 @@ import org.springframework.context.annotation.ImportResource;
 @Configuration
 @Import({ WebXmlConfiguration.class, WebXmlOauthConfiguration.class, WebFrontEndConfiguration.class })
 @ImportResource({ "classpath*:META-INF/spring/appContext.xml" })
+@PropertySource(value="classpath:META-INF/spring/jdbc.properties")
 @EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class,
 		HibernateJpaAutoConfiguration.class,
 		DataSourceTransactionManagerAutoConfiguration.class,

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/1c0e5502/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/JDBCDriverConfig.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/JDBCDriverConfig.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/JDBCDriverConfig.java
new file mode 100644
index 0000000..854f120
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/JDBCDriverConfig.java
@@ -0,0 +1,74 @@
+/**
+ * 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.infrastructure.core.boot;
+
+import javax.annotation.PostConstruct;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Service;
+
+@Service
+public class JDBCDriverConfig {
+
+	private final static String DRIVER_CLASS_PROPERTYNAME = "DRIVERCLASS_NAME" ;
+	private final static String PROTOCOL_PROPERTYNAME = "PROTOCOL" ;
+	private final static String SUBPROTOCOL_PROPERTYNAME = "SUB_PROTOCOL" ;
+	private final static String PORT_PROPERTYNAME = "PORT" ;
+	
+	private String driverClassName ;
+	private String protocol ;
+	private String subProtocol ;
+	private Integer port ;
+	
+	@Autowired ApplicationContext context ;
+	
+	@PostConstruct
+	protected void init() {
+		Environment environment = context.getEnvironment() ;
+		driverClassName = (String)environment.getProperty(DRIVER_CLASS_PROPERTYNAME) ;
+		protocol = (String) environment.getProperty(PROTOCOL_PROPERTYNAME) ;
+		subProtocol = (String) environment.getProperty(SUBPROTOCOL_PROPERTYNAME) ;
+		port = Integer.parseInt((String) environment.getProperty(PORT_PROPERTYNAME)) ;
+	}
+	
+    public String getDriverClassName() {
+    	return this.driverClassName ;
+    }
+    
+    public String getProtocol() {
+    	return this.protocol ;
+    }
+
+    public String getSubProtocol() {
+    	return this.subProtocol ;
+    }
+    
+    public Integer getPort() {
+    	return this.port ;
+    }
+    
+    public String constructProtocol(String schemaServer, String schemaServerPort, String schemaName) {
+    	final String url = new StringBuilder(protocol).append(":").append(subProtocol).append("://").append(schemaServer).append(':').append(schemaServerPort)
+                .append('/').append(schemaName).toString();
+        return url;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/1c0e5502/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/db/DataSourceConfiguration.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/db/DataSourceConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/db/DataSourceConfiguration.java
index df8dac4..fe5f9bb 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/db/DataSourceConfiguration.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/db/DataSourceConfiguration.java
@@ -20,9 +20,11 @@ package org.apache.fineract.infrastructure.core.boot.db;
 
 import javax.sql.DataSource;
 
+import org.apache.fineract.infrastructure.core.boot.JDBCDriverConfig;
 import org.apache.tomcat.jdbc.pool.PoolConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -33,10 +35,12 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 public class DataSourceConfiguration {
 	private static final Logger logger = LoggerFactory.getLogger(DataSourceConfiguration.class);
-
+	
+	@Autowired JDBCDriverConfig config ;
+	
     @Bean
     public DataSourceProperties dataSourceProperties() {
-	return new DataSourceProperties();
+	return new DataSourceProperties(config.getDriverClassName(), config.getProtocol(), config.getSubProtocol(), config.getPort());
     }
 
     @Bean
@@ -50,5 +54,4 @@ public class DataSourceConfiguration {
     protected DataSourceProperties getProperties() {
         return dataSourceProperties();
     }
-
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/1c0e5502/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/db/DataSourceProperties.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/db/DataSourceProperties.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/db/DataSourceProperties.java
index 33800bd..24276f7 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/db/DataSourceProperties.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/db/DataSourceProperties.java
@@ -21,7 +21,6 @@ package org.apache.fineract.infrastructure.core.boot.db;
 import javax.validation.constraints.NotNull;
 
 import org.apache.tomcat.jdbc.pool.PoolProperties;
-import org.drizzle.jdbc.DrizzleDriver;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.util.StringUtils;
 
@@ -64,14 +63,12 @@ public class DataSourceProperties extends PoolProperties {
     @Value("${" + SUBPROTOCOL + ":mysql:thin}")
     private volatile @NotNull String jdbcSubprotocol;
 
-
-    public DataSourceProperties() {
+    public DataSourceProperties(String driverClassName, String protocol, String subProtocol, Integer port) {
         super();
-
-        // default to save us from re-specifying this; note that it can still be
-        // overridden
-        setDriverClassName(DrizzleDriver.class.getName());
-
+        setDriverClassName(driverClassName);
+        this.jdbcProtocol = protocol ;
+        this.jdbcSubprotocol = subProtocol ;
+        this.port = port ;
         setDefaults();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/1c0e5502/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenantConnection.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenantConnection.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenantConnection.java
index 9e43f24..af5d493 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenantConnection.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenantConnection.java
@@ -77,11 +77,13 @@ public class FineractPlatformTenantConnection {
         this.testOnBorrow=tesOnBorrow;
     }
 
-    public String databaseURL() {
+    //The Connection Protocol should be built based on jdbc.properties. We can't hard code this here and also, constructing protocol is not this class
+    //responsibility
+    /*public String databaseURL() {
         final String url = new StringBuilder("jdbc:mysql:thin://").append(this.schemaServer).append(':').append(this.schemaServerPort)
                 .append('/').append(this.schemaName).toString();
         return url;
-    }
+    }*/
     
     /**
      * @return the schemaServer

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/1c0e5502/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TenantDatabaseUpgradeService.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TenantDatabaseUpgradeService.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TenantDatabaseUpgradeService.java
index 074ab18..8bf9199 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TenantDatabaseUpgradeService.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TenantDatabaseUpgradeService.java
@@ -23,6 +23,7 @@ import java.util.List;
 import javax.annotation.PostConstruct;
 import javax.sql.DataSource;
 
+import org.apache.fineract.infrastructure.core.boot.JDBCDriverConfig;
 import org.apache.fineract.infrastructure.core.boot.db.TenantDataSourcePortFixService;
 import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
 import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenantConnection;
@@ -42,11 +43,12 @@ import com.googlecode.flyway.core.util.jdbc.DriverDataSource;
 @Service
 public class TenantDatabaseUpgradeService {
 
-	private final String DRIVER_CLASS = "org.drizzle.jdbc.DrizzleDriver" ;
     private final TenantDetailsService tenantDetailsService;
     protected final DataSource tenantDataSource;
     protected final TenantDataSourcePortFixService tenantDataSourcePortFixService;
-
+    
+    @Autowired private JDBCDriverConfig driverConfig ;
+    
     @Autowired
     public TenantDatabaseUpgradeService(final TenantDetailsService detailsService,
             @Qualifier("tenantDataSourceJndi") final DataSource dataSource, TenantDataSourcePortFixService tenantDataSourcePortFixService) {
@@ -63,14 +65,15 @@ public class TenantDatabaseUpgradeService {
             final FineractPlatformTenantConnection connection = tenant.getConnection();
             if (connection.isAutoUpdateEnabled()) {
                 final Flyway flyway = new Flyway();
-                DriverDataSource source = new DriverDataSource(DRIVER_CLASS, connection.databaseURL(), connection.getSchemaUsername(), connection.getSchemaPassword()) ;
+                String connectionProtocol = driverConfig.constructProtocol(connection.getSchemaServer(), connection.getSchemaServerPort(), connection.getSchemaName()) ;
+                DriverDataSource source = new DriverDataSource(driverConfig.getDriverClassName(), connectionProtocol, connection.getSchemaUsername(), connection.getSchemaPassword()) ;
                 flyway.setDataSource(source);
                 flyway.setLocations("sql/migrations/core_db");
                 flyway.setOutOfOrder(true);
                 try {
                     flyway.migrate();
                 } catch (FlywayException e) {
-                    String betterMessage = e.getMessage() + "; for Tenant DB URL: " + connection.databaseURL() + ", username: "
+                    String betterMessage = e.getMessage() + "; for Tenant DB URL: " + connectionProtocol + ", username: "
                             + connection.getSchemaPassword();
                     throw new FlywayException(betterMessage, e.getCause());
                 }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/1c0e5502/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TomcatJdbcDataSourcePerTenantService.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TomcatJdbcDataSourcePerTenantService.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TomcatJdbcDataSourcePerTenantService.java
index 4227bcc..34782a4 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TomcatJdbcDataSourcePerTenantService.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TomcatJdbcDataSourcePerTenantService.java
@@ -23,6 +23,7 @@ import java.util.Map;
 
 import javax.sql.DataSource;
 
+import org.apache.fineract.infrastructure.core.boot.JDBCDriverConfig;
 import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
 import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenantConnection;
 import org.apache.tomcat.jdbc.pool.PoolConfiguration;
@@ -46,6 +47,9 @@ public class TomcatJdbcDataSourcePerTenantService implements RoutingDataSourceSe
     private final DataSource tenantDataSource;
 
     @Autowired
+    private JDBCDriverConfig driverConfig ;
+    
+    @Autowired
     public TomcatJdbcDataSourcePerTenantService(final @Qualifier("tenantDataSourceJndi") DataSource tenantDataSource) {
         this.tenantDataSource = tenantDataSource;
     }
@@ -83,10 +87,10 @@ public class TomcatJdbcDataSourcePerTenantService implements RoutingDataSourceSe
         // http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency
 
         // see also org.apache.fineract.DataSourceProperties.setDefaults()
-
-        final String jdbcUrl = tenantConnectionObj.databaseURL();
+    	 String jdbcUrl = this.driverConfig.constructProtocol(tenantConnectionObj.getSchemaServer(), tenantConnectionObj.getSchemaServerPort(), tenantConnectionObj.getSchemaName()) ;
+        //final String jdbcUrl = tenantConnectionObj.databaseURL();
         final PoolConfiguration poolConfiguration = new PoolProperties();
-        poolConfiguration.setDriverClassName("org.drizzle.jdbc.DrizzleDriver");
+        poolConfiguration.setDriverClassName(this.driverConfig.getDriverClassName());
         poolConfiguration.setName(tenantConnectionObj.getSchemaName() + "_pool");
         poolConfiguration.setUrl(jdbcUrl);
         poolConfiguration.setUsername(tenantConnectionObj.getSchemaUsername());

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/1c0e5502/fineract-provider/src/main/resources/META-INF/spring/jdbc.properties
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/resources/META-INF/spring/jdbc.properties b/fineract-provider/src/main/resources/META-INF/spring/jdbc.properties
new file mode 100644
index 0000000..8d64dc5
--- /dev/null
+++ b/fineract-provider/src/main/resources/META-INF/spring/jdbc.properties
@@ -0,0 +1,23 @@
+#
+# 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.
+#
+
+DRIVERCLASS_NAME:org.drizzle.jdbc.DrizzleDriver
+PROTOCOL:jdbc
+SUB_PROTOCOL:mysql:thin
+PORT:3306
\ No newline at end of file