まとまりのないブログ

something which something is something

JAVA

JAVA DataSouceオブジェクトをBasicDataSourceへキャストする

投稿日:

DataSouceオブジェクトというのはJNDIでコンテキストファイルからDBの接続情報を参照してきてその情報をセットするものでこんな感じで私は使っている。

		try {
			InitialContext ictx = new InitialContext();
			DataSource ds = (DataSource) ictx.lookup("java:comp/env/jdbc/connect-db");
			con = ds.getConnection(); 
		} catch (Exception e) {
			throw new Exception(CLASS_NAME + "/getDBConnection() failure:"
					+ e.getMessage());
		}

このlookupしてきた情報はDataSourceオブジェクトの型で取得することになるが、これをDBCPのBasicDataSourceオブジェクト型で取得するには、コンテキストファイルのResourceの情報にfactoryの属性を追加するとできるようになる。

	<Context path="/my-proj" reloadable="true" docBase="C:\eclipse\workspace\my-proj" workDir="C:\eclipse\workspace\my-proj\work">

    	<Resource name="jdbc/connect-db"
                auth="Container"
                type="javax.sql.DataSource"
                driverClassName="com.mysql.jdbc.Driver"
                url="jdbc:mysql://my-address:3306/db?autoReconnect=true"
                username="user"
                password="pass"
		validationQuery="select 1"
                maxActive="100"
		factory="org.apache.commons.dbcp.BasicDataSourceFactory"
                maxIdle="100" />

	</Context>

上の記述のfactoryのところがポイント。で、下記のような感じでキャストしてBasicDataSourceオブジェクトとして使えるようになる。


	public static Connection testConnection() throws Exception {
		Connection con = null;
		try {
			InitialContext ictx = new InitialContext();
			BasicDataSource bds =  (BasicDataSource) ictx.lookup("java:comp/env/jdbc/connect-db");
			con = bds.getConnection(); //
			
		} catch (Exception e) {
			throw new Exception(CLASS_NAME + "/getDBConnection() failure:"
					+ e.getMessage());
		}
		return con;
	}

コンテキストファイルからJNDIで接続情報を取得してきてBasicDataSourceオブジェクトとして使えるのならコードに接続情報直書きよりかは便利かなと。Common DBCPを使ってみたかったのもあってコネクションのプールとか性能が今までより(?)上がってるといいのだけれど。

この実行テスト環境はJAVA 1.6、tomcat5.5、common-DBCP 1.4 といった感じ。

-JAVA

執筆者:


comment

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

関連記事はありませんでした