Java EE 5 プラットフォームの Java Persistence
このドキュメントでは、Java™ Persistence を使用して Web アプリケーションを開発する基本的な手順を学ぶことができます。 Java Persistence API は、Java EE 5 プラットフォームの一部として導入されました。 このチュートリアルでは、簡単な Web アプリケーションプロジェクトを作成します。 プロジェクトでは持続性を使用しますが、Java Persistence API により、EJB モジュールを作成しなくても持続性を使用できます。
プロジェクトで Java Persistence を使用すると、持続性フィールドまたはプロパティー向けのオブジェクトリレーショナルマッピング情報を提供する配備記述子の設定が不要になり、アプリケーション開発が大幅に簡素化されます。代わりに、注釈を使用して、これらのプロパティーを簡単な Java クラス内で直接定義できます。
エンティティーの持続性は、EntityManager API によって管理されます。 EntityManager API は持続性コンテキストを処理し、各持続性コンテキストはエンティティーインスタンスのグループです。 アプリケーション開発時には、クラス内で注釈を使用して、エンティティーのインスタンスからなる持続性コンテキストのインスタンスを指定できます。 そのあと、エンティティーのインスタンスのライフサイクルは、コンテナによって処理されます。
このドキュメントでは NetBeans IDE 5.5 リリースを使用します。
予想される所要時間: 15 分
前提条件
このドキュメントは、次のテクノロジについて基本的な知識またはプログラミング経験を持つ読者を想定して書かれています。
- Java プログラミング
- NetBeans IDE
このチュートリアルに必要なソフトウェア
このチュートリアルでは、コンピュータに次のソフトウェアをインストールしておく必要があります。
このチュートリアルでは、Sun Java System Application Server のローカルインスタンスを IDE に登録する必要があります。
チュートリアルの課題
Web アプリケーションプロジェクトの設定
この課題の目標は、ZooApp という Web アプリケーションプロジェクトを作成することです。 このアプリケーションでは、新しい Java Persisitence モデルの機能を利用します。 その機能の 1 つは、エンティティーオブジェクトを簡単な Java クラスにできることです。そのため、エンティティーオブジェクトを EJB モジュール内に置いて EAR ファイルにパッケージ化する必要はありません。 このことは、エンティティークラスを直接 Web アプリケーションの内部に作成できることを意味します。
- 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択します。 「Web」カテゴリから「Web アプリケーション」を選択し、「次へ」をクリックします。
- このプロジェクトに「ZooApp」という名前を付け、サーバーを「Sun Java System Application Server」に、「Java EE バージョン」を「Java EE 5」にそれぞれ設定して、「次へ」をクリックします。
- 「JavaServer Faces」チェックボックスを選択して「完了」をクリックします。
まとめ
この課題では、エンティティークラスを含める Java EE 5 Web アプリケーションを作成しました。
持続性ユニットの作成
この課題では、エンティティーマネージャーによって管理されるエンティティークラスやこれらのエンティティーによって使用されるデータソースをコンテナに指示するための、持続性ユニットを作成します。
持続性ユニットの作成は、Web モジュール内に作成する persistence.xml でプロパティーを定義することによって行います。 持続性ユニットの名前を指定したあと、持続性プロバイダを指定することになります。持続性プロバイダには、コンテナがエンティティーのインスタンスを管理するために使用する API が含まれています。 また、データソースと、表の生成方法を指定する必要があります。 持続性ユニットの作成には「New Persistence Unit」ウィザードを使用します。
注: 「新規エンティティークラス」ウィザードで持続性ユニットを作成することもできます。 エンティティークラス作成時に持続性ユニットが存在しない場合は、ウィザードからその作成を求められます。
持続性ユニットの作成
- 「プロジェクト」ウィンドウの ZooApp Web アプリケーションノードを右クリックし、「新規」>「ファイル/フォルダ」を選択して「新規ファイル」ウィザードを開きます。
- 「持続性」カテゴリから「持続性ユニット」を選択し、「次へ」をクリックします。
- 持続性ユニットの名前はデフォルトのままにしておきます。
- 「持続性プロバイダ」には TopLink (デフォルト) を使用します。
デフォルトのプロバイダは TopLink Essential.jar です。 TopLink Essential.jar には Java Persistence 用のライブラリが含まれています。 エンティティーマネージャーは TopLink Essential.jar に置かれています。
- 「データソース」には、デフォルトのデータソース jdbc/sample を使用します。
デフォルトのデータソース jdbc/sample は、Sun Java System Application Server にバンドルされている Java DB データベースへの接続に使用されます。
- 持続性ユニットが Java Transaction API を使用していること、アプリケーション配備時にエンティティークラスに基づいた表が作成されるように「Table Generation Strategy」が「作成」に設定されていることを確認します。
- 「完了」をクリックします。

「完了」をクリックすると、IDE によって persistence.xml が作成され、ソースエディタの「デザイン」ビューに表示されます。 ソースエディタのツールバーにある「XML」をクリックすると、persistence.xml の XML を確認できます。 このファイルには、アプリケーションのエンティティーおよび持続性を管理するために Java EE 5 コンテナが必要とする情報がすべて含まれています。
まとめ
この課題では、データソース、持続させるエンティティークラス、およびエンティティーのライフサイクル管理のためにコンテナが使用するエンティティーマネージャーを指定するための、持続性ユニットを作成しました。
エンティティークラスの作成
この課題では、作成するリレーショナルデータベース内の表を表す 2 つのエンティティークラス、Animal.java と Pavilion.java を作成します。 また、データを表現するために、これらのクラス内にいくつかのフィールドを定義します。 Java Persistence 仕様では、注釈を使用して、オブジェクトリレーショナルマッピングの情報など、フィールドについての情報をコンテナに提供できます。
Animal エンティティークラスの作成
まず、Animal というエンティティークラスを作成します。 このクラスは、データベース内の ANIMAL という表を表します。 このエンティティークラスを作成すると、クラスをエンティティークラスとして定義するための @Entity という注釈が IDE によって追加されます。 このクラスを作成したあとで、表で表示するデータを表すフィールドをクラス内に作成し、注釈を使用してこれらのフィールドの一部についての追加情報を与えることになります。
各エンティティークラスは主キーを持つ必要があります。 エンティティークラスを作成すると、IDE によって、どのフィールドを主キーとして使用するかを宣言するための @Id という注釈が追加されます。 また、主 ID のキー生成方法を指定するための @Generated という注釈も IDE によって追加されます。
Animal クラスを作成するには、次の手順を実行します。
- ZooApp プロジェクトノードを右クリックし、「新規」>「ファイル/フォルダ」を選択します。
- 「持続性」カテゴリから「エンティティークラス」を選択し、「次へ」をクリックします。
- クラス名に「Animal」を、パッケージに「entity」をそれぞれ入力し、「主キーの型」は Long のままにしておきます。 「完了」をクリックします。
「完了」をクリックすると、エンティティークラス Animal.java がソースエディタに表示されます。 ソースエディタで次の手順を実行します。
- このクラスに次のフィールド宣言を追加します。
String name;
String kind;
String weight;
Pavilion pavilion;
- ソースエディタ内で右クリックし、「リファクタリング」>「フィールドをカプセル化」を選択して、各フィールドの取得メソッドおよび設定メソッドを生成します。 「フィールドをカプセル化」ダイアログで、すべてのフィールドについて取得メソッドおよび設定メソッドのチェックボックスが選択されていることを確認します。
- 「フィールドをカプセル化」ダイアログの「次へ」をクリックし、「出力」ウィンドウの「リファクタリング」タブで「リファクタリングを実行」をクリックします。
- 続いて、Animal 表内に作成される列の 1 つの名前を変更することにします。 この列の名前を name ではなく animalName とします。 name フィールドの宣言の上に次の注釈を追加すると、生成される列の名前を指定できます。
@Column(name="animalName")
- また、Animal 表の pavilion という列に多対 1 の関係を持たせることにします。 pavilion の宣言の上に次の注釈を追加すると、この操作を行うことができます。
@ManyToOne
- Alt-Shift-F キーを押し、このクラスに必要なインポート文を生成します。
- 変更を保存します。
次の手順では、Pavilion エンティティークラスを作成します。
Pavilion エンティティークラスの作成
今度は、データベース内の PAVILION という表を表す Pavilion エンティティークラスを作成します。 ふたたびクラス内で注釈を使用し、一部のフィールドのオブジェクトリレーショナルマッピングを指定します。 Pavilion クラスを作成するには、次の手順を実行します。
- ZooApp プロジェクトノードを右クリックし、「新規」>「ファイル/フォルダ」を選択します。
- 「持続性」カテゴリから「エンティティークラス」を選択し、「次へ」をクリックします。
- クラス名に「Pavilion」を、パッケージに「entity」をそれぞれ入力し、「主キーの型」は Long のままにしておきます。 「完了」をクリックします。
「完了」をクリックすると新しいエンティティークラス Pavilion.java がソースエディタに表示されます。 ソースエディタで次の手順を実行します。
- このクラスに次のフィールド宣言を追加します。
String name;
String address;
Collection <Animal> animals;
- 「リファクタリング」>「フィールドをカプセル化」を選択し、これらのフィールドの取得メソッドおよび設定メソッドを生成します。
- 次の注釈を name の宣言の上に追加し、生成される列の名前を変更します。
@Column(name="pavilionName")
- 次の注釈を animals コレクションの上に追加し、このエンティティーに「1 対多」の関係を指定します。
@OneToMany(mappedBy="pavilion")
- Alt-Shift-F キーを押して、足りないインポート文を生成します。
- 変更を保存します。
まとめ
この課題では、2 つのエンティティークラスを作成し、フィールドを定義しました。 また、注釈を使用して、アプリケーションの配備時に生成される表の列の一部に対してプロパティーを定義しました。
Web インタフェースの作成
今度は、データベース表が作成されたかどうか、また、データを追加できるかどうかを確認するための、簡単な Web ページをいくつか作成します。 Java Server Faces (JSF) ページをアプリケーションに追加し、「エンティティークラス」ウィザードから JSF ページを使用して簡単な Web インタフェースをすばやく作成します。
- メインメニューから「ファイル」>「新規」を選択します。 「持続性」カテゴリの「エンティティークラス」から「JSF ページ」を選択し、「次へ」をクリックします。
- 「エンティティークラス」ウィザードの「新規 JSF ページ」で、「すべてを追加」をクリックして 2 つのエンティティークラスを選択し、「次へ」をクリックします。
- JSF ファイルをデフォルトの場所に保存するために、「JSF ページのフォルダ」テキストフィールドは空のままにしておきます。
- 生成されるクラスのパッケージとして entity を指定し、「完了」をクリックします。
「完了」をクリックすると Java Server Faces ファイルが IDE によって生成され、ZooApp の実行とテストが実行できます。
プロジェクトの実行
この課題では、ZooApp Web アプリケーションプロジェクトを配備してアプリケーションをテストします。
- 「ツール」>「Java DB データベース」>「Java DB サーバーを起動」を選択して、Java DB データベースを起動します。
- ZooApp プロジェクトノードを右クリックし、「プロジェクトを実行」を選択します。
「実行」をクリックすると、飼育棟と動物の一覧が確認できるメニューの付いたページがブラウザで開きます。
動物と飼育棟のデータの追加、編集、または削除を行うこともできます。
まとめ
この課題では、Java EE 5 プラットフォームで開発した ZooApp Web アプリケーションの構築を行いました。 続いて、ZooApp Web アプリケーションの配備とテストを行いました。
トラブルシューティング
プロジェクト作成時に発生する可能性がある問題の一部を次に示します。
「エンティティークラス」ウィザードの「新規 JSF ページ」に関する問題
ウィザードを使用してエンティティークラスから JSF ページを作成しようとすると、ウィザードに次のエラーメッセージが現れることがあります。
このウィザードは、JSF をサポートしている Web プロジェクトでしか使用できません。
このメッセージが出た場合、Java Server Faces フレームワークがプロジェクトプロパティーに追加されていることを確認する必要があります。 次の手順を実行することによって、Web プロジェクトに Java Server Faces サポートを追加できます。
- 「プロジェクト」ウィンドウで対象の Web アプリケーションノードを右クリックし、「プロパティー」を選択します。
- 「プロジェクトプロパティー」ダイアログの「カテゴリ」区画で「フレームワーク」を選択し、「追加」をクリックします。
- 「Select Frameworks」ダイアログで「Java Server Faces」を選択して「了解」をクリックします。
- 「プロジェクトプロパティー」ダイアログの「了解」をクリックして、ウィンドウを閉じます。
プロジェクトプロパティーに「JSF フレームワーク」を追加したあとは、ウィザードを使用して JSF ページを作成できるはずです。
次の手順
NetBeans IDE 5.5 を使用して Java EE アプリケーションを開発する方法については、次のリソースを参照してください。
Java Persistence の使用方法についての詳細は、Java EE 5 チュートリアル (英語) を参照してください。
nbj2ee メーリングリストに登録することによって、NetBeans IDE Java EE 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。