package com.goodworkalan.addendum.connector;
import static com.goodworkalan.addendum.Addendum.NAMING_EXCEPTION;
import static com.goodworkalan.addendum.Addendum.SQL_CLOSE;
import static com.goodworkalan.addendum.Addendum.SQL_CONNECT;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import com.goodworkalan.addendum.Addendum;
import com.goodworkalan.danger.Danger;
/**
* A connector that creates JDBC connections using a JDNI specified data source.
*
* @author Alan Gutierrez
*/
public class NamingConnector implements Connector {
/** The JDNI name of the data source. */
private final String dataSourceName;
/**
* Create a connector that will open JDBC connections using the data source
* resource specified by the given JDNI name.
*
* @param dataSourceName
* The JDNI name of the data source.
*/
public NamingConnector(String dataSourceName) {
this.dataSourceName = dataSourceName;
}
/**
* Open a connection to a JDBC data source using a JDNI specified data
* source.
*
* @return A JDBC connection.
*/
public Connection open() {
DataSource dataSource;
try {
InitialContext context = new InitialContext();
dataSource = (DataSource) context.lookup(dataSourceName);
} catch (NamingException e) {
throw new Danger(Addendum.class, NAMING_EXCEPTION, e, dataSourceName);
}
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new Danger(Addendum.class, SQL_CONNECT, e);
}
}
/**
* Close a JDBC connection created by this connector.
*
* @param connection
* A JDBC connection created by this connector.
*/
public void close(Connection connection) {
try {
connection.close();
} catch (SQLException e) {
throw new Danger(Addendum.class, SQL_CLOSE, e);
}
}
}