コネクションプールのサンプル
材料は、Apache Commonsから調達
commons-dbcp
commons-pool
import java.sql.Connection; import java.sql.SQLException; import org.apache.commons.dbcp.ConnectionFactory; import org.apache.commons.dbcp.DriverManagerConnectionFactory; import org.apache.commons.dbcp.PoolableConnectionFactory; import org.apache.commons.dbcp.PoolingDataSource; import org.apache.commons.pool.impl.GenericObjectPool; /** * <HR> * <P> * ■モジュール名 <BR> * <BLOCKQUOTE> * PoolAppender.java <BR> * </BLOCKQUOTE> * <P> * ■クラス仕様 <BR> * <BLOCKQUOTE> * PoolAppenderクラスはデータソースプールを作成するクラスです。<BR> * </BLOCKQUOTE> * <P> * <HR> * <P> */ public class PoolAppender { /** * * データソースプールを取得する * @return */ public static PoolingDataSource getDataSource() { try { Class.forName("JDBCドライバ"); GenericObjectPool pool = new GenericObjectPool(); ConnectionFactory conFactory = new DriverManagerConnectionFactory( "DB接続先URL" , "ユーザ" , "パスワード"); //PoolableConnectionFactoryで読み込みのみ、オートコミットとか指定する。 new PoolableConnectionFactory( conFactory, pool, null, null, false, true); return new PoolingDataSource(pool); } catch (Throwable t) { throw new RuntimeException(t); } } /** * * プールにコネクションを戻す * @param con */ public static void closeConnection(Connection conn) { try { if ( conn != null && !conn.isClosed() ) { conn.close(); } } catch (SQLException e) { throw new RuntimeException(e); } } /** * * ロールバック * @param conn */ public static void rollbackConnection(Connection conn) { try { if ( conn != null && !conn.isClosed() ) { conn.rollback(); } } catch (SQLException e) { throw new RuntimeException(e); } } }
作った疑問点として、new PoolingDataSourceで作ったPoolingDataSource
は、closeが無いけどプールの開放は勝手にやってくれるんだろうか?
それとも別の、方法があるのかな?