/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.log4j.receivers.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * The DriverManagerConnectionSource is an implementation of {@link ConnectionSource} * that obtains the Connection in the traditional JDBC manner based on the * connection URL. * <p> * Note that this class will establish a new Connection for each call to * {@link #getConnection()}. It is recommended that you either use a JDBC * driver that natively supported Connection pooling or that you create * your own implementation of {@link ConnectionSource} that taps into whatever * pooling mechanism you are already using. (If you have access to a JNDI * implementation that supports {@link javax.sql.DataSource}s, e.g. within * a J2EE application server, see {@link JNDIConnectionSource}). See * <a href="#dbcp">below</a> for a configuration example that uses the * <a href="http://jakarta.apache.org/commons/dbcp/index.html">commons-dbcp</a> * package from Apache. * <p> * Sample configuration:<br> * <pre> * <connectionSource class="org.apache.log4j.jdbc.DriverManagerConnectionSource"> * <param name="driver" value="com.mysql.jdbc.Driver" /> * <param name="url" value="jdbc:mysql://localhost:3306/mydb" /> * <param name="username" value="myUser" /> * <param name="password" value="myPassword" /> * </connectionSource> * </pre> * <p> * <a name="dbcp">If</a> you do not have another connection pooling mechanism * built into your application, you can use the * <a href="http://jakarta.apache.org/commons/dbcp/index.html">commons-dbcp</a> * package from Apache:<br> * <pre> * <connectionSource class="org.apache.log4j.jdbc.DriverManagerConnectionSource"> * <param name="driver" value="org.apache.commons.dbcp.PoolingDriver" /> * <param name="url" value="jdbc:apache:commons:dbcp:/myPoolingDriver" /> * </connectionSource> * </pre> * Then the configuration information for the commons-dbcp package goes into * the file myPoolingDriver.jocl and is placed in the classpath. See the * <a href="http://jakarta.apache.org/commons/dbcp/index.html">commons-dbcp</a> * documentation for details. * * @author <a href="mailto:rdecampo@twcny.rr.com">Ray DeCampo</a> */ public class DriverManagerConnectionSource extends ConnectionSourceSkeleton { private String driverClass = null; private String url = null; public void activateOptions() { try { if (driverClass != null) { Class.forName(driverClass); discoverConnnectionProperties(); } else { getLogger().error( "WARNING: No JDBC driver specified for log4j DriverManagerConnectionSource."); } } catch (final ClassNotFoundException cnfe) { getLogger().error("Could not load JDBC driver class: " + driverClass, cnfe); } } /** * @see org.apache.log4j.receivers.db.ConnectionSource#getConnection() */ public Connection getConnection() throws SQLException { if (getUser() == null) { return DriverManager.getConnection(url); } else { return DriverManager.getConnection(url, getUser(), getPassword()); } } /** * Returns the url. * @return String */ public String getUrl() { return url; } /** * Sets the url. * @param url The url to set */ public void setUrl(String url) { this.url = url; } /** * Returns the name of the driver class. * @return String */ public String getDriverClass() { return driverClass; } /** * Sets the driver class. * @param driverClass The driver class to set */ public void setDriverClass(String driverClass) { this.driverClass = driverClass; } }