Logback: the reliable, generic, fast and flexible logging framework. Copyright (C) 1999-2015, QOS.ch. All rights reserved. This program and the accompanying materials are dual-licensed under either the terms of the Eclipse Public License v1.0 as published by the Eclipse Foundation or (per the licensee's choosing) under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation.
/** * Logback: the reliable, generic, fast and flexible logging framework. * Copyright (C) 1999-2015, QOS.ch. All rights reserved. * * This program and the accompanying materials are dual-licensed under * either the terms of the Eclipse Public License v1.0 as published by * the Eclipse Foundation * * or (per the licensee's choosing) * * under the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation. */
package ch.qos.logback.core.db; import java.sql.Connection; import java.sql.SQLException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; // PortableRemoteObject was introduced in JDK 1.3. We won't use it. // import javax.rmi.PortableRemoteObject; import javax.sql.DataSource;
The JNDIConnectionSource is an implementation of ConnectionSource that obtains a DataSource from a JNDI provider and uses it to obtain a Connection. It is primarily designed to be used inside of J2EE application servers or application server clients, assuming the application server supports remote access of DataSources. In this way one can take advantage of connection pooling and whatever other goodies the application server provides.

For more information about this component, please refer to the online manual at http://logback.qos.ch/manual/appenders.html#DBAppender

Author:Ray DeCampo
/** * The <id>JNDIConnectionSource</id> is an implementation of * {@link ConnectionSource} that obtains a {@link javax.sql.DataSource} from a * JNDI provider and uses it to obtain a {@link java.sql.Connection}. It is * primarily designed to be used inside of J2EE application servers or * application server clients, assuming the application server supports remote * access of {@link javax.sql.DataSource}s. In this way one can take advantage * of connection pooling and whatever other goodies the application server * provides. * <p> * For more information about this component, please refer to the online manual at * http://logback.qos.ch/manual/appenders.html#DBAppender * * @author <a href="mailto:rdecampo@twcny.rr.com">Ray DeCampo</a> */
public class JNDIConnectionSource extends ConnectionSourceBase { private String jndiLocation = null; private DataSource dataSource = null; public void start() { if (jndiLocation == null) { addError("No JNDI location specified for JNDIConnectionSource."); } discoverConnectionProperties(); } public Connection getConnection() throws SQLException { Connection conn = null; try { if (dataSource == null) { dataSource = lookupDataSource(); } if (getUser() != null) { addWarn("Ignoring property [user] with value [" + getUser() + "] for obtaining a connection from a DataSource."); } conn = dataSource.getConnection(); } catch (final NamingException ne) { addError("Error while getting data source", ne); throw new SQLException("NamingException while looking up DataSource: " + ne.getMessage()); } catch (final ClassCastException cce) { addError("ClassCastException while looking up DataSource.", cce); throw new SQLException("ClassCastException while looking up DataSource: " + cce.getMessage()); } return conn; }
Returns the jndiLocation.
Returns:String
/** * Returns the jndiLocation. * * @return String */
public String getJndiLocation() { return jndiLocation; }
Sets the jndiLocation.
Params:
  • jndiLocation – The jndiLocation to set
/** * Sets the jndiLocation. * * @param jndiLocation * The jndiLocation to set */
public void setJndiLocation(String jndiLocation) { this.jndiLocation = jndiLocation; } private DataSource lookupDataSource() throws NamingException, SQLException { addInfo("Looking up [" + jndiLocation + "] in JNDI"); DataSource ds; Context initialContext = new InitialContext(); Object obj = initialContext.lookup(jndiLocation); // PortableRemoteObject was introduced in JDK 1.3. We won't use it. // ds = (DataSource)PortableRemoteObject.narrow(obj, DataSource.class); ds = (DataSource) obj; if (ds == null) { throw new SQLException("Failed to obtain data source from JNDI location " + jndiLocation); } else { return ds; } } }