Java Data Objects (JDO) とは、Javaオブジェクト永続性に関する仕様である。ドメインモデルの永続的サービスの透過性などもそれに含まれる。JDOの永続的オブジェクトは通常のJavaクラスである。永続性を持たせるために特別なインタフェースを実装する必要もないし、特別なクラスから継承する必要もない。JDO 1.0はJava Community ProcessJSR 12として2002年4月30日にリリースされた。JDO 2.0はJSR 243として開発され、2006年5月10日にリリースされた。

概要編集

オブジェクトの永続性は、外部のXMLメタファイルで定義され、その中にはベンダー固有の拡張を含めることも可能である。JDOベンダーは開発者向けにエンハンサ (enhancers) を提供する。エンハンサはコンパイル済みのJavaクラスファイルを編集し、透過的な永続性が得られるようにする。JDOの仕様ではバイトコードの改良を必須としているわけではないが、JDOを実装する手段としてはこれが一般的である。現在、JDOベンダーが提供する永続性にはいくつかのオプションがある。例えば、関係データベースへの保存、オブジェクトデータベースへの保存、ファイルへの保存などである。

JDO強化クラスは異なるベンダーの実装であっても機能する。一度強化(エンハンス)した Java クラスは任意のベンダーのJDO製品で使うことができる。

JDOはJava EEにいくつかの方法で統合されている。まず、ベンダー実装はJava EE Connectorとして提供される。そして、JDOはJava EE transaction service(JTA Transaction Managerの実装)のコンテキストで動作する。

JDOとJPA編集

Enterprise JavaBeans 3.0 (EJB 3.0) では、永続性がカバーされている。それはEJB 2.0のEntity Beansの発展したものである。しかしEJB 3.0はJDOを採用せずに、Java Persistence API (JPA) 1.0を採用した。EJB 3.0はJDO 2.0のリリースの翌日の2006年5月11日に仕様が制定された。JDOとJPAは対立する仕様である。

JPAはjavax.persistenceパッケージを使い、EJB 3.0 (JSR 220) の中の独立した文書で定義されている。JPAはEJBコンテナを必要とせず、JDOのようにJava SE環境でも機能する。しかし、JPAはオブジェクト関係マッピング (ORM) の仕様であって、JDOのようにデータストアの種類に関係なく使える、透過的なオブジェクトの永続の仕様ではない。

JPAはJava EEの仕様の一部であるため、JDOよりも多く使われている。JDOの商用製品やオープンソースのプロジェクトの中には、既にJPA APIも実装し選択肢を増やしているものがある。

JDO 2.0での機能追加編集

  • 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

関連項目編集

外部リンク編集

仕様編集

オープンソース実装編集

コミュニティなど編集