Java EE 6 アプリケーション入門
このドキュメントでは、Java Enterprise Edition 6 (Java EE 6) 仕様の一部として導入された、いくつかの機能について簡単に紹介します。新機能を説明するため、このチュートリアルでは、エンティティークラス向けの EJB 3.1 ステートレスセッション Bean ファサードを含む、単純な Java EE 6 Web アプリケーションを作成する方法を示します。エンティティークラスとセッション Bean を生成するため、IDE 内のウィザードを使用します。ウィザードで生成されるコードではクエリーを使用します。このクエリーは、JPA 2.0 の一部で、Java EE 6 仕様に含まれる Criteria API で定義されます。続いて、JSF 2.0 で指定された Facelets ビューフレームワークを使用するセッションファサードおよびプレゼンテーション層にアクセスする、名前付き管理対象 Bean を作成します。
このチュートリアルは、Adam Bien 氏のブログ投稿 ( Simplest Possible JSF 2 / EJB 3.1 / JPA Component - With WAR Deployment) に基づいています。Adam Bien 氏の Kenai プロジェクト ( Java EE Patterns and Best Practices) および著書『Real World Java EE Patterns - Rethinking Best Practices』(http://press.adam-bien.com で入手可能) には、Java EE の例がほかにも掲載されています。
チュートリアルの課題
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
注:
- NetBeans IDE 6.9、7.0 および GlassFish サーバー 3.x には、Java Development Kit (JDK) 6 が必要です。
前提条件
このドキュメントは、次のテクノロジについて基本的な知識またはプログラミング経験を持つ読者を想定して書かれています。
- Java プログラミング
- NetBeans IDE
完了したプロジェクトの ZIP アーカイブはダウンロードできます。
Web アプリケーションプロジェクトの作成
この課題では、単純な Web アプリケーションを作成します。Web アプリケーションを作成する際は、ターゲットの Java EE コンテナとして GlassFish Server 3 を指定します。GlassFish サーバーは Java EE と互換性があり、このアプリケーションで必要とされる JSF 2.0 ライブラリを格納しています。
新規プロジェクトウィザードで、Java EE バージョンとして「Java EE 6 Web」を選択します。Java EE 6 Web は、完全な Java EE 6 プラットフォームのサブセットを含む、軽量の Java EE 6 プロファイルです。Java EE 6 Web プロファイルは、リモートインタフェースのサポート、完全な EJB 3.1 仕様、Java Message Service (JMS) API などの高度な Java EE 6 テクノロジを必要としない Web アプリケーション用に設計されています。
Web プロファイルは、エンタープライズ Web アプリケーションでよく使用される、トランザクション処理および持続性管理をサポートします。Java EE の Web プロファイルは、ローカルインタフェースがあるセッション Bean またはインタフェースなしのセッション Bean を使用する Web アプリケーションで使用できます。アプリケーションでリモートインタフェースを使用する場合は、完全な Java EE プロファイルが必要です。
- メインメニューから「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択します。
- 「Java Web」カテゴリから「Web アプリケーション」を選択し、「次へ」をクリックします。
- プロジェクト名として「SimpleEE6App」と入力し、プロジェクトの場所を設定します。
- 専用フォルダを使用するオプションが選択されている場合は選択を解除します。「次へ」をクリックします。
このチュートリアルでは、ライブラリをほかのユーザーまたはプロジェクトと共有する必要がないので、プロジェクトライブラリを専用のフォルダにコピーする理由はほとんどありません。
- GlassFish サーバーを選択し、「Java EE バージョン」を「Java EE 6 Web」に設定します。「次へ」をクリックします。
- 「フレームワーク」区画で「JavaServer Faces」を選択します。「完了」をクリックします。
Java EE 6 Web アプリケーションを開発し、GlassFish サーバーを配備している場合は、デフォルトで JSF 2.0 ライブラリが選択されます。JSF 2.0 ライブラリにより、Facelets をページ言語として使用できるほか、JSF 1.2 および JSP がサポートされます。

「完了」をクリックすると、IDE がプロジェクトを作成し、そのプロジェクトが「プロジェクト」ウィンドウで開きます。JSF ページの index.xhtml が自動的に作成され、そのページがエディタに表示されます。
エンティティークラスおよびセッションファサードの作成
この節では、エンティティークラスおよびそのエンティティークラス用のセッションファサードを作成します。エンティティークラスは、プレーンオールド Java オブジェクト (POJO) で、@Entity 注釈によってエンティティーとして識別される単純な Java クラスです。Java EE 5 以降の仕様では、データベースの表を表すための持続オブジェクトとしてエンティティークラスを使用できます。Java Persistence API では、EJB モジュールを作成せずに、Web アプリケーションで持続性を使用できます。
このアプリケーションのエンティティークラスのセッションファサードは、ステートレスセッション Bean です。Java EE 6 仕様の一部として導入されたエンタープライズ JavaBean (EJB) 3.1 のアーキテクチャーにより、EJB 3.0 で必須だったビジネスインタフェースなしで、セッション Bean を作成できます。また、Java EE 6 仕様では、EJB コンポーネントを直接 WAR アーカイブにパッケージ化することもできます。これにより、EAR アーカイブに JAR アーカイブとしてパッケージされる EJB モジュールを別途作成する必要がなくなるため、小規模な Web アプリケーションの開発を簡素化できます。ただし、複数のマシンに分散された、規模の大きいエンタープライズアプリケーションの場合は、EAR アーカイブを作成して、ビジネスロジックをプレゼンテーション層から分離します。
IDE での EJB 3.1 の使用に関する詳細については、「EJB 3.1 を使用したエンタープライズアプリケーションの作成」のチュートリアルを参照してください。
エンティティークラスに関する詳細については、「Java EE 6 のチュートリアル、パート I 」の「Java Persistence API 入門」を参照してください。
セッション Bean の詳細については、「Java EE 6 のチュートリアル、パート I」の「セッション Bean とは」を参照してください。
エンティティークラスの作成
この課題では、新規エンティティークラスウィザードを使用して単純な持続性エンティティークラスを作成します。また、このウィザードを使用して、このアプリケーションで使用するデータソースとエンティティーマネージャーを定義する持続性ユニットも作成します。表のデータを表示するためのフィールドをクラスに 1 つ追加し、新規フィールド用の取得メソッドと設定メソッドを生成します。
エンティティークラスには主キーが必要です。ウィザードを使用してエンティティークラスを作成する場合、フィールドを主キーとして宣言するため、IDE ではデフォルトで id フィールドが生成され、@Id 注釈を使ってフィールドに注釈が付けられます。また、主 ID フィールドのキー生成方法を指定するための @GeneratedValue という注釈も追加されます。
プロジェクトで Java Persistence を使用すると、持続フィールドまたはプロパティー向けのオブジェクトリレーショナルマッピング情報を提供する配備記述子の設定が不要になり、アプリケーション開発が大幅に簡素化されます。代わりに、注釈を使用して、これらのプロパティーを簡単な Java クラス内で直接定義できます。
エンティティーの持続性は、EntityManager API によって管理されます。EntityManager API は持続性コンテキストを処理し、各持続性コンテキストはエンティティーインスタンスのグループです。アプリケーション開発時には、クラス内で注釈を使用して、エンティティーのインスタンスからなる持続性コンテキストのインスタンスを指定できます。そうすると、エンティティーのインスタンスのライフサイクルは、コンテナによって処理されます。
エンティティークラスを作成するには、次の手順に従います。
- プロジェクトノードを右クリックし、「新規」>「その他」を選択します。
- 「持続性」カテゴリから「エンティティークラス」を選択します。「次へ」をクリックします。
- クラス名に「Message」と入力します。
- パッケージに「entities」と入力します。
- 「持続性ユニットの作成」を選択します。「次へ」をクリックします。
注. NetBeans IDE 6.8 では、「持続性ユニットの作成」ボタンをクリックすると、持続性ユニットを作成するためのダイアログが開きます。
- データソースを選択します (たとえば、JavaDB を使用する場合はjdbc/sample を選択)。
データソース jdbc/sample は、IDE および GlassFish サーバーのインストール時に IDE にバンドルされますが、別のデータベースを使用する場合はほかのデータソースを指定することもできます。
ほかのデフォルトオプション (持続性ユニット名、EclipseLink 持続性プロバイダ) はそのままでかまいません。持続性ユニットが「Java Transaction API を使用」になっていること、アプリケーション配備時にエンティティークラスに基づいた表が作成されるように「表生成の方針」が「作成」に設定されていることを確認します。
- 新規エンティティークラスウィザードで「完了」をクリックします。
「完了」をクリックするとエンティティークラスが作成され、そのクラスがエディタに表示されます。IDE によって ID フィールド private Long id; が作成され、フィールドに @Id および @GeneratedValue(strategy = GenerationType.AUTO) という注釈が付与されます。
- エディタで、id フィールドの下に message フィールド (ボールドで表示) を追加します。
private Long id;
private String message;
- エディタ内を右クリックして「コードを挿入」(Ctrl-I) を選択し、「取得メソッドおよび設定メソッド」を選択します。
- 「取得メソッドおよび設定メソッドの生成」ダイアログで message フィールドを選択し、「生成」をクリックします。
message に取得メソッドと設定メソッドが生成されます。

- 変更を保存します。
エンティティークラスは、データベース内の表を表します。このアプリケーションを実行すると、Message のデータベース表が自動的に作成されます。この表には、id 列と message 列が含まれます。
XML エディタで持続性ユニットを見ると、アプリケーションが Java Transaction API (JTA) (transaction-type="JTA") を使用しています。これは、持続性コンテキストでのエンティティーのライフサイクルの管理義務がコンテナに割り当てられることを指定します。この結果、エンティティーのライフサイクルがアプリケーションではなくコードで管理されるため、コードが少なくてすみます。JTA を使用してトランザクションを管理する方法については、Java Transaction API のドキュメントを参照してください。
セッションファサードの作成
この課題では、ウィザードを使用して、Message エンティティーのステートレスセッションファサードを作成します。EJB 3.1 仕様で、セッション Bean のビジネスインタフェースが任意になったことが示されています。このアプリケーションでは、Bean にアクセスするクライアントがローカルクライアントであるため、Bean を公開する方法として、ローカルインタフェースを使用する方法と、インタフェースなしのビューを使用するオプションがあります。
セッション Bean を作成するには、次の手順に従います。
- プロジェクトノードを右クリックし、「新規」>「その他」を選択します。
- 「Java EE」カテゴリから「エンティティークラス」の「セッション Beans」を選択します。「次へ」をクリックします。
- 「Message」エンティティーを選択し、「追加」をクリックします。「次へ」をクリックします。
- パッケージに「boundary」と入力します。「完了」をクリックします。
セッション Bean のビジネスインタフェースを作成する必要はありませんでした。代わりに、このアプリケーションでは、インタフェースなしのビューを使用して、Bean がローカルの管理対象 Bean に公開されます。

「完了」をクリックすると、セッションファサードクラス MessageFacade.java と AbstractFacade.java が生成され、エディタでこれらのファイルが開かれます。生成されたコードでわかるように、MessageFacade.java は注釈 @Stateless によってステートレスセッション Bean コンポーネントとして宣言されます。MessageFacade.java は AbstractFacade.java を拡張したもので、ビジネスロジックとトランザクション管理が含まれます。
@Stateless
public class MessageFacade extends AbstractFacade<Message> {
@PersistenceContext(unitName = "SimpleEE6AppPU")
private EntityManager em;
ウィザードを使用してエンティティーのファサードを作成すると、エンティティーマネージャーリソースをセッション Bean コンポーネントに注入し、持続性ユニットの名前を指定するため、デフォルトで PersistenceContext 注釈 (@PersistenceContext(unitName = "SimpleEE6AppPU")) が追加されます。この例では、持続性ユニットの名前が明示的に宣言されますが、アプリケーションに持続性ユニットが 1 つしかない場合、この名前は省略可能です。
IDE では、AbstractFacade.java に、エンティティーを作成、編集、削除、および検索するためのメソッドも生成されます。EntityManager API では、持続性コンテキストと連携するために使用されるメソッドが定義されます。IDE によって、エンティティーオブジェクトの検索に使用可能な、一般的に使用されるデフォルトのクエリーメソッドがいくつか生成されます。findAll メソッド、findRange メソッド、および count メソッドは、クエリーを作成するため、Criteria API で定義されたメソッドを使用します。Criteria API は、Java EE 6 仕様に含まれる JPA 2.0 仕様の一部です。
JSF 管理対象 Bean および JSF ページの作成
この節では、JavaServer Faces (JSF) 2.0 を使用してアプリケーションのプレゼンテーション層を作成し、JSF ページで使用される管理対象バッキング Bean を作成します。JSF 2.0 仕様により、JSF ベースのアプリケーション用の優先ビューテクノロジとして、Facelets のサポートが追加されます。JSF 2.0 以降では、クラスを管理対象 Bean と宣言するため、ソースコードで @ManagedBean 注釈を使用することもできます。JSF 管理対象 Bean を宣言するために faces-config.xml ファイルにエントリを追加する必要はなくなりました。管理対象 Bean のメソッドにアクセスするため、JSF ページで Bean 名を使用できます。
IDE での JavaServer Faces 2.0 仕様のサポートについては、「NetBeans IDE 6.8 での JSF 2.0 サポート」を参照してください。
JavaServer Faces 2.0 仕様の詳細については、「Java EE 6 チュートリアル、第 I 巻」の JavaServer Faces テクノロジの章を参照してください。
管理対象 Bean の作成
この課題では、セッションファサードへのアクセスに使用される、単純な JSF 管理対象 Bean を作成します。Java EE 6 の一部である JSF 2.0 仕様により、Bean クラスで注釈を使用して、クラスを JSF 管理対象 Bean として識別したり、範囲を指定したり、Bean の名前を指定したりすることができます。
管理対象 Bean を作成するには、次の手順に従います。
- プロジェクトノードを右クリックし、「新規」>「その他」を選択します。
- JavaServer Faces カテゴリから JSF 管理対象 Bean を選択します。「次へ」をクリックします。
- クラス名に「MessageView」と入力します。
Bean でメソッドを呼び出すときに、管理対象 Bean 名の MessageView を、JSF ページ index.xhtml の inputText および commandButton の値として使用します。
- パッケージに「my.presentation」と入力します。
- 管理対象 Bean に使用する名前に「MessageView」と入力します。
注: ウィザードを使用して管理対象 Bean を作成すると、デフォルトでは、Bean クラスの名前を基にして先頭を小文字にした名前が Bean に割り当てられます。このチュートリアルおよびデモの目的上、ここでは大文字で始まる名前を Bean に明示的に割り当てています。JSF ページでこの Bean を参照するときは、messageView ではなく MessageView を使用します。名前を明示的に割り当てなかった場合は、JSF ページでデフォルトの messageView を使用します。
- 「スコープ」を「要求」に設定します。「完了」をクリックします。
「完了」をクリックすると Bean クラスが作成され、そのクラスがエディタに表示されます。「プロジェクト」ウィンドウに次のファイルが表示されます。
エディタで、@ManagedBean 注釈、@RequestScoped 注釈、および Bean の名前が追加されたことがわかります。
@ManagedBean(name="MessageView")
@RequestScoped
public class MessageView {
/** MessageView の新しいインスタンスを作成*/
public MessageView() {
}
}
ここで、依存関係の注入を使用して MessageFacade セッション Bean への参照を取得するための @EJB 注釈を追加します。ファサードに公開された findAll メソッドと create メソッドも呼び出します。IDE のコード補完は、メソッドを入力するときに役立ちます。
- エディタ内を右クリックし、「コードを挿入」(Ctrl+I) を選択してポップアップメニューを開きます。
- ポップアップメニューで「エンタープライズ Bean を呼び出し」を選択します。
- 「エンタープライズ Bean を呼び出し」ダイアログで「MessageFacade」を選択します。「了解」をクリックします。
「了解」をクリックすると、次のコード (ボールドで表示) が追加され、Bean が注入されます。
public class MessageView {
/** MessageView の新しいインスタンスを作成 */
public MessageView() {
}
// @EJB 注釈を使用して MessageFacade セッション Bean を注入
@EJB
private MessageFacade messageFacade;
}
- 次のコードを追加して新しいインスタンスを作成します。
/** MessageView の新しいインスタンスを作成*/
public MessageView() {
this.message = new Message();
}
- クラスに次のコードを追加します。
// 新しいフィールドを作成
private Message message;
// getMessage を呼び出してメッセージを取得
public Message getMessage() {
return message;
}
// メッセージの合計数を返す
public int getNumberOfMessages(){
return messageFacade.findAll().size();
}
// メッセージを保存し、文字列 "theend" を返す
public String postMessage(){
this.messageFacade.create(message);
return "theend";
}
- インポートを修正して (Ctrl-Shift-I) 変更内容を保存します。
エディタでコード補完を使用すると、コードの入力に役立ちます。
postMessage メソッドが文字列「theend」を返します。JSF 2.0 仕様では、Facelets テクノロジを使用するアプリケーションで暗黙ナビゲーション規則を使用できます。このアプリケーションは、faces-config.xml にナビゲーション規則が構成されていません。代わりに、ナビゲーションハンドラが、アプリケーション内で適切なページを検索しようとします。この場合、ナビゲーションハンドラは、postMessage メソッドが呼び出されると、theend.xhtml という名前のページを検索しようとします。
インデックスページの変更
この課題では、index.xhtml ページに簡単な変更を加えて、いくつかの UI コンポーネントを追加します。入力テキストフィールドとボタンのあるフォームを追加します。
- エディタで index.xhtml を開きます。
- 次の簡単なフォームを <h:body> タグの間に追加するようにファイルを変更します。
<h:body>
<f:view>
<h:form>
<h:outputLabel value="Message:"/><h:inputText value="#{MessageView.message.message}"/>
<h:commandButton action="#{MessageView.postMessage}" value="Post Message"/>
</h:form>
</f:view>
</h:body>
JSF のコード補完は、コードを入力するときに役立ちます。
- 変更を保存します。
inputText コンポーネントと commandButton コンポーネントが、名前付きの JSF 管理対象 Bean MessageView でメソッドを呼び出します。postMessage メソッドが「theend」を返し、ナビゲーションハンドラが theend.xhtml という名前のページを検索します。
結果ページの作成
この課題では、JSF ページ theend.xhtml を作成します。このページは、ユーザーが index.xhtml の Post Message ボタンをクリックし、JSF 管理対象 Bean の postMessage メソッドを呼び出したときに表示されます。
- プロジェクトノードを右クリックし、「新規」>「その他」を選択します。
- 「JavaServer Faces」カテゴリから「JSF ページ」を選択します。「次へ」をクリックします。
- ファイル名に「theend」と入力します。
- Facelets オプションが選択されていることを確認します。「完了」をクリックします。
- 次のコードを <h:body> タグの間に入力してファイルを変更します。
<h:body>
<h:outputLabel value="Thanks! There are "/>
<h:outputText value="#{MessageView.numberOfMessages}"/>
<h:outputLabel value=" messages!"/>
</h:body>
入力を始めると、xmlns:h="http://java.sun.com/jsf/html タグライブラリ定義が JSF 要素のファイルに自動的に追加されます。
アプリケーションの実行
これで、アプリケーションのコード作成が完了しました。ブラウザでアプリケーションをテストできます。
- 「プロジェクト」ウィンドウでプロジェクトノードを右クリックし、「実行」を選択します。
「実行」を選択すると、アプリケーションが構築および配備され、index.xhtml がブラウザに表示されます。
- テキストフィールドにメッセージを入力します。「Post Message」をクリックします。
「Post Message」をクリックすると、メッセージがデータベースに保存され、メッセージ数が取得され、表示されます。
ソリューションプロジェクトのダウンロード
このチュートリアルで使用するサンプルプロジェクトは、次の方法でダウンロードできます。
- 完了したプロジェクトの ZIP アーカイブをダウンロードします。
- 次の手順を実行して、プロジェクトソースを NetBeans のサンプルからチェックアウトします。
- メインメニューから「チーム」>「Subversion」>「チェックアウト」を選択します。
- 「チェックアウト」ダイアログで次のリポジトリ URL を入力します。
https://svn.netbeans.org/svn/samples~samples-source-code
「次へ」をクリックします。
- 「参照」をクリックして「リポジトリフォルダを参照」ダイアログを開きます。
- ルートノードを展開し、samples/javaee/SimpleEE6App を選択します。「了解」をクリックします。
- ソースのローカルフォルダを指定します。ローカルフォルダは空である必要があります。
- 「完了」をクリックします。
「完了」をクリックすると、IDE はローカルフォルダを Subversion リポジトリとして初期化し、プロジェクトソースをチェックアウトします。
- チェックアウトが完了するときに表示されるダイアログで、「プロジェクトを開く」をクリックします。
注:
関連項目
NetBeans IDE を使用した Java EE アプリケーションの開発方法についての詳細は、次のリソースを参照してください。
Java EE 6 テクノロジを使用したアプリケーション開発の詳細については、「Java EE 6 チュートリアル」を参照してください。
nbj2ee メーリングリストに登録する ことによって、NetBeans IDE Java EE 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。