From 280f8015d06af1f41a3ef12e8300801c7a5e0d54 Mon Sep 17 00:00:00 2001 From: AviZi Date: Fri, 9 Jun 2017 02:39:56 +0300 Subject: [SDC-29] Amdocs OnBoard 1707 initial commit. Change-Id: Ie4d12a3f574008b792899b368a0902a8b46b5370 Signed-off-by: AviZi --- .../config/impl/ConfigurationDataSource.java | 97 ++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 common/openecomp-common-configuration-management/openecomp-configuration-management-core/src/main/java/org/openecomp/config/impl/ConfigurationDataSource.java (limited to 'common/openecomp-common-configuration-management/openecomp-configuration-management-core/src/main/java/org/openecomp/config/impl/ConfigurationDataSource.java') diff --git a/common/openecomp-common-configuration-management/openecomp-configuration-management-core/src/main/java/org/openecomp/config/impl/ConfigurationDataSource.java b/common/openecomp-common-configuration-management/openecomp-configuration-management-core/src/main/java/org/openecomp/config/impl/ConfigurationDataSource.java new file mode 100644 index 0000000000..edbae2fa9c --- /dev/null +++ b/common/openecomp-common-configuration-management/openecomp-configuration-management-core/src/main/java/org/openecomp/config/impl/ConfigurationDataSource.java @@ -0,0 +1,97 @@ +package org.openecomp.config.impl; + +import org.apache.commons.configuration2.ImmutableConfiguration; +import org.apache.commons.dbcp2.BasicDataSource; +import org.openecomp.config.ConfigurationUtils; +import org.openecomp.config.Constants; + +import java.sql.Driver; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.ServiceLoader; +import java.util.Set; + +/** + * The type Configuration data source. + */ +public final class ConfigurationDataSource { + + private static BasicDataSource configDBDatasource = null; + private static Set validCallers = Collections.unmodifiableSet(new HashSet<>( + Arrays.asList(ConfigurationUtils.class.getName(), CliConfigurationImpl.class.getName()))); + + static { + try { + configDBDatasource = initDataSource(); + } catch (Exception exception) { + System.err.println("Datasource initialization error. Configuration management will be using in-memory persistence."); + } + } + + /** + * Lookup basic data source. + * + * @return the basic data source + * @throws Exception the exception + */ + public static BasicDataSource lookup() throws Exception { + if (validCallers.contains(Thread.currentThread().getStackTrace()[2].getClassName())) { + return configDBDatasource; + } else { + return null; + } + } + + /** + * Init data source basic data source. + * + * @return the basic data source + * @throws Exception the exception + */ + public static BasicDataSource initDataSource() throws Exception { + ImmutableConfiguration dbConfig = ConfigurationRepository.lookup() + .getConfigurationFor(Constants.DEFAULT_TENANT, Constants.DB_NAMESPACE); + BasicDataSource datasource = new BasicDataSource(); + String driverClassName = dbConfig.getString("driverClassName"); + String jdbcUrl = dbConfig.getString("jdbcURL"); + if (!isDriverSuitable(driverClassName, jdbcUrl)) { + driverClassName = getDriverFor(jdbcUrl); + } + datasource.setDriverClassName(driverClassName); + datasource.setUrl(jdbcUrl); + String dbuser = dbConfig.getString("dbuser"); + String dbpassword = dbConfig.getString("dbpassword"); + if (dbuser != null && dbuser.trim().length() > 0) { + datasource.setUsername(dbuser); + } + if (dbpassword != null && dbpassword.trim().length() > 0) { + datasource.setPassword(dbpassword); + } + return datasource; + } + + private static boolean isDriverSuitable(String driverClassName, String url) { + if (driverClassName == null || driverClassName.trim().length() == 0) { + return false; + } + try { + Driver driver = Driver.class.cast(Class.forName(driverClassName).newInstance()); + return driver.acceptsURL(url); + } catch (Exception exception) { + exception.printStackTrace(); + return false; + } + } + + private static String getDriverFor(String url) throws Exception { + ServiceLoader loader = ServiceLoader.load(Driver.class); + for (Driver driver : loader) { + if (driver.acceptsURL(url)) { + return driver.getClass().getName(); + } + } + throw new RuntimeException("No Suitable driver found for " + url); + } + +} -- cgit 1.2.3-korg