Java Data Objects

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

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

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

JDOはJakarta EEにいくつかの方法で統合されている。まず、ベンダー実装はJakarta EE Connectorとして提供される。そして、JDOはJakarta 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はJakarta 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

 関連項目 
 Java Persistence API
 オブジェクト関係マッピング
 オブジェクトデータベース
 Hibernate
 JPOX

 外部リンク 
 仕様 
 JDO Home page at Sun's Web site
 JSR 243: JDO 2.0 Specification
 JSR 12: JDO 1.0 Specification

 オープンソース実装 
 JPOX – オープンソースのJDO 2リファレンス実装 (ORM)
 Eclipse JSR 220 ORM
 Orient Technologies – JDOインタフェースを持つODBMS
 JDOinstruments  – JDOインタフェースを持つODBMS
 Speedo  – オープンソースのJDO 2実装 (ORM)
 Apache JDO - オープンソースのJDO 2実装

 コミュニティなど 
 JDOcentral.com Community Site
 JavaPersistence Community Site

Category:オブジェクト関係マッピング
Category:Javaプラットフォーム
Category:Java enterprise platform
Data Objects
Category:永続性