[Java] ユニットテストでコネクションプールを使う Oracle編

2017年12月25日月曜日

Java JDBC Oracle

UCP

ユニットテストでコネクションプールを使うではTomcat JDBC Connection Poolを使って、コネクションプールを実現したけど、Oracleを使っている場合はUCP(Universal Connect Pool)を使うと比較的簡単に同様のことが実現できる。

https://docs.oracle.com/cd/E16338_01/java.112/b56283/intro.htm

UCPは以下のサイトからダウンロードできるけど、単独でダウンロードしなくても、Oracle11gのクライアントにも入っているので、それを利用してもいい。

http://www.oracle.com/technetwork/jp/database/enterprise-edition/ucp-096353-ja.html

UCPを使用するにはOracleのJDBCドライバ以外にucp.jarへの参照が必要になるので、まずこの参照を設定しよう。
次に初期化部分を以下のようにする。
import oracle.ucp.jdbc.PoolDataSource;
import oracle.ucp.jdbc.PoolDataSourceFactory;


    static void init() throws NamingException, SQLException {
        System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "local.MyContextFactory");
        System.setProperty(Context.URL_PKG_PREFIXES, "local");

        PoolDataSource ds = PoolDataSourceFactory.getPoolDataSource();
        ds.setURL("jdbc:oracle:thin:@//localhost:1521/testdb");
        ds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
        ds.setUser("testdb");
        ds.setPassword("testdb");
        ds.setMaxPoolSize(100);
        ds.setMinPoolSize(10);

        Context ctx = new InitialContext();
        ctx.bind("jdbc/test", ds);
    }

ポイントはPoolDataSourceFactoryからPoolDataSourceを取得して、そこに各設定をしていくところ。
基本的な流れは前回までと同じ。