この章では、TopLinkプロジェクトで使用できる項目を説明します。
この章は次の項で構成されています:
TopLinkには、完全なJPA 2.0準拠のJPA実装が用意されています。これは、すべての必須機能、多くのオプション機能および一部の追加機能に完全に準拠しています。必須ではない追加機能には、オブジェクトレベル・キャッシュ、分散キャッシュ調整、広範なパフォーマンス・チューニング・オプション、Oracle Databaseサポートの拡張機能、高度なマッピング、オプティミスティック・ロック・オプションとペシミスティック・ロック・オプション、広範な注釈と問合せのヒントが含まれます。
詳細は、EclipseLinkドキュメントの『The EclipseLink JPA User's Guide』を参照してください。
http://wiki.eclipse.org/EclipseLink/UserGuide/JPA
次の各項で、これらの機能の多くについて説明します。
このエンティティ・アーキテクチャは、エンティティ、永続性ユニット、永続性コンテキスト、エンティティ・マネージャ・ファクトリおよびエンティティ・マネージャで構成されています。図2-1に、これらの要素の関係を示します。
永続性は、1つ以上のEntityManagerFactory
オブジェクトを作成します。
各EntityManagerFactory
は、1つの永続性ユニットによって構成されます。
EntityManagerFactory
は、1つ以上のEntityManager
オブジェクトを作成します。
1つ以上のEntityManager
は、1つのPersistenceContext
を管理します。
エンティティは、アプリケーションで定義されたオブジェクトで、次の特性があります。
永続化することが可能です。
永続識別子を持ちます(永続識別子とは、エンティティ・インスタンスを一意に識別し、そのインスタンスを同じエンティティ・タイプの他のインスタンスから区別するキーです。エンティティは、データ・ストアにそのエンティティを表現するオブジェクトが存在する場合、永続識別子を持ちます)。
エンティティの永続性ビューに関してトランザクション的であるという点で、トランザクション的です(エンティティは、トランザクション内で作成、更新および削除され、変更のデータベースへのコミット時にはトランザクションが必要です)。ただし、メモリー内エンティティは、変更を永続化することなく更新できます。
プリミティブ・オブジェクト、プリミティブ・ラッパー・オブジェクトまたは組込みオブジェクトではありません。エンティティは、単一の場所(表の行など)に通常格納される集約された状態のセットを保持する粒度の細かいオブジェクトであり、他のエンティティに対するリレーションシップを持ちます。
エンティティには、エンティティを記述するエンティティ・メタデータも含まれています。エンティティ・メタデータは、データベースに対して永続化されません。これは、エンティティがロードされてから実行時に起動されるまでの間、永続性レイヤーがエンティティを管理するために使用されます。メタデータは、Javaプログラミング要素またはXMLファイル(ディスクリプタ)の注釈として表現できます。
現在のリリース以降では、マッピングをオンザフライで追加できる拡張可能なエンティティを定義および使用できます。この場合、エンティティには、静的属性ではなく、マップ内に拡張された属性が保存されます。次に、エンティティは、eclipselink-orm.xml
マッピング・ファイルを使用して、このマップの値をデータベースにマップする方法を定義します。TopLinkでは、動的にマッピングを定義できることに加えて、これらの拡張されたマッピングを保存して外部から管理することもできます。この外部保存により、アプリケーションの実行中に、拡張されたマッピングを定義できるようになりました。詳細は、EclipseLinkドキュメントの『EclipseLink/Examples/JPA/Extensibility』を参照してください。
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Extensibility
永続性は、エンティティの特性です。つまり、エンティティはデータ・ストアで表すことができ、後でアクセスできます。
永続性ユニットは、永続化可能なユニットを識別し、それに関連するプロパティを定義します。また、永続化する必要があるオブジェクトも定義します。オブジェクトは、エンティティ・クラス、埋込み可能クラス、マップされたスーパークラスのいずれかです。永続性ユニットでは、エンティティ・マネージャ・ファクトリの構成が提供されます。エンティティ・マネージャ・ファクトリによって作成されたエンティティ・マネージャは、永続性ユニットに定義されたプロパティを継承します。
エンティティ・マネージャは、エンティティに対して操作を実行するAPIコールを有効にします。エンティティ・マネージャを使用してエンティティの作成、読取り、書込みのいずれかを行うまで、エンティティは、非永続性Javaオブジェクトにすぎません。エンティティ・マネージャがエンティティへの参照を取得すると、そのエンティティはエンティティ・マネージャによって管理されるようになります。特定の時点でのエンティティ・マネージャ内の管理対象エンティティ・インスタンスのセットを、永続性コンテキストと呼びます。同じ永続性IDのJavaインスタンスは、永続性コンテキスト内に特定の時点で1つのみ存在できます。
特定のデータベースを対象とする読取りまたは書込み、特定タイプのオブジェクトの永続化または管理、および特定の永続性プロバイダによる実装を行うようエンティティ・マネージャを構成できます。永続性プロバイダにより、EntityManager
インタフェース実装、Query実装、SQL生成などのJPAの実装が提供されます。エンティティ・マネージャはEntityManagerFactory
によって提供されます。エンティティ・マネージャの構成は、EntityManagerFactory
に依存しますが、永続性ユニットとして個別に定義されます。永続性ユニットに名前を付けることで、各EntityManagerFactory
オブジェクトを区別できます。この方法により、特定のエンティティの操作にどの構成を使用するかをアプリケーションで制御できます。永続性ユニットを記述する構成は、persistence.xml
ファイルで定義します。特定の構成をEntityManagerFactory
にバインドするようにリクエストできるようにするために、永続性ユニットに名前を付けます。
TopLinkには、Javaソース・コードに簡単にメタデータを追加できるように、一連の独自仕様の注釈が用意されています。メタデータは、対応するJavaクラス・ファイルにコンパイルされ、実行時にJPA永続性プロバイダによって解釈されて、永続性動作が管理されます。注釈は、クラス、メソッドおよびフィールドのレベルに適用できます。
TopLinkの注釈では、JPAメタデータの使用を介して現在入手できないTopLinkの機能の一部が公開されています。
基本プロパティ: デフォルトでは、TopLinkの永続性プロバイダは、単純型に対する基本マッピングを自動的に構成します。これらの注釈を使用して、フィールドまたはプロパティのエンティティの即時の状態を微調整します。
関係: TopLinkでは、OneToOneやOneToManyなどの一部の関係がデフォルト設定されます。他の関係は、明示的にマップする必要があります。注釈を使用して、エンティティ関係のタイプおよび特性を指定して、これらの関係をデータベースでどのように実装するかを微調整します。
埋込みオブジェクト: 埋込みオブジェクトには、それ自体の永続性IDはありません。IDに関しては、エンティティに依存しています。TopLink永続性プロバイダはデフォルトで、各エンティティがそれ自体の表にマップされていることを前提としています。それに続く注釈を使用すれば、他のエンティティが所有するエンティティに対して、この動作をオーバーライドできます。
次の項では、TopLinkオブジェクト・リレーショナル・マッピング・プロジェクトの主な構成ファイルのいくつかについて説明します。
Oracle TopLinkはJPA 2.0仕様に準拠しています。構成ファイルでは、仕様に定義されているプロパティのデフォルト値を変更できます。デフォルトは広範囲にわたり、JPA仕様の第10章「Metadata Annotations」に示されています。
http://jcp.org/en/jsr/detail?id=317
この構成は例外処理として行われます。つまり、構成ファイルのいずれかに値が指定されていない場合は、デフォルト値が使用されます。
JPA仕様に定義されていないTopLinkの拡張機能については、Oracle Fusion Middleware EclipseLink Java APIリファレンスにデフォルトが説明されています。
永続性ユニットを構成するには、JPA永続性ファイルpersistence.xml
を使用します。永続性ユニットでは、エンティティ・マネージャを取得する際に必要な詳細を定義します。ベンダー固有の拡張機能は、<properties>
要素を使用して、このファイルに指定できます。
このファイルは、永続性ユニットのJARファイルのMETA-INF
/ディレクトリまたはクラスパスに置く必要があります。
詳細は、EclipseLinkドキュメントの『Configuring Persistence Units Using persistence.xml』を参照してください。
メタデータを永続性ユニットに適用するには、標準のJPAのorm.xml
ファイルを使用します。これは、すべてのJPA 2.0マッピングをサポートしています。このファイルを注釈のかわりに使用するか、ソース・コードのJPA注釈をオーバーライドするために使用できます。EclipseLinkのeclipselink-orm.xml
ファイルは、orm.xml
ファイルで定義されるマッピングをサポートしており、JPA 2.0では定義されていないEclipseLink拡張機能のフル・セットもサポートしています。
eclipselink-orm.xml
ファイルの詳細は、EclipseLinkドキュメントの『Specifying EclipseLink Object-Relational Mappings Using eclipselink-orm.xml』を参照してください。
EclipseLinkドキュメントの『EclipseLink/Examples/JPA/EclipseLink-ORM.XML』も参照してください。
http://wiki.eclipse.org/EclipseLink/Examples/JPA/EclipseLink-ORM.XML
注意: このマッピング・ファイルを使用すると、TopLinkの多くの高度な機能が有効になりますが、他のJPA実装に対する永続性ユニットの移植性がなくなる場合があります。 |
永続性ユニットの定義で重要なのは、プロバイダが読み書きするデータを検出可能な場所です。これを、データ・ソースと呼びます。TopLinkでは、多くの場合、データ・ソースはデータベースです。データベースの場所は、サーバーのJNDIネームスペースのJDBCデータ・ソースの形式で指定します。
通常、TopLinkを使用するアプリケーションは、JTAトランザクションのコンテキストで実行します。データ・ソースの名前は、persistence.xml
ファイルのjta-data-source
要素に指定します。アプリケーションがトランザクションのコンテキストで実行されない場合は、resource-localと見なされます。この場合は、non-jta-data-source
要素に、データ・ソースの名前を指定します。
TopLinkでは、XMLスキーマなどのリレーショナル・データベース以外のデータ・ソースも指定できます。
TopLinkを使用するアプリケーションはスタンドアロン(Java SE)モードで実行できます。このモードでは、非JTA準拠のデータ・ソースとともに、非Oracleスタックにおいて、サーバーの外部でアプリケーションが実行されます。この場合、JDBCドライバ・クラス、データベースに接続するためにクライアントが使用するURL、データベースへのアクセスに必要なユーザー名とパスワードなどのドライバ固有の情報を指定する必要があります。詳細およびスタンドアロン・モードでのアプリケーションの実行例は、EclipseLinkドキュメントの『EclipseLink/Examples/JPA/OutsideContainer』を参照してください。
http://wiki.eclipse.org/EclipseLink/Examples/JPA/OutsideContainer
EclipseLinkドキュメントの『EclipseLink/Examples/JPA/Tomcat Web Tutorial』も参照してください。
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial
TopLinkのデフォルトでは、共有オブジェクト・キャッシュが使用されます。共有オブジェクト・キャッシュでは、読み取られて永続性ユニットに対して永続化されたすべてのオブジェクトのサブセットがキャッシュされます。TopLinkの共有キャッシュは、ローカルのEntityManager
キャッシュとは異なります。共有キャッシュは、永続性ユニット(EntityManagerFactory
またはサーバー)の期間存在し、永続性ユニットのすべてのEntityManager
およびユーザーによって共有されます。ローカルのEntityManager
キャッシュは共有されず、EntityManager
またはトランザクションの期間のみ存在します。
共有キャッシュの利点は、オブジェクトを1回読み取ると、同じオブジェクトを再度読み取る際にデータベースにアクセスする必要がないことです。また、問合せを使用してオブジェクトを読み取る場合は、オブジェクトを再作成する必要はなく、オブジェクトの関係も再フェッチする必要がありません。
共有キャッシュの制限は、JDBC経由または別のアプリケーションやサーバーによってデータベースが直接変更されると、共有キャッシュのオブジェクトが失効することです。
TopLinkには、失効データを扱うために、次のようなメカニズムが用意されています。
リフレッシュ
無効化
オプティミスティック・ロック
キャッシュ・コーディネーション
共有キャッシュは無効にしたり、@Cache
または@Cacheable
注釈を使用して、選択的に有効化または無効化することもできます。TopLinkには、キャッシュするオブジェクト数および使用するメモリー量を構成するためのキャッシュ戦略もいくつか用意されています。
キャッシュが最新でないことをアプリケーションが認識している場合、アプリケーションはプログラムでキャッシュをクリア、リフレッシュまたは無効化できます。キャッシュされているオブジェクトのいずれかが使用中の場合にキャッシュをクリアすると、オブジェクトIDの問題が発生する場合があるので、無効化するほうが安全です。キャッシュされているオブジェクトのいずれも使用中でないことがわかっている場合は、キャッシュをクリアできます。
詳細は、EclipseLinkドキュメントの『EclipseLink/Examples/JPA/Caching』を参照してください。
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching
TopLinkには、キャッシュ・プロパティを定義できる@Cache
注釈が用意されています。プロパティには、キャッシュのタイプ、サイズ、リフレッシュ・ルールなどが含まれます。EclipseLinkドキュメントの『Using the @Cache
Annotation』を参照してください。
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching#Using_the_.40Cache_Annotation
あるサーバーでの変更は他のサーバーにキャッシュされているオブジェクトには反映されないため、クラスタ環境でのキャッシングでは問題が生じる場合があります。これは、読取り専用オブジェクトでは問題になりませんが、頻繁に更新されるオブジェクトでは問題になります。
TopLinkには、この問題に対する解決策がいくつか用意されています。
頻繁に変更されるクラスに対してはキャッシュを無効にできます。
キャッシュ・コーディネーションを使用して、クラスタ内のサーバー間で変更をブロードキャストして、変更されたオブジェクトの無効化情報を更新できます。
存続時間または時刻に基づいてキャッシュを無効化できます。
オプティミスティック・ロックを使用して、無効なオブジェクトへの更新を防ぎ、キャッシュ内でオブジェクトが無効化されるようにトリガーすることができます。
TopLinkのオブジェクト・リレーショナル・コンポーネントは、様々な問合せをサポートしています。
JPQLは、SQLに似た問合せ言語ですが、オブジェクト・モデルのパースペクティブから問合せを提示できること、およびエンティティと依存オブジェクトに対して定義されている関係のナビゲーションを可能にするパス式が含まれていることが異なります。TopLinkでは、JPQLを通常のJavaオブジェクトで使用できます。TopLinkでJPQLを使用すると、オブジェクト・モデルの各抽象エンティティの属性を使用して、問合せを宣言できます。
JPQLの短所は、動的問合せで、Webフォームや動的コンテンツから文字列を動的に連結して問合せを作成する必要があることです。また、JPQLは実行時までチェックされないので、タイプミスが多くなります。これらの短所は、次の項で説明する問合せ基準APIを使用すればある程度補えます。
EclipseLinkドキュメントの『JPQL』を参照してください。
http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL
EclipseLinkドキュメントの『EclipseLink/Release/2.1.0/JPAQueryEnhancements』も参照してください。
http://wiki.eclipse.org/EclipseLink/Release/2.1.0/JPAQueryEnhancements
JPA 2.0には、動的問合せの作成を簡素化するために問合せ基準APIが定義されています。基準問合せでは、パラメータを使用でき、名前付き問合せと同様に問合せヒントを使用できます。問合せ基準APIでは、任意のJQPL問合せを記述できます。このAPIには、すべてのJPQLキーワードが定義されています。基準APIでは、一連のJavaインタフェースを使用して、問合せを動的に作成できるようになっています。コンパイル時に正確さを確認して、実行時のタイプミスを減らすこともできます。
EclipseLinkドキュメントの『Criteria Query』を参照してください。
http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Criteria
TopLinkの問合せヒントでは、JPA仕様には定義されていないJPA問合せのカスタマイズまたは最適化を行えます。TopLinkのJPA問合せヒントを使用して、次のことを行えます。
JPA問合せの作成
@QueryHint
注釈を使用したJPA問合せの指定
EclipseLinkドキュメントの『Query Hints』を参照してください。
http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Query_Hints
TopLinkには、式フレームワーク(TopLinkネイティブ問合せサポートとも呼ばれる)が用意されています。この機能では、JPQLでサポートされていない問合せを記述する際に、生のSQLのかわりにデータベースに中立な形で問合せを表現できます。データベースにアクセスする場合、TopLinkの式は次の点でSQLよりも優れています。
データベースが抽象化されるため、式の方が管理が容易です。
ディスクリプタまたはデータベース表に変更を加えても、アプリケーションの問合せ構造に影響を与えません。
式では、Javaの通常のコール方法に似せてQueryインタフェースを標準化するため、読みやすさが向上します。
式を使用すると、読取り問合せによって、同じリレーションシップを共有する2つのクラスの間で問合せを透過的に行うことができます。これらのクラスがデータベース内の複数の表に格納されている場合、適切な結合文が自動的に生成され、両方の表から情報が返されます。
式は複雑な操作を単純化します。
TopLinkでは、指定した式から適切なSQLが自動的に生成されます。
式フレームワークでは、式、データベース問合せ、コール・オブジェクトおよびネイティブ問合せを操作できます。次のリストで説明されている問合せの詳細は、EclipseLinkドキュメントの『Native SQL Queries』を参照してください。
http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Native
EclipseLinkのDatabaseQuery
を使用したJPA問合せ
TopLinkのDatabaseQuery
は、オブジェクト・レベルおよびデータ・レベルでの読取りおよび書込みを含む、データベース問合せの様々な要件を処理するための豊富なAPIが用意された問合せオブジェクトです。
TopLinkのコール・オブジェクトを使用したJPA問合せ
DatabaseQuery
のメソッドsetCall
を使用すると、SQLストアド・プロシージャおよびストアド・ファンクションなど、EJB QL問合せおよびEISインタラクションなどの様々なデータ・ソースのオプションに対応した、独自のTopLink Call
を定義できます。
ネイティブ問合せの名前付きパラメータ
TopLinkでは、TopLinkの#表記規則を使用して、ネイティブ問合せに名前付きパラメータを指定できます。
ネイティブ問合せのJPQL位置パラメータ
TopLinkでは、Java永続性問合せ言語(JPQL)の位置パラメータの表記規則?n
を使用して、番号別にパラメータを指定すれば、ネイティブ問合せに位置パラメータを指定できます。
ネイティブ問合せのJDBCスタイル位置パラメータ
TopLinkでは、JDBCスタイル位置パラメータの?
表記規則を使用して、ネイティブ問合せに位置パラメータを指定できます。
TopLink Object-XMLコンポーネントでは、JavaクラスをXMLスキーマに効率的にバインドできます。Object-XMLではJAXBが実装されるので、注釈でマッピング情報を指定でき、マッピングをXML形式で保存できます。
JAXB (Java Architecture for XML Binding—JSR 222)は、JavaのXMLバインディングの標準です。JAXBでは、XMLスキーマの概念が100%網羅されています。TopLinkでは、JAXBの実装が多くの拡張機能とともに提供されています。
TopLink Object-XMLをJAXBプロバイダとして使用する際には、既存のオブジェクト・モデルをXMLに変換するためのメタデータは不要です。XML表記を微調整する必要がある場合は、(注釈またはXMLを使用して)メタデータを指定できます。
TopLink Object-XMLには、Javaクラス・モデルでスキーマをミラーリングしなくても、複雑なXML構造を処理できる高度なマッピングが多数含まれています。
詳細は、EclipseLinkドキュメントの『The EclipseLink MOXy (JAXB) User's Guide』を参照してください。
http://wiki.eclipse.org/EclipseLink/UserGuide/MOXy
次の各項で、これらの機能の多くについて説明します。
TopLink Object-XMLをJAXBプロバイダとして使用するには、TopLink JAXBランタイムへのエントリ・ポイントを指定する必要があります。このエントリ・ポイントはJAXBContextFactory
クラスです。
jaxb.properties
というテキスト・ファイルを作成して、JAXBContextFactory
クラスへのパスをjavax.xml.bind.context.factory
コンテキスト・パラメータの値として、次のように入力します。
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
jaxb.properties
ファイルは、ドメイン・クラスと同じパッケージに存在する必要があります。
図2-2に示されているObject-XMLのサンプル・アーキテクチャでは、開始点はXMLスキーマになっています。バインディング・コンパイラは、スキーマから導出されたプログラム・クラスおよびインタフェースのセットにソース・スキーマをバインドします。アプリケーション内のJAXBの注釈が付いたクラスは、スキーマ・コンパイラで生成されるか、開発者がJAXB注釈を既存のJavaクラスに追加した結果によって生成されます。アプリケーションは、データをXML文書にマーシャリングするか、データをコンテンツ・オブジェクトのツリーにアンマーシャリングできます。各コンテンツ・オブジェクトは、導出されたスキーマ、またはスキーマ・ジェネレータによってマップされた既存のプログラム要素のどちらかのインスタンスで、XML内のインスタンスに対応しています。
JAXBContextFactory
クラスは、TopLink JAXBランタイムへのエントリ・ポイントです。これは、必須のファクトリ・メソッドを提供し、JAXBContext
の新しいインスタンスを作成できます。
JAXBContextFactory
では、次のことを行えます。
クラスの配列およびプロパティ・オブジェクトからのJAXBContext
の作成
コンテキスト・パスおよびクラスローダーからのJAXBContext
の作成
JAXBContext
クラスは、JAXB APIに対するクライアントのエントリ・ポイントを提供します。JAXBContext
クラスは、メタデータの解釈、スキーマ・ファイルの生成、およびJAXBオブジェクト(Marshaller
、Unmarshaller
、Binder
、Introspector
およびValidator
)のインスタンスの作成を行います。
TopLink Object-XMLには、JAXBContext
を作成する際にいくつかのオプションが用意されています。次のものからブートストラップするオプションがあります。
JAXBの注釈の付いた1つ以上のクラスのリスト
Javaクラスのマッピングが定義された1つ以上のTopLink XMLバインディング・ドキュメントのリスト
クラスとXMLバインディングの組合せ
コンテキスト・パスのリスト
sessions.xml
に定義されているTopLinkセッションを参照するセッション名のリスト
2.2.2.1項「JAXBコンテキストおよびJAXBコンテキスト・ファクトリ」に説明されている入力オプションに加えて、TopLink Object-XMLには、TopLinkのメタデータを提供するMetadataSource
の概念が用意されています。これにより、マッピング情報をアプリケーションの外部に保存して、アプリケーションのJAXBContext
が作成またはリフレッシュされるときにマッピング情報を取得できるようになります。MetadataSource
の実装の詳細は、EclipseLinkドキュメントの『MetadataSource』を参照してください。
http://wiki.eclipse.org/EclipseLink/UserGuide/MOXy/Runtime/MetadataSource
TopLinkでは、すべての標準JAXB注釈を使用できます。TopLinkには、標準注釈に加えて、TopLink XMLバインディング・ドキュメントという、メタデータを表現する別の方法も用意されています。XMLバインディングは、マッピング情報を実際のJavaクラスから分離できるだけでなく、次のような高度なメタデータ・タスクにも使用できます。
追加のマッピング情報で、既存の注釈を拡張またはオーバーライドできます。
Java注釈を使用せずに、すべてのマッピング情報を外部指定できます。
複数のバインディング文書にまたがるマッピングを定義できます。
具体的なJavaフィールドに対応しない「仮想」マッピングを指定できます。
詳細は、EclipseLinkドキュメントの『XML Bindings』を参照してください。
http://wiki.eclipse.org/EclipseLink/UserGuide/MOXy/Runtime/XML_Bindings
Java注釈を使用して、TopLinkプロジェクトにJAXBの機能を指定できます。TopLinkには、Java注釈に加えて、eclipselink-oxm.xml
というXMLマッピング構成ファイルが用意されています。このマッピング・ファイルには、標準のJAXBマッピングに加えて、高度なマッピング・タイプ用の構成オプションが含まれています。eclipselink-oxm.xml
ファイルを、ソース・コードのJAXB注釈のかわりに使用するか、JAXB注釈をオーバーライドするために使用できます。
注意: このマッピング・ファイルを使用すると、TopLinkの多くの高度な機能が有効になりますが、他のJAXB実装に対するモデルの移植性がなくなる場合があります。 |
TopLink Object-XMLでは、従来のJavaのアクセス方法を使用してオブジェクトの値を取得および設定する方法に加えて、XPath文を使用して値にアクセスすることもできます。TopLinkのJAXBContext
には、XPathで値を取得および設定できるようにするための特殊なAPIがあります。詳細は、EclipseLinkドキュメントの『Querying Objects by XPath』を参照してください。
http://wiki.eclipse.org/EclipseLink/UserGuide/MOXy/Runtime/Querying_Objects_by_XPath