1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.dbcp2;
18
19 import java.sql.Driver;
20 import java.sql.SQLException;
21 import java.util.Properties;
22
23
24
25
26
27
28 final class ConnectionFactoryFactory {
29
30
31
32
33
34
35
36
37
38
39
40 static ConnectionFactory createConnectionFactory(final BasicDataSource basicDataSource, final Driver driver)
41 throws SQLException {
42 final Properties connectionProperties = basicDataSource.getConnectionProperties();
43 final String url = basicDataSource.getUrl();
44
45 final String user = basicDataSource.getUserName();
46 if (user != null) {
47 connectionProperties.put(Constants.KEY_USER, user);
48 } else {
49 basicDataSource.log(String.format("DBCP DataSource configured without a '%s'", Constants.KEY_USER));
50 }
51
52 final String pwd = basicDataSource.getPassword();
53 if (pwd != null) {
54 connectionProperties.put(Constants.KEY_PASSWORD, pwd);
55 } else {
56 basicDataSource.log(String.format("DBCP DataSource configured without a '%s'", Constants.KEY_PASSWORD));
57 }
58 final String connectionFactoryClassName = basicDataSource.getConnectionFactoryClassName();
59 if (connectionFactoryClassName != null) {
60 try {
61 final Class<?> connectionFactoryFromCCL = Class.forName(connectionFactoryClassName);
62 return (ConnectionFactory) connectionFactoryFromCCL
63 .getConstructor(Driver.class, String.class, Properties.class)
64 .newInstance(driver, url, connectionProperties);
65 } catch (final Exception t) {
66 final String message = "Cannot load ConnectionFactory implementation '" + connectionFactoryClassName
67 + "'";
68 basicDataSource.log(message, t);
69 throw new SQLException(message, t);
70 }
71 }
72
73 return new DriverConnectionFactory(driver, url, connectionProperties);
74 }
75
76 }