blob: edbae2fa9c38dab6b72da94b00e758b719d67fd3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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<String> 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<Driver> 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);
}
}
|