DatabaseDataSourceConnection.java
/*
*
* The DbUnit Database Testing Framework
* Copyright (C)2002-2004, DbUnit.org
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.dbunit.database;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
/**
* This class adapts a JDBC <code>DataSource</code> to a
* {@link IDatabaseConnection}.
*
* @author Manuel Laflamme
* @version $Revision$
* @since Mar 8, 2002
*/
public class DatabaseDataSourceConnection extends AbstractDatabaseConnection
implements IDatabaseConnection
{
/**
* Logger for this class
*/
private static final Logger logger = LoggerFactory.getLogger(DatabaseDataSourceConnection.class);
private final String _schema;
private final DataSource _dataSource;
private final String _user;
private final String _password;
private Connection _connection;
public DatabaseDataSourceConnection(InitialContext context, String jndiName,
String schema) throws NamingException, SQLException
{
this((DataSource)context.lookup(jndiName), schema, null, null);
}
public DatabaseDataSourceConnection(InitialContext context, String jndiName,
String schema, String user, String password)
throws NamingException, SQLException
{
this((DataSource)context.lookup(jndiName), schema, user, password);
}
public DatabaseDataSourceConnection(InitialContext context, String jndiName)
throws NamingException, SQLException
{
this(context, jndiName, null);
}
public DatabaseDataSourceConnection(InitialContext context, String jndiName,
String user, String password) throws NamingException, SQLException
{
this(context, jndiName, null, user, password);
}
public DatabaseDataSourceConnection(DataSource dataSource)
throws SQLException
{
this(dataSource, null, null, null);
}
public DatabaseDataSourceConnection(DataSource dataSource, String user,
String password) throws SQLException
{
this(dataSource, null, user, password);
}
public DatabaseDataSourceConnection(DataSource dataSource, String schema)
throws SQLException
{
this(dataSource, schema, null, null);
}
public DatabaseDataSourceConnection(DataSource dataSource, String schema,
String user, String password) throws SQLException
{
_dataSource = dataSource;
_schema = schema;
_user = user;
_password = password;
}
////////////////////////////////////////////////////////////////////////////
// IDatabaseConnection interface
public Connection getConnection() throws SQLException
{
logger.debug("getConnection() - start");
if (_connection == null)
{
try
{
if (_user != null) {
_connection = _dataSource.getConnection(_user, _password);
} else {
_connection = _dataSource.getConnection();
}
}
catch (SQLException e)
{
logger.error("getConnection(): ", e);
throw e;
}
}
return _connection;
}
public String getSchema()
{
return _schema;
}
public void close() throws SQLException
{
logger.debug("close() - start");
if (_connection != null)
{
_connection.close();
_connection = null;
}
}
}