Java Data Objects
Java Data Objects(JDO)とは、Javaオブジェクトの永続性に関する仕様である。ドメインモデルの永続的サービスの透過性などもそれに含まれる。JDO の永続的オブジェクトは通常のJavaのクラスである。永続性を持たせるために特別なインタフェースを実装する必要もないし、特別なクラスから継承する必要もない。JDO 1.0 は Java Community Process の JSR 12 として開発された。JDO 2.0 は JSR 243 として開発され、2006年5月10日にリリースされた。
概要
オブジェクトの永続性は、外部のXMLメタファイルで定義され、その中にはベンダー固有の拡張を含めることも可能である。JDO ベンダーは開発者向けにエンハンサ(enhancers)を提供する。エンハンサはコンパイル済みのJavaクラスファイルを編集し、透過的な永続性が得られるようにする。JDO の仕様ではバイトコードの改良を必須としているわけではないが、JDO を実装する手段としてはこれが一般的である。現在、JDO ベンダーが提供する永続性にはいくつかのオプションがある。例えば、関係データベースへの保存、オブジェクトデータベースへの保存、ファイルへの保存などである。
JDO 強化クラスは異なるベンダーの実装であっても機能する。一度強化(エンハンス)した Java クラスは任意のベンダーの JDO 製品で使うことができる。
JDO は Java EE にいくつかの方法で統合されている。まず、ベンダー実装は JEE Connector として提供される。そして、JDO は JEE transaction service(JTA Transaction Manager の実装)のコンテキストで動作する。
JDO と EJB3
Enterprise JavaBeans 3.0 (EJB3) でも永続性がカバーされていた(EJB v2 の Entity Beans の発展したもの)。つまり、この2つの標準には仕様上の衝突が存在している。JDO にはいくつかの商用実装がある。
最終的に、永続性は EJB3 Core からは除外され、新たな標準 Java Persistence API (JPA) となった。JPA は javax.persistence パッケージを使い、EJB3 JSR 220 の中の独立した文書で定義されている。javax.persistence は EJB コンテナを必要とせず、JDO のように Java SE 環境でも機能する。しかし、JPA はオブジェクト関係マッピング (ORM) 標準であって、JDO のような透過オブジェクトの永続性標準(APIを実現するデータストアが何であるかをAPI利用者が気にする必要がない)ではない。
JDO の商用製品やオープンソースのプロジェクトの中には、既に JPA API も実装し選択肢を増やしているものがある。
JDO v2 での機能追加
- Disconnected Object Graphs の概念
- Standardized ORM Mapping Descriptors (ORMベースのJDO実装向け)
- JDOQL 拡張
- Get e.g. a java.sql.Connection from javax.jdo.PersistenceManager
- その他: Named Queries (pm.newNamedQuery), FetchPlan, Sequence, Delete by Query, multiple User Objects on PM
関連項目
外部リンク
仕様
オープンソース実装
- JPOX – オープンソースの JDO 2 リファレンス実装 (ORM)
- Eclipse JSR 220 ORM
- Orient Technologies – JDO インタフェースを持つODBMS
- JDOinstruments – JDO インタフェースを持つODBMS
- Speedo – オープンソースの JDO 2 実装 (ORM)
- Apache JDO - オープンソースのJDO 2 実装