1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.appender.db.jdbc;
18
19 import java.sql.Connection;
20 import java.sql.SQLException;
21 import javax.naming.InitialContext;
22 import javax.naming.NamingException;
23 import javax.sql.DataSource;
24
25 import org.apache.logging.log4j.Logger;
26 import org.apache.logging.log4j.core.config.plugins.Plugin;
27 import org.apache.logging.log4j.core.config.plugins.PluginAttr;
28 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
29 import org.apache.logging.log4j.status.StatusLogger;
30
31
32
33
34 @Plugin(name = "DataSource", category = "Core", elementType = "connectionSource", printObject = true)
35 public final class DataSourceConnectionSource implements ConnectionSource {
36 private static final Logger LOGGER = StatusLogger.getLogger();
37
38 private final DataSource dataSource;
39 private final String description;
40
41 private DataSourceConnectionSource(final String dataSourceName, final DataSource dataSource) {
42 this.dataSource = dataSource;
43 this.description = "dataSource{ name=" + dataSourceName + ", value=" + dataSource + " }";
44 }
45
46 @Override
47 public Connection getConnection() throws SQLException {
48 return this.dataSource.getConnection();
49 }
50
51 @Override
52 public String toString() {
53 return this.description;
54 }
55
56
57
58
59
60
61
62
63 @PluginFactory
64 public static DataSourceConnectionSource createConnectionSource(@PluginAttr("jndiName") final String jndiName) {
65 if (jndiName == null || jndiName.length() == 0) {
66 LOGGER.error("No JNDI name provided.");
67 return null;
68 }
69
70 try {
71 final InitialContext context = new InitialContext();
72 final DataSource dataSource = (DataSource) context.lookup(jndiName);
73 if (dataSource == null) {
74 LOGGER.error("No data source found with JNDI name [" + jndiName + "].");
75 return null;
76 }
77
78 return new DataSourceConnectionSource(jndiName, dataSource);
79 } catch (final NamingException e) {
80 LOGGER.error(e.getMessage(), e);
81 return null;
82 }
83 }
84 }