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
関連項目
[編集]外部リンク
[編集]仕様
[編集]オープンソース実装
[編集]- JPOX – オープンソースのJDO 2リファレンス実装 (ORM)
- Eclipse JSR 220 ORM
- Orient Technologies – JDOインタフェースを持つODBMS
- JDOinstruments – JDOインタフェースを持つODBMS
- Speedo – オープンソースのJDO 2実装 (ORM)
- Apache JDO - オープンソースのJDO 2実装