2007-06-05

Oracle用の DataSourceをすぐに作る

あなたは、Oracleデータベースにアクセスする、とあるビジネスコンポーネントを Javaで製造することを命じられました。
コンポーネントには DataSourceオブジェクトがあらかじめインジェクトされることが前提になっているので、あなたは各ビジネスメソッドの中でその DataSourceからデータベース・コネクションを取得し、クエリを実行したのち、正しくコネクションを解放して制御を戻せば良いことになっています。
トランザクションの境界については、フレームワーク側で定義するため意識する必要がないとのことです。

さて、あなたは JDBCを使って目的のクエリを行うコードを書きました。簡単です。しかし、ユニットテストをしなければこのコードが要求仕様を満たしているという保証ができません。ではこのコンポーネントをユニットテストしましょう。
ユニットテストを行うためには、接続先のデータベースが必要です。幸い、開発用のOracleデータベースは用意されています。

しかしながら、結合時にはフレームワークにより自動的にインジェクトされることになっているこの DataSourceも、ユニットテストの時には自分で作成してテスト対象のオブジェクトにインジェクトしてやらなければいけません。
しょうがないのであなたは JavaDoc で、javax.sql.DataSource調べます。
「なんてことだ!こいつはインターフェイスだ!インスタンスを作りたくても new できないじゃないか!」

OracleのJDBCドライバアーカイヴには OracleDataSource という DataSourceの実装が含まれていますので、これを使いましょう。

import oracle.jdbc.pool.OracleDataSource;
:
OracleDataSource ds = new OracleDataSource( );
ds.setUser("scott");
ds.setPassword("tiger");
ds.setURL("jdbc:oracle:thin:@//dbHost/service_name");
// テスト対象オブジェクトに ds をインジェクトする

むろん、これは Oracle専用の DataSource実装です。データベース非依存の DataSource実装を使っておきたければ SpringのSingleConnectionDataSourceあたりを使うと良いでしょう。

ラベル:

0 件のコメント:

コメントを投稿

<< ホーム