package org.openswing.swing.server;
import java.sql.*;
import javax.naming.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.sql.*;
/**
* <p>Title: OpenSwing Framework</p>
* <p>Description: Database Connection Manager: it manager database connections, using a free connection pooler.
* This class uses the JNDI context to retrieve a datasource.</p>
* <p>Copyright: Copyright (C) 2006 Mauro Carniel</p>
*
* <p> This file is part of OpenSwing Framework.
* This library is free software; you can redistribute it and/or
* modify it under the terms of the (LGPL) Lesser General Public
* License as published by the Free Software Foundation;
*
* GNU LESSER GENERAL PUBLIC LICENSE
* Version 2.1, February 1999
*
* 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* The author may be contacted at:
* maurocarniel@tin.it</p>
*
* @author Mauro Carniel
* @version 1.0
*/
public class DataSourceConnection implements ConnectionSource {
/** data source */
private DataSource dataSource = null;
public DataSourceConnection() {
}
/**
* Initialize the connection pooler.
* Called by ConnectionManager.initConnectionSource method.
* @param context servlet context; used to retrieve database connection settings
*/
public boolean initPooler(HttpServlet servlet) {
try {
// create JNDI context...
InitialContext ic = new InitialContext();
Context envCtx = (Context)ic.lookup("java:comp/env");
dataSource = (DataSource)envCtx.lookup("jdbc/"+servlet.getInitParameter("dataSourceName"));
return dataSource!=null;
} catch(Throwable ex) {
ex.printStackTrace();
servlet.getServletContext().log("Error while creating data source",ex);
return false;
}
}
/**
* @param context servlet context; used to retrieve database connection settings
* @return new database connection
*/
public Connection getConnection(ServletContext context) throws Exception {
Connection conn = dataSource.getConnection();
try { conn.setTransactionIsolation(java.sql.Connection.TRANSACTION_READ_COMMITTED); } catch (Throwable ex) {}
try { conn.setAutoCommit(false); } catch (Throwable ex1) { }
return conn;
}
/**
* Release a database connection
* @param conn database connection to release
* @param context servlet context; used to retrieve database connection settings
*/
public void releaseConnection(Connection conn,ServletContext context) {
try {
try {
conn.rollback();
}
catch (Exception ex1) {
}
conn.close();
}
catch (SQLException ex) {
context.log("Error while releasing the database connection",ex);
}
}
}