Java Persistence APIは2年前にJava EE 5の一部として登場し、オブジェクト関係マッピング向けのPOJO永続性モデルを提供している。これはJSR-220の一部としてEJB 3.0 ソフトウェアExpert Groupが開発した。
永続性は3つの分野から成り立っている。
- javax.persistenceパッケージに規定されているAPI
- Java Persistence Query Language (JPQL)
- オブジェクト関係メタデータ
JPQLは永続Javaオブジェクトの扱いを著しく改良したが、JPQLクエリは依然としてストリングとして記される。従ってクエリが強い型付けのJavaオブジェクトで実行する一方、クエリ自身は弱い型付けとなる。この手法でのクエリ生成はエラーが起きやすくなる可能性があり、バリデーション、自動修正、リファクタリングのため特定IDEのサポートを要する。
JPA 2.0はJava EE 6に含まれるJSR-317のカテゴリで開発が進められており、ストリングをベースとしないクエリ生成アプローチを提供する新しいクライテリアAPIの導入を通し、この問題に対処することを狙いとしている。Expert GroupのリーダーであるLinda DeMichiel氏はこのAPIの最新ドラフトを説明したブログを公開した(リンク)。
「大まかに言うと、QueryDefinitionオブジェクトは、クエリのセマンティック構造に対応するノード群と考えることができます。つまり、
- JPQLのFROM節の範囲変数およびその他の識別変数に対応する、ドメインオブジェクト
- 1つあるいは2つ以上の条件式から構成されるWhere節の述語
- 1つあるいは2つ以上の「select item」オブジェクトから成る、Select節
- Order-byおよびgroup-byアイテム
- サブクエリ
などです」
現時点でこの提案は、既存のJPAメカニズムからある程度の前進であると見受けられるが、多数の人々、中でもGavin King氏は、その型安全性についてはさらなる改良が可能であり、またそうすべきであると主張した。King氏のHibernate O/Rツールは型安全クライテリアAPIの使用の先駆けとなったものの1つで、EJB3に多大な影響を与えたものであるが、彼は自身の提言をExpert Groupに対して行った。彼の提言では、コンパイラ・プラグインがアプリケーション上の各永続性クラスに対しメタモデル型を構築できるよう、Java 6に取り入れられているjavax.annotation.Processorが利用されている。King氏は、彼のアプローチのさらなる詳細を説明した2つのブログ記事(1(リンク), 2(リンク))を書き、King氏と彼のチームは現在、javacと使用するためのプロトタイプ注釈プロセッサに取り組んでいる。
Expert GroupはKing氏の提言を本格的に検討しており、現在の検討素案の代替案と考えている。DeMichiel氏は次のように語った。
「議論は主として、このAPIが静的クエリ(型安全なアスペクトが確実に反映される部分)と動的クエリの両方について開発者にとってより優れた技術に結びつくことの実現に焦点を当てています。私達は、メタモデル生成アスペクトについても検討しています。」
彼女は、Expert Groupでは開発コミュニティからのフィードバックを望んでいる、と付け加えた。コメントの投稿はjsr-317-pdr-feedback at sun dot comまで。