1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.log4j.db;
19
20 import java.sql.Connection;
21 import java.sql.DriverManager;
22 import java.sql.SQLException;
23
24
25 /**
26 * The DriverManagerConnectionSource is an implementation of {@link ConnectionSource}
27 * that obtains the Connection in the traditional JDBC manner based on the
28 * connection URL.
29 * <p>
30 * Note that this class will establish a new Connection for each call to
31 * {@link #getConnection()}. It is recommended that you either use a JDBC
32 * driver that natively supported Connection pooling or that you create
33 * your own implementation of {@link ConnectionSource} that taps into whatever
34 * pooling mechanism you are already using. (If you have access to a JNDI
35 * implementation that supports {@link javax.sql.DataSource}s, e.g. within
36 * a J2EE application server, see {@link JNDIConnectionSource}). See
37 * <a href="#dbcp">below</a> for a configuration example that uses the
38 * <a href="http://jakarta.apache.org/commons/dbcp/index.html">commons-dbcp</a>
39 * package from Apache.
40 * <p>
41 * Sample configuration:<br>
42 * <pre>
43 * <connectionSource class="org.apache.log4j.jdbc.DriverManagerConnectionSource">
44 * <param name="driver" value="com.mysql.jdbc.Driver" />
45 * <param name="url" value="jdbc:mysql://localhost:3306/mydb" />
46 * <param name="username" value="myUser" />
47 * <param name="password" value="myPassword" />
48 * </connectionSource>
49 * </pre>
50 * <p>
51 * <a name="dbcp">If</a> you do not have another connection pooling mechanism
52 * built into your application, you can use the
53 * <a href="http://jakarta.apache.org/commons/dbcp/index.html">commons-dbcp</a>
54 * package from Apache:<br>
55 * <pre>
56 * <connectionSource class="org.apache.log4j.jdbc.DriverManagerConnectionSource">
57 * <param name="driver" value="org.apache.commons.dbcp.PoolingDriver" />
58 * <param name="url" value="jdbc:apache:commons:dbcp:/myPoolingDriver" />
59 * </connectionSource>
60 * </pre>
61 * Then the configuration information for the commons-dbcp package goes into
62 * the file myPoolingDriver.jocl and is placed in the classpath. See the
63 * <a href="http://jakarta.apache.org/commons/dbcp/index.html">commons-dbcp</a>
64 * documentation for details.
65 *
66 * @author <a href="mailto:rdecampo@twcny.rr.com">Ray DeCampo</a>
67 */
68 public class DriverManagerConnectionSource extends ConnectionSourceSkeleton {
69 private String driverClass = null;
70 private String url = null;
71
72 public void activateOptions() {
73 try {
74 if (driverClass != null) {
75 Class.forName(driverClass);
76 discoverConnnectionProperties();
77 } else {
78 getLogger().error(
79 "WARNING: No JDBC driver specified for log4j DriverManagerConnectionSource.");
80 }
81 } catch (final ClassNotFoundException cnfe) {
82 getLogger().error("Could not load JDBC driver class: " + driverClass, cnfe);
83 }
84 }
85
86
87 /**
88 * @see org.apache.log4j.db.ConnectionSource#getConnection()
89 */
90 public Connection getConnection() throws SQLException {
91 if (getUser() == null) {
92 return DriverManager.getConnection(url);
93 } else {
94 return DriverManager.getConnection(url, getUser(), getPassword());
95 }
96 }
97
98
99 /**
100 * Returns the url.
101 *
102 * @return String
103 */
104 public String getUrl() {
105 return url;
106 }
107
108
109 /**
110 * Sets the url.
111 *
112 * @param url The url to set
113 */
114 public void setUrl(String url) {
115 this.url = url;
116 }
117
118
119 /**
120 * Returns the name of the driver class.
121 *
122 * @return String
123 */
124 public String getDriverClass() {
125 return driverClass;
126 }
127
128
129 /**
130 * Sets the driver class.
131 *
132 * @param driverClass The driver class to set
133 */
134 public void setDriverClass(String driverClass) {
135 this.driverClass = driverClass;
136 }
137 }