kagamihogeの日記

kagamihogeの日記です。

Seasar プロダクトの O/R マッパー Doma を試す

こんな環境でやりました

  • jdk1.6.0_24
  • eclipse3.7
  • oracle 10g xe
  • doma-1.16.0.jar

やったこと

まず、Doma - セットアップ に従い環境を整備する。つぎに、Doma - クイックスタート を見ながらサンプルコードが動くまで、をやる。ドキュメントと異なる点は、DB を H2 でなく oracle にしてる。深い意味はなくて、単に試したかっただけ。あと、doma tools は入れずにやりました。

以下、クイックスタートと自分でやったことの差を羅列。

AppConfig を oracle 10g 用に設定の記述を変更。

package quickstart;

import javax.sql.DataSource;

import org.seasar.doma.jdbc.DomaAbstractConfig;
import org.seasar.doma.jdbc.SimpleDataSource;
import org.seasar.doma.jdbc.dialect.Dialect;
import org.seasar.doma.jdbc.dialect.OracleDialect;
import org.seasar.doma.jdbc.tx.LocalTransaction;
import org.seasar.doma.jdbc.tx.LocalTransactionalDataSource;

public class AppConfig extends DomaAbstractConfig {

	protected static final LocalTransactionalDataSource dataSource = createDataSource();

	protected static final Dialect dialect = new OracleDialect();

	
	@Override
	public DataSource getDataSource() {
		return dataSource;
	}

	@Override
	public Dialect getDialect() {
		return dialect;
	}
	
	protected static LocalTransactionalDataSource createDataSource() {
		SimpleDataSource dataSource = new SimpleDataSource();
		dataSource.setUrl("jdbc:oracle:thin:@192.168.40.128:1521:xe");
		dataSource.setUser("kagamihoge");
		dataSource.setPassword("xxxxxxxx");
		return new LocalTransactionalDataSource(dataSource);
	}
	
	public static LocalTransaction getLocalTransaction() {
		return dataSource.getLocalTransaction(defaultJdbcLogger);
    }
}

EmployeeDao を作ったところでコンパイルエラーが出るのを確認。

で、へー SQL ファイルないって確かにコンパイルエラーでるなぁーって、エラーメッセージに従い愚直に bin ディレクトリの下に SQL ファイル置いたら、再ビルドでファイルが消滅して焦るという失敗をする。先生! そこ Eclipse のデフォルトのクラスファイル出力先だからビルドのたびにファイル消えるっす……



つぎに、

select * from EMPLOYEE where EMPLOYEE_ID = /* Id */99

とか、あえて /**/ に対応するパラメータのない、Doma にとっては不正な SQL ファイルを置いてみる。

と、ちゃんとコンパイルエラーになる。



これで Main から実行してみると……エラーが出る。

Exception in thread "main" org.seasar.doma.jdbc.JdbcException: [DOMA2015] java.sql.Connectionの取得に失敗しました。原因は次のものです。java.sql.SQLException: [DOMA5001] JDBCドライバがロードされていない可能性があります。JDBCドライバをロードするには、クラスパスが通されたMETA-INF/services/java.sql.DriverファイルにJDBCドライバのクラスの完全修飾名を記述してください。 ex) oracle.jdbc.driver.OracleDriver
(以下省略)

クイックスタートのいちばん最初に「■JDBCドライバの設定 「java.sql.Driver」ファイルにJDBCドライバのクラス名を記述します。 」って書いてあるの読み飛ばしてただけなんですが。ちょっと驚いたのが、エラーメッセージが超エキサイティングにわかりやすいところ。設定周りだからある意味当然といえば当然なんだけど……エラーの原因と、プログラマが対処すべき事項をこんなにわかりやすく伝えるエラーメッセージはすごい珍しいような気が……



最終的なパッケージ構成はこんな感じ。クイックスタートとほぼ同じですが。


Doma ためしてすごいとおもったこと。

  • jar 入れるだけで動くO/Rマッパー。S2 コンテナに依存しないってのはお手軽でいい感じ。
  • SQL ファイルが間違ってるとコンパイルで頑張って色々メッセージ出してくるところ。いかにも Java 文化圏っぽいところが良い。
  • エラーメッセージがわかりやすい。