Java Persistence API (JPA) のアーキテクチャー
データ・パーシスタンスは、アプリケーション実行間でデータを維持する機能です。 エンタープライズ・アプリケーションでは、リレーショナル・データベースにアクセスする必要があるため、パーシスタンスがきわめて重要です。 この環境用に開発されたアプリケーションは、パーシスタンス自身を管理するか、またはサード・パーティーのソリューションを使用して、パーシスタンスによるデータベースの更新および取り出しを処理する必要があります。Java™ パーシスタンス API (JPA) では、パーシスタンスとオブジェクト関連マッピングを管理するメカニズムと、EJB 仕様用の機能が提供されます。
JPA 仕様では、ベンダー固有のマッピング実装に依拠することなく、内部でオブジェクト関連のマッピングが定義されます。JPA は Java EE 環境に適用される Java プログラミング・モデルに基づいていますが、アプリケーション機能のテストの際には、JPA は Java SE 環境内で作動することができます。
- EntityManager API を使用すると、オブジェクトの持続、更新、取得、またはデータベースからの除去が可能になります
- EntityManager API およびオブジェクト関連のマッピング・メタデータは、 JDBC または SQL コードを記述してパーシスタンスを維持しなくても、データベース操作の大部分を処理することが可能です
- JPA は、独立した EJB 照会言語 (JPQL とも呼ばれます) を拡張して照会言語を提供します。この照会言語を使用すると、処理しているデータベースに固有な SQL 照会を記述することなく、オブジェクトを取り出すことができます。
JPA は、Java Enterprise Edition (Java EE) コンテナーの内側と外側の両方で動作するように設計されています。JPA をコンテナー内で 実行する場合、アプリケーションは、そのコンテナーを使用してパーシスタンス・コンテキストを管理できます。 JPA を管理するコンテナーが存在しない場合、アプリケーション自身がパーシスタンス・コンテキスト管理を処理する必要があります。 コンテナー管理パーシスタンス用に設計されているアプリケーションは、パーシスタンスを処理するコード実装をそれほど必要としませんが、これらのアプリケーションをコンテナーの外側で使用することはできません。独自のパーシスタンスを管理するアプリケーションは、コンテナー環境または Java SE 環境で機能することができます。
- パーシスタンス・ユニット
- リレーショナル・データベースに対するエンティティー・クラス・オブジェクトの関係を記述する宣言メタデータから構成されます。EntityManagerFactory はこのデータを使用して、EntityManager を通してアクセスできるパーシスタンス・コンテキストを作成します。
- EntityManagerFactory
- データベース対話の EntityManager を作成するのに使用されます。一般的にアプリケーション・サーバー・コンテナーではこの機能は提供されますが、JPA アプリケーション管理パーシスタンスを使用している場合は、EntityManagerFactory が必要になります。EntityManagerFactory のインスタンスは、パーシスタンス・コンテキストを表します。
- パーシスタンス・コンテキスト
- アプリケーションが現在取り扱っているアクティブ・インスタンスのセットを定義します。パーシスタンス・コンテキストは、 手動で、または注入を使用して作成することができます。
- EntityManager
- アプリケーションによって使用されているエンティティー・オブジェクトのアクティブ・コレクションを維持するリソース・マネージャー。EntityManager は、
データベース対話およびオブジェクト関連マッピングのメタデータを処理します。
EntityManager のインスタンスは、パーシスタンス・コンテキストを表します。コンテナー内の
アプリケーションは、アプリケーションへの注入または Java コンポーネント名前空間内での検索により、EntityManager を取得することができます。アプリケーションがパーシスタンスを管理している場合、
EntityManager は EntityManagerFactory から取得されます。重要: EntityManager の注入は、以下の成果物に対してのみ サポートされます。
- EJB 3.x セッション Bean
- EJB 3.x メッセージ駆動型 Bean
- サーブレット、サーブレット・フィルター、およびリスナー
- インターフェース javax.servlet.jsp.tagext.Tag および javax.servlet.jsp.tagext.SimpleTag を実装する JSP タグ・ハンドラー
- JavaServer Faces (JSF) 管理 Bean
- アプリケーション・クライアントのメイン・クラス。
- エンティティー・オブジェクト
- データベース・テーブル内の行を最も単純な形式で表す単純な Java クラス。エンティティー・オブジェクトは、具象クラスであっても、抽象クラスであってもかまいません。 エンティティー・オブジェクトは、プロパティーまたはフィールドを使用して状態を維持します。