Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)

[目次][用語][索引][前へ][次へ]

5.2.1 JPAを使用したアプリケーションの利点

JPAを利用したアプリケーションを使用すると,次に示すことが実現できます。

ここでは,JPAを使用しない場合とJPAを使用する場合のデータアクセスモデルを比較して,JPAを使用したアプリケーションの利点を説明します。

<この項の構成>
(1) JPAを使用しない場合のデータアクセスモデル
(2) JPAを使用した場合のデータアクセスモデル

(1) JPAを使用しない場合のデータアクセスモデル

JPAを使用しない場合,J2EEアプリケーションからデータベースにアクセスするには,一般的に,次の図に示すようなデータアクセスモデルを使用してアプリケーションを作成します。

図5-1 JPAを使用しない場合のデータベースアクセスモデル

[図データ]

上記の図について説明します。

図の場合のデータアクセスモデルでは,SQLをビジネスロジックから隠ぺいするために,テーブルに対応するDAOと呼ばれるクラスを作成します。DAOクラスの中に,JDBCインタフェースでSQLを発行する処理を作成します。図の流れについて説明します。

  1. ビジネスロジックを記述してあるEJBでは,DAOを使用してデータベースからデータを読み出します。
  2. 取得したデータをDTOと呼ばれるオブジェクトに格納します。
  3. DTOオブジェクトをWebコンポーネントに返します。Webコンポーネントではデータベースから取得したデータをWebページに出力します。

このようなデータアクセスモデルでは,データベースのデータモデルが大きく複雑になると,作成しなければならないDAO,SQL,DTOクラスの量も多くなります。DAO,SQL,およびDTOの作成は単調な手作業のため,アプリケーション開発の生産性を低下させる原因となります。

(2) JPAを使用した場合のデータアクセスモデル

JPAを使用した場合のデータアクセスモデルは次に示す図のようになります。

図5-2 JPAを使用した場合のデータベースアクセスモデル

[図データ]

JPAを使用した場合,データベースのテーブルの行に対応したクラスを作成します。これを,エンティティクラスといいます。ビジネスロジックを記述してあるEJBでは,このエンティティクラスのオブジェクトを直接データベースに格納するかのように,処理を記述できます。

図について説明します。

  1. JPAプロバイダと呼ばれるJPAのエンジンがデータベースに対してSQLを発行します。また,JPAプロバイダがエンティティオブジェクトとデータベースのテーブルの状態を自動的に同期を取ります。
  2. エンティティオブジェクトは,取得したデータをそのままWebコンポーネントに渡すことができます。

このように,JPAを使用するとDTOを作成する必要はありません。また,エンティティクラスは,Eclipseなどの開発ツールを使用してデータベースのテーブルスキーマから自動的に生成することもできます。従来のデータアクセスモデルで生産性を低下させる原因となっていたDAO,SQL,DTOを作成する必要がないため,従来よりもアプリケーションの生産性を向上させることができます。

なお,エンティティクラスおよびJPAプロバイダについては,「5.2.2 エンティティクラスとは」および「5.2.3 JPAプロバイダとは」を参照してください。