Java EEアプリケーションの開始このドキュメントでは、Java Enterprise Edition 6 (Java EE 6)仕様の一部として導入された、いくつかの機能について簡単に紹介します。新機能を説明するため、このチュートリアルでは、エンティティ・クラス向けのEJB 3.1ステートレス・セッションBeanファサードを含む、単純なJava EE Webアプリケーションを作成する方法を示します。エンティティ・クラスとセッションBeanを生成するため、IDE内のウィザードを使用します。ウィザードで生成されるコードでは問合せを使用します。この問合せは、JPA 2.xの一部で、Java EE 6仕様に含まれるCriteria APIで定義されます。続いて、JSF 2.xで指定された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の例が掲載されています。 チュートリアルの課題 ![]()
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
前提条件 このドキュメントは、次のテクノロジについて基本的な知識またはプログラミング経験を持つ読者を想定して書かれています。
終了したプロジェクトのZIPアーカイブはダウンロードできます。 Webアプリケーション・プロジェクトの作成この課題では、単純なWebアプリケーションを作成します。Webアプリケーションを作成する際は、ターゲットのJava EEコンテナとしてGlassFish Serverを指定します。GlassFishサーバーはJava EEと互換性があり、このアプリケーションで必要とされるJSF 2.xライブラリを格納しています。 新規プロジェクト・ウィザードで、Java EEバージョンとして「Java EE 6 Web」または「Java EE 7 Web」を選択します。Java EE 6 WebおよびJava EE 7 Webは、完全なJava EEプラットフォームのサブセットを含む、軽量のJava EEプロファイルです。Java EE Webプロファイルは、リモート・インタフェースのサポート、完全なEJB 3.1仕様、Java Message Service (JMS) APIなどの高度なJava EEテクノロジを必要としないWebアプリケーション用に設計されています。 Webプロファイルは、エンタープライズWebアプリケーションでよく使用される、トランザクション処理および持続性管理をサポートします。Java EEのWebプロファイルは、ローカル・インタフェースがあるセッションBeanまたはインタフェースなしのセッションBeanを使用するWebアプリケーションで使用できます。アプリケーションでリモート・インタフェースを使用する場合は、完全なJava EEプロファイルが必要です。
「終了」をクリックすると、IDEがプロジェクトを作成し、そのプロジェクトが「プロジェクト」ウィンドウで開きます。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 7チュートリアルのJava Persistence API入門の章を参照してください。 セッションBeanの詳細は、Java EE 7チュートリアルのセッションBeanとはの章を参照してください。 エンティティ・クラスの作成この課題では、新規エンティティ・クラス・ウィザードを使用して単純な持続性エンティティ・クラスを作成します。また、このウィザードを使用して、このアプリケーションで使用するデータ・ソースとエンティティ・マネージャを定義する持続性ユニットも作成します。表のデータを表示するためのフィールドをクラスに1つ追加し、新規フィールド用の取得メソッドと設定メソッドを生成します。 エンティティ・クラスには主キーが必要です。ウィザードを使用してエンティティ・クラスを作成する場合、フィールドを主キーとして宣言するため、IDEではデフォルトでidフィールドが生成され、@Id注釈を使用してフィールドに注釈が付けられます。また、プライマリIDフィールドのキー生成戦略を指定するための@GeneratedValueという注釈も追加されます。 プロジェクトでJava Persistenceを使用すると、持続フィールドまたはプロパティ向けのオブジェクト・リレーショナル・マッピング情報を提供するデプロイメント・ディスクリプタの構成の必要性が除去され、アプリケーション開発が大幅に簡素化されます。かわりに、注釈を使用して、これらのプロパティを単純なJavaクラス内で直接定義できます。 エンティティの持続性は、EntityManager APIによって管理されます。EntityManager APIは持続性コンテキストを処理し、各持続性コンテキストはエンティティ・インスタンスのグループです。アプリケーション開発時には、クラス内で注釈を使用して、エンティティのインスタンスからなる持続性コンテキストのインスタンスを指定できます。そうすると、エンティティのインスタンスのライフサイクルは、コンテナによって処理されます。 エンティティ・クラスを作成するには、次の手順を行います:
エンティティ・クラスは、データベース内の表を表します。このアプリケーションを実行すると、Messageのデータベース表が自動的に作成されます。この表には、id列とmessage列が含まれます。 XMLエディタで持続性ユニットを見ると、アプリケーションがJava Transaction API (JTA)(transaction-type="JTA")を使用しています。これは、持続性コンテキストでのエンティティのライフサイクルの管理義務がコンテナに割り当てられることを指定します。この結果、エンティティのライフサイクルがアプリケーションではなくコードで管理されるため、コードが少なくてすみます。JTAを使用してトランザクションを管理する方法については、Java Transaction APIのドキュメントを参照してください。 セッション・ファサードの作成この課題では、ウィザードを使用して、Messageエンティティのステートレス・セッション・ファサードを作成します。EJB 3.1仕様で、セッションBeanのビジネス・インタフェースがオプションになったことが示されています。このアプリケーションでは、Beanにアクセスするクライアントがローカル・クライアントであるため、Beanを公開する方法として、ローカル・インタフェースを使用する方法と、インタフェースなしのビューを使用するオプションがあります。 セッションBeanを作成するには、次の手順を行います:
「終了」をクリックすると、IDEによってセッション・ファサード・クラスMessageFacade.javaおよびAbstractFacade.javaが作成され、エディタでこれらのファイルが開きます。生成されたコードでわかるように、ステートレス・セッションBeanコンポーネントとしてMessageFacade.javaを宣言するため、注釈@Statelessが使用されます。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.x仕様の一部です。 JSF管理対象BeanおよびJSFページの作成この項では、JavaServer Faces (JSF) 2.xを使用してアプリケーションのプレゼンテーション・レイヤーを作成し、JSFページで使用される管理対象バッキングBeanを作成します。JSF 2.x仕様により、JSFベースのアプリケーション用の優先ビュー・テクノロジとして、Faceletsのサポートが追加されます。JSF 2.x以降では、クラスを管理対象Beanと宣言するため、ソース・コードで@ManagedBean注釈を使用することもできます。JSF管理対象Beanを宣言するためにfaces-config.xmlファイルにエントリを追加する必要はなくなりました。管理対象Beanのメソッドにアクセスするため、JSFページでBean名を使用できます。 IDEでのJavaServer Faces 2.x仕様のサポートについては、NetBeans IDEでのJSF 2.xサポートを参照してください。 JavaServer Faces 2.x仕様の詳細は、Java EE 7チュートリアルのJavaServer Facesテクノロジの章を参照してください。 管理対象Beanの作成この課題では、セッション・ファサードへのアクセスに使用される、単純なJSF管理対象Beanを作成します。JSF 2.x仕様により、Beanクラスで注釈を使用して、クラスをJSF管理対象Beanとして識別したり、スコープを指定したり、Beanの名前を指定したりすることができます。 管理対象Beanを作成するには、次の手順を実行します。
![]() 「終了」をクリックすると、IDEはBeanクラスを作成し、そのクラスがエディタに表示されます。「プロジェクト」ウィンドウに次のファイルが表示されます。 ![]() エディタで、@ManagedBean注釈、@RequestScoped注釈およびBeanの名前が追加されたことがわかります。 @ManagedBean(name="MessageView") @RequestScoped public class MessageView { /** Creates a new instance of MessageView */ public MessageView() { } } ここで、依存性の注入を使用してMessageFacadeセッションBeanへの参照を取得するための@EJB注釈を追加します。ファサードに公開されたfindAllメソッドとcreateメソッドもコールします。IDEのコード補完は、メソッドを入力するときに役立ちます。
エディタでコード補完を使用すると、コードの入力に役立ちます。 postMessageメソッドが文字列「theend」を返します。JSF 2.x仕様では、Faceletsテクノロジを使用するアプリケーションで暗黙ナビゲーション・ルールを使用できます。このアプリケーションは、faces-config.xmlにナビゲーション・ルールが構成されていません。かわりに、ナビゲーション・ハンドラが、アプリケーション内で適切なページを検索しようとします。この場合、ナビゲーション・ハンドラは、postMessageメソッドが呼び出されると、theend.xhtmlという名前のページを検索しようとします。 インデックス・ページの変更この課題では、index.xhtmlページに単純な変更を加えて、いくつかのUIコンポーネントを追加します。入力テキスト・フィールドとボタンのあるフォームを追加します。
inputTextコンポーネントとcommandButtonコンポーネントが、名前付きのJSF管理対象BeanMessageViewでメソッドを呼び出します。postMessageメソッドが「theend」を返し、ナビゲーション・ハンドラがtheend.xhtmlという名前のページを検索します。 結果ページの作成この課題では、JSFページtheend.xhtmlを作成します。このページは、ユーザーがindex.xhtmlのPost Messageボタンをクリックし、JSF管理対象BeanのpostMessageメソッドを呼び出したときに表示されます。
入力を始めると、xmlns:h="http://xmlns.jcp.org/jsf/html"タグ・ライブラリ定義がJSF要素のファイルに自動的に追加されます。 アプリケーションの実行これで、アプリケーションのコード作成が終了しました。ブラウザでアプリケーションをテストできます。
「Post Message」をクリックすると、メッセージがデータベースに保存され、メッセージ数が取得され、表示されます。 ![]() ソリューション・プロジェクトのダウンロードこのチュートリアルで使用するサンプル・プロジェクトは、次の方法でダウンロードできます。
関連項目NetBeans IDEを使用したJava EEアプリケーションの開発方法の詳細は、次のリソースを参照してください。 Java EEテクノロジを使用したアプリケーション開発の詳細は、Java EE 7チュートリアルを参照してください。 nbj2eeメーリング・リストに登録することによって、NetBeans IDE Java EE開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。 |
Documentation |