About

ドキュメント

プロジェクト文書

Built by Maven

よくある質問

一般的な質問

  1. Domaとは何ですか?
  2. Domaとはどのような意味ですか?
  3. Domain(ドメイン)とは何ですか?
  4. Domain(ドメイン)を利用する利点は何ですか?
  5. apt(アプト)とは何ですか?

動作環境に関する質問

  1. どのバージョンのJREをサポートしていますか?
  2. Domaを動作させるのにSeasar2は必須ですか?
  3. Domaを動作させるのに必要なライブラリには何がありますか?

開発環境に関する質問

  1. どのバージョンのJDKをサポートしていますか?
  2. お奨めのIDE(統合開発環境)はありますか?
  3. 開発を支援するツールはありますか?
  4. DomaのjarファイルをEclipseのビルドパスに指定しましたが、アノテーション処理が行われません。何が足りないのでしょうか?
  5. SQLファイルが存在するにもかかわらず、「[DOMA4019] SQLファイル[META-INF/../select.sql]がクラスパスから見つかりませんでした」というエラーメッセージが表示されます。何がいけないのでしょうか?
  6. aptで生成されたコードはどこに出力されますか?
  7. Eclipseを使用していますが、「.apt_generated」ディレクトリが見つかりません。どうしてですか?

ビルド環境に関する質問

  1. AntでDomaを利用したアプリケーションをビルドしたいのですが、aptに関する設定をどのように行えばいいのでしょうか?
  2. MavenでDomaを利用したアプリケーションをビルドしたいのですが、aptに関する設定をどのように行えばいいのでしょうか?
  3. Domaを利用したアプリケーションをAntやMavenでコンパイルするとエラーになります。何がいけないのでしょうか?

O/Rマッパーの機能に関する質問

  1. どのRDBMSをサポートしていますか?
  2. SQLを自動生成する機能はありますか?
  3. 条件が動的に変わるSQLはどのように実行できますか?
  4. プログラミングで問い合わせ条件を組み立てるためのクライテリアAPIはありますか?
  5. バッチ更新はサポートしていますか?
  6. 楽観的排他制御はサポートしていますか?
  7. 悲観的排他制御はサポートしていますか?
  8. ページングはサポートしていますか?
  9. 主キーの自動生成はサポートしていますか?
  10. 複合主キーはサポートしていますか?
  11. 1対1 や 1対n などデータベース上のリレーションシップをJavaオブジェクトにマッピングできますか?
  12. 遅延ローディングをサポートしていますか?
  13. ストアドプロシージャーやストアドファンクションをサポートしていますか?
  14. データベースから取得した結果をキャッシュする機能はありますか?
  15. コネクションプーリングの機能はありますか?
  16. トランザクションを制御する機能はありますか?
  17. ジェネリックDAOを使用できますか?

一般的な質問

Domaとは何ですか?

S2Daoのスタイル(DAOパターンや2 Way SQL)を踏襲したJava6(JDBC4.0)対応のO/Rマッパーです。 主な特長は2つあります。

  1. apt(アプト)を使用して、コンパイル時にコードの生成やコードの検証を行います。これにより、プログラミングミスを早期に発見できます。
  2. データベース上のカラムの値をドメインクラスと呼ばれるJavaオブジェクトにマッピングできます。これにより、型を活かしたプログラミングが容易になります。

[top]

Domaとはどのような意味ですか?

Domain Oriented MApping Framework の略です。

[top]

Domain(ドメイン)とは何ですか?

値のとり得る範囲(定義域)のことです。 Domaでは、テーブルのカラムの値を、ドメインと呼ばれるJavaオブジェクトで扱えます。

たとえば、一般的なO/Rマッパーでは、データベースのVARCHAR型をJavaのStringにマッピングしますが、 Domaでは、アプリケーション固有の型にマッピングすることを推奨しています。 なぜならば、データベース上では同じVARHCAR型でも、従業員名を表すVARCHAR型と電話番号を表すVARCHAR型は、 異なるJavaの型で扱うべきと考えるからです。 このアプリケーション固有の型をドメインと呼びます。

[top]

Domain(ドメイン)を利用する利点は何ですか?

主要な利点は次のものです。

  1. データベース上のカラムの型が同じあってもアプリケーション上意味が異なるものを別のJavaの型で表現できます。
  2. 概念をクラスとして明確に表現することでプログラミンをわかりやすくできます。
  3. 値と振る舞いを同じクラスで表現できます。

[top]

apt(アプト)とは何ですか?

Annotation Processing Toolの略です。 狭義では、Java 5 で導入された Mirror API を指しますが、広義では、Java 6 で導入された Pluggable Annotation Processing API (JSR 269) を含みます。

aptを利用すると、コンパイル時のソースコード検証や、ソースコード生成が可能です。

Domaでは、Pluggable Annotation Processing APIを使用して、 Daoのインタフェースから実装クラスを生成しています。 また、SQLファイルの存在チェックや、メソッド定義が規約に合致しているかどうかの検証も行っています。

[top]

動作環境に関する質問

どのバージョンのJREをサポートしていますか?

JRE 6 以上をサポートしています。JRE 5 以前はサポートしていません。

[top]

Domaを動作させるのにSeasar2は必須ですか?

いいえ、必須ではありません。

[top]

Domaを動作させるのに必要なライブラリには何がありますか?

Domaはどのライブラリにも依存していません。単独で動作します。

[top]

開発環境に関する質問

どのバージョンのJDKをサポートしていますか?

JDK 6 以上をサポートしています。JDK 5 以前はサポートしていません。

[top]

お奨めのIDE(統合開発環境)はありますか?

Eclipseをお奨めします。Eclipseのバージョンは 3.5 以上でなければいけません。

Eclipse 3.5 は JDK 6 で動作させる必要があります。 また、プロジェクトでも JDK 6 を使用する必要があります。

詳しくはセットアップを参照してください。

[top]

開発を支援するツールはありますか?

はい。Eclipseプラグインとコード生成ツールを用意しています。

詳しくは開発支援ツールを参照してください。

[top]

DomaのjarファイルをEclipseのビルドパスに指定しましたが、アノテーション処理が行われません。何が足りないのでしょうか?

Factory PathにもDomaのjarファイルを登録してください。

Factory Pathの設定画面は、プロジェクトのプロパティ設定画面から、 Java - Compiler - Annotation Processing - Factory Path と辿れます。 Annotation ProcessingとFactory Pathの画面では、 「Enable project specific settings」のチェックボックスをチェックしてください。

詳しくはセットアップを参照してください。

[top]

SQLファイルが存在するにもかかわらず、「[DOMA4019] SQLファイル[META-INF/../select.sql]がクラスパスから見つかりませんでした」というエラーメッセージが表示されます。何がいけないのでしょうか?

SQLファイルは、aptにより生成されるクラスの出力ディレクトリから検索されます。 SQLファイルの出力ディレクトリとaptにより生成されるクラスの出力ディレクトリが同じであることを確認してください。

Eclipseの場合、プロジェクトのプロパティの「Java Build Path」の設定画面で、 ソースフォルダごとに出力先ディレクトリを変更可能になっています。 この設定を無効にするか、SQLファイルの出力ディレクトリとaptにより生成されるクラスの出力ディレクトリを合わせてください。

[top]

aptで生成されたコードはどこに出力されますか?

Eclipseを利用している場合、デフォルトではプロジェクト直下の「.apt_generated」ディレクトリに出力されます。

出力先を変更したい場合は、注釈処理の設定を参考にしてください。

[top]

Eclipseを使用していますが、「.apt_generated」ディレクトリが見つかりません。どうしてですか?

aptの設定が正しく行われていない可能性があります。 セットアップを見直してください。

もしくは、単にPackage Explorerビュー上に「.apt_generated」ディレクトリが表示されていないだけかもしれません。 「.apt_generated」は、名称が「.」で始まっているために、Package Explorerビューで表示対象外になります。 対応方法としては以下のいずれかを選択してください。

  • Package Explorerビューではなく、Nivigatorビューから「.apt_generated」ディレクトリを確認する
  • Package Explorerビューのフィルタリングの設定を変更し、「.apt_generated」ディレクトリを表示させる
  • 出力先ディレクトリを明示的に指定し、名称が「.」で始まらないようにする

出力先を変更したい場合は、注釈処理の設定を参考にしてください。

[top]

O/Rマッパーの機能に関する質問

どのRDBMSをサポートしていますか?

次のRDBMSに対応しています。

  • DB2 V9.5 for Linux, UNIX and Windows以上
  • H2 Database Engine 1.2以上
  • HSQLDB 1.8.0.1以上
  • Microsoft SQL Server 2008以上
  • MySQL 5.0以上
  • Oracle Database 10g以上
  • PostgreSQL 8.0以上

要望があれば他のRDBMSへの対応も検討します。 また、利用者が独自に対応モジュールを作成することも可能です。

[top]

SQLを自動生成する機能はありますか?

はい。更新系SQL、ストアドプロシージャー/ファンクション呼び出しについてはSQLを自動で生成できます。 検索系のSQLについては、自動生成機能はありませんが、ファイルに外部化したSQLを実行し、その結果をJavaのオブジェクトにマッピングする機能があります。 更新系のSQLについても、必要であれば、ファイルに外部化したSQLを利用できます。

詳しくはクエリ定義を参照してください。

[top]

条件が動的に変わるSQLはどのように実行できますか?

SQLファイルに、SQLコメントを使って条件を指定できます。 SQLコメントは実行時に解析され、条件によって異なるSQLが生成されます。

SQLコメントについてはSQLファイルを参照してください。

[top]

プログラミングで問い合わせ条件を組み立てるためのクライテリアAPIはありますか?

いいえ、ありません。 しかし、動的なSQLは、SQLコメントを使って条件指定できます。 また、外部化されたオリジナルのSQLをページング用のSQLや悲観的ロック用のSQLに変換する機能があります。

[top]

バッチ更新はサポートしていますか?

はい、サポートしています。

詳しくは バッチ挿入バッチ更新バッチ削除 等を参照してください。

[top]

楽観的排他制御はサポートしていますか?

はい、バージョン番号による楽観的排他制御をサポートしています。

詳しくは更新削除バッチ更新バッチ削除 等を参照してください。

[top]

悲観的排他制御はサポートしていますか?

はい、ファイルに外部化したオリジナルのSQLを悲観的排他制御用SQLに変換できます。 ただし、RDBMSが悲観的排他制御に対応している必要があります。

詳しくは悲観的排他制御を参照してください。

[top]

ページングはサポートしていますか?

はい、ファイルに外部化したオリジナルのSQLをページング用SQLに変換できます。

詳しくはページングを参照してください。

[top]

主キーの自動生成はサポートしていますか?

はい。データベースのIDENTITY、シーケンス、テーブルを利用した自動生成がサポートされています。

詳しくはフィールド定義を参照してください。

[top]

複合主キーはサポートしていますか?

はい、サポートしています。

詳しくはフィールド定義を参照してください。

[top]

1対1 や 1対n などデータベース上のリレーションシップをJavaオブジェクトにマッピングできますか?

いいえ、できません。 Domaでは、SQLの結果セット1行をそのまま1つのエンティティのインスタンスにマッピングします。 このほうがシンプルでわかりやすいと考えているためです。

[top]

遅延ローディングをサポートしていますか?

いいえ、サポートしていません。 遅延ローディングによりSQLの発行のタイミングが予測しづくなり、トラブルの元になりやすいと考えているためです。

[top]

ストアドプロシージャーやストアドファンクションをサポートしていますか?

はい、サポートしています。

詳しくはストアドプロシージャーおよびストアドファンクションを参照してください。

[top]

データベースから取得した結果をキャッシュする機能はありますか?

いいえ、ありません。 キャッシュはDomaが位置づけられるデータアクセス層よりも上位の層で行ったほうがわかりやすいと考えているからです。

[top]

コネクションプーリングの機能はありますか?

いいえ、Domaでは提供していません。 コネクションプーリング機能をもつアプリケーションサーバー、フレームワーク、ライブラリ等と組み合わせて使用してください。

[top]

トランザクションを制御する機能はありますか?

はい、ローカルトランザクションをサポートしています。

詳しくはトランザクションを参照してください。

[top]

ジェネリックDAOを使用できますか?

いいえ、使用できません。 ジェネリックDAOを使用するとコード量は減りますが、コードの見通しがかえって低下すると考えているため使用できないようにしています。 (ジェネリックDAOについてはDAOを繰り返すな!を参照ください。)

たとえば、ジェネリックDAOでは、特定のエンティティをパラメータとしてメソッドを呼び出している箇所を探すのが容易ではありません。 ジェネリックDAOでなければメソッドのシグネチャが固定であるためIDEのCall Hierarchy機能を使って簡単に特定可能ですが、 ジェネリックDAOの場合、メソッドのパラメータの型がジェネリクス型であるためにCall Hierarchy機能を使っても呼び出し元を絞り込めません。

[top]