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の例が掲載されています。

チュートリアルの課題

このページの内容は、NetBeans IDE 7.2、7.3、7.4および8.0に適用されます

このチュートリアルに従うには、次のソフトウェアとリソースが必要です。

ソフトウェアまたはリソース 必須バージョン
NetBeans IDE 7.2、7.3、7.4、8.0、Java EEバージョン
Java Development Kit (JDK) バージョン7または8
GlassFish Server Open Source Edition 3.x、4.x

前提条件

このドキュメントは、次のテクノロジについて基本的な知識またはプログラミング経験を持つ読者を想定して書かれています。

  • Javaプログラミング
  • NetBeans IDE

終了したプロジェクトの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プロファイルが必要です。

  1. メイン・メニューから「ファイル」>「新規プロジェクト」([Ctrl]-[Shift]-[N]、Macの場合は[⌘]-[Shift]-[N])を選択します。
  2. 「Java Web」カテゴリから「Webアプリケーション」を選択し、「次」をクリックします。
  3. プロジェクト名として「SimpleEE6App」と入力し、プロジェクトの場所を設定します。
  4. 専用フォルダを使用するオプションが選択されている場合は選択を解除します。「次」をクリックします。
    このチュートリアルでは、ライブラリを他のユーザーまたはプロジェクトと共有する必要がないので、プロジェクト・ライブラリを専用のフォルダにコピーする理由はほとんどありません。
  5. 「GlassFish Server」を選択し、「Java EEバージョン」を「Java EE 6 Web」または「Java EE 7 Web」に設定します。「次」をクリックします。
    新規プロジェクト・ウィザード
  6. 「フレームワーク」ペインで「JavaServer Faces」を選択します。「終了」をクリックします。

    Java EE Webアプリケーションを開発し、GlassFishサーバーにデプロイしている場合は、デフォルトでJSF 2.xライブラリが選択されます。デフォルトのJSFライブラリのバージョンは、GlassFishサーバーにバンドルされているバージョンによって異なります。JSF 2.xライブラリにより、Faceletsをページ言語として使用でき、JSF 1.2およびJSPもサポートされます。

    新規プロジェクト・ウィザード

「終了」をクリックすると、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は持続性コンテキストを処理し、各持続性コンテキストはエンティティ・インスタンスのグループです。アプリケーション開発時には、クラス内で注釈を使用して、エンティティのインスタンスからなる持続性コンテキストのインスタンスを指定できます。そうすると、エンティティのインスタンスのライフサイクルは、コンテナによって処理されます。

エンティティ・クラスを作成するには、次の手順を行います:

  1. プロジェクト・ノードを右クリックし、「新規」>「その他」を選択します。
  2. 「持続性」カテゴリから「エンティティ・クラス」を選択します。「次」をクリックします。
  3. クラス名に「Message」と入力します。
  4. パッケージに「entities」と入力します。
  5. 「持続性ユニットを作成」を選択します。「次」をクリックします。
  6. データ・ソースを選択します(たとえば、JavaDBを使用する場合はjdbc/sampleを選択)。

    データ・ソースjdbc/sampleは、IDEおよびGlassFishサーバーのインストール時にIDEにバンドルされますが、別のデータベースを使用する場合は他のデータ・ソースを指定することもできます。

    他のデフォルト・オプション(持続性ユニット名、EclipseLink持続性プロバイダ)はそのまま使用できます。持続性ユニットが「Java Transaction APIを使用」になっていること、およびアプリケーションデプロイ時にエンティティ・クラスに基づいた表が作成されるように「表生成戦略」が「作成」に設定されていることを確認します。

  7. 新規エンティティ・クラス・ウィザードで「終了」をクリックします。

    「終了」をクリックするとエンティティ・クラスが作成され、そのクラスがエディタに表示されます。IDEによってIDフィールドprivate Long id;が作成され、フィールドに@Idおよび@GeneratedValue(strategy=GenerationType.AUTO)という注釈が付与されます。

  8. エディタで、idフィールドの下にmessageフィールド(太字で表示)を追加します。
    private Long id;
    private String message;
  9. エディタ内を右クリックして「コードを挿入」([Alt]-[Insert]、Macの場合は[Ctrl]-[I])を選択し、「取得メソッドおよび設定メソッド」を選択します。
  10. 「取得メソッドおよび設定メソッドの生成」ダイアログ・ボックスでmessageフィールドを選択し、「生成」をクリックします。

    messageフィールドに取得メソッドと設定メソッドが生成されます。

    「持続性ユニットを作成」ウィザード
  11. 変更を保存します。

エンティティ・クラスは、データベース内の表を表します。このアプリケーションを実行すると、Messageのデータベース表が自動的に作成されます。この表には、id列とmessage列が含まれます。

XMLエディタで持続性ユニットを見ると、アプリケーションがJava Transaction API (JTA)(transaction-type="JTA")を使用しています。これは、持続性コンテキストでのエンティティのライフサイクルの管理義務がコンテナに割り当てられることを指定します。この結果、エンティティのライフサイクルがアプリケーションではなくコードで管理されるため、コードが少なくてすみます。JTAを使用してトランザクションを管理する方法については、Java Transaction APIのドキュメントを参照してください。

セッション・ファサードの作成

この課題では、ウィザードを使用して、Messageエンティティのステートレス・セッション・ファサードを作成します。EJB 3.1仕様で、セッションBeanのビジネス・インタフェースがオプションになったことが示されています。このアプリケーションでは、Beanにアクセスするクライアントがローカル・クライアントであるため、Beanを公開する方法として、ローカル・インタフェースを使用する方法と、インタフェースなしのビューを使用するオプションがあります。

セッションBeanを作成するには、次の手順を行います:

  1. プロジェクト・ノードを右クリックし、「新規」>「その他」を選択します。
  2. 「Enterprise JavaBeans」カテゴリから「エンティティ・クラスのセッションBean」を選択します。「次」をクリックします。
  3. Message」エンティティを選択し、「追加」をクリックします。「次」をクリックします。
  4. パッケージに「boundary」と入力します。「終了」をクリックします。

    セッション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を作成するには、次の手順を実行します。

  1. プロジェクト・ノードを右クリックし、「新規」>「その他」を選択します。
  2. 「JavaServer Faces」カテゴリからJSF管理対象Beanを選択します。「次」をクリックします。
  3. クラス名に「MessageView」と入力します。

    Beanでメソッドをコールするときに、管理対象Bean名のMessageViewを、JSFページindex.xhtmlinputTextおよびcommandButtonの値として使用します。

  4. パッケージに「my.presentation」と入力します。
  5. 管理対象Beanに使用する名前に「MessageView」と入力します。

    注意:ウィザードを使用して管理対象Beanを作成すると、デフォルトでは、Beanクラスの名前に基づいて先頭を小文字にした名前がBeanに割り当てられます。このチュートリアルおよびデモでは、大文字で始まる名前をBeanに明示的に割り当てます。JSFページでこのBeanを参照するときは、messageViewではなくMessageViewを使用します。名前を明示的に割り当てなかった場合は、JSFページでデフォルトのmessageViewを使用します。

  6. 「スコープ」を「リクエスト」に設定します。「終了」をクリックします。
新規JSF管理対象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のコード補完は、メソッドを入力するときに役立ちます。

  1. エディタ内を右クリックして「コードを挿入」([Alt]-[Insert]、Macの場合は[Ctrl]-[I])を選択し、ポップアップ・メニューから「エンタープライズBeanをコール」を選択します。
  2. 「エンタープライズBeanをコール」ダイアログ・ボックスで「MessageFacade」を選択します。「OK」をクリックします。
    「エンタープライズBeanをコール」ダイアログ

    「OK」をクリックすると、次のコード(太字で表示)が追加され、Beanが注入されます。

    public class MessageView {
    
        /** Creates a new instance of MessageView */
        public MessageView() {
        }
    
        // Injects the MessageFacade session bean using the @EJB annotation
        @EJB
        private MessageFacade messageFacade;
    }
    
  3. 次のコードを追加して新しいインスタンスを作成します。
    /** Creates a new instance of MessageView */
        public MessageView() {
           this.message = new Message();
        }
  4. クラスに次のコードを追加します。
        // Creates a new field
        private Message message;
    
    
        // Calls getMessage to retrieve the message
        public Message getMessage() {
           return message;
        }
    
        // Returns the total number of messages
        public int getNumberOfMessages(){
           return messageFacade.findAll().size();
        }
    
        // Saves the message and then returns the string "theend"
        public String postMessage(){
           this.messageFacade.create(message);
           return "theend";
        }
    
  5. エディタ内を右クリックして「インポートを修正」([Alt]-[Shift]-[I]、Macの場合は[⌘]-[Shift]-[I])を選択し、変更内容を保存します。

エディタでコード補完を使用すると、コードの入力に役立ちます。

postMessageメソッドが文字列「theend」を返します。JSF 2.x仕様では、Faceletsテクノロジを使用するアプリケーションで暗黙ナビゲーション・ルールを使用できます。このアプリケーションは、faces-config.xmlにナビゲーション・ルールが構成されていません。かわりに、ナビゲーション・ハンドラが、アプリケーション内で適切なページを検索しようとします。この場合、ナビゲーション・ハンドラは、postMessageメソッドが呼び出されると、theend.xhtmlという名前のページを検索しようとします。

インデックス・ページの変更

この課題では、index.xhtmlページに単純な変更を加えて、いくつかのUIコンポーネントを追加します。入力テキスト・フィールドとボタンのあるフォームを追加します。

  1. エディタでindex.xhtmlを開きます。
  2. 次の単純なフォームを<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のコード補完は、コードを入力するときに役立ちます。

    ソース・エディタでのコード補完

    注意:コードをコピーしてファイルに貼り付けると、<f:view>がある行の左マージンに警告が表示されます。この行に挿入カーソルを置いて[Alt]-[Space]を入力すると、エラーの解決方法に関するヒントを開くことができます。このヒントは、xmlns:f="http://xmlns.jcp.org/jsf/core"というライブラリ宣言を追加する必要があることを示しています。

  3. 変更を保存します。

inputTextコンポーネントとcommandButtonコンポーネントが、名前付きのJSF管理対象BeanMessageViewでメソッドを呼び出します。postMessageメソッドが「theend」を返し、ナビゲーション・ハンドラがtheend.xhtmlという名前のページを検索します。

結果ページの作成

この課題では、JSFページtheend.xhtmlを作成します。このページは、ユーザーがindex.xhtmlのPost Messageボタンをクリックし、JSF管理対象BeanのpostMessageメソッドを呼び出したときに表示されます。

  1. プロジェクト・ノードを右クリックし、「新規」>「その他」を選択します。
  2. 「JavaServer Faces」カテゴリから「JSFページ」を選択します。「次」をクリックします。
  3. ファイル名に「theend」と入力します。
  4. 「Facelets」オプションが選択されていることを確認します。「終了」をクリックします。
    新規JSFファイル・ウィザードのスクリーンショット
  5. 次のコードを<h:body> タグの間に入力してファイルを変更します。
    <h:body>
        <h:outputLabel value="Thanks! There are "/>
        <h:outputText value="#{MessageView.numberOfMessages}"/>
        <h:outputLabel value=" messages!"/>
    </h:body>

入力を始めると、xmlns:h="http://xmlns.jcp.org/jsf/html"タグ・ライブラリ定義がJSF要素のファイルに自動的に追加されます。

アプリケーションの実行

これで、アプリケーションのコード作成が終了しました。ブラウザでアプリケーションをテストできます。

  1. 「プロジェクト」ウィンドウでプロジェクト・ノードを右クリックし、「実行」を選択します。

    「実行」を選択すると、アプリケーションがビルドおよびデプロイされ、index.xhtmlがブラウザに表示されます。

  2. テキスト・フィールドにメッセージを入力します。「Post Message」をクリックします。
    ブラウザのアプリケーション

「Post Message」をクリックすると、メッセージがデータベースに保存され、メッセージ数が取得され、表示されます。

結果が表示されたブラウザのアプリケーション

ソリューション・プロジェクトのダウンロード

このチュートリアルで使用するサンプル・プロジェクトは、次の方法でダウンロードできます。

  • 終了したプロジェクトのZIPアーカイブをダウンロードします。
  • 次の手順を実行して、プロジェクト・ソースをNetBeansのサンプルからチェックアウトします。
    1. メイン・メニューから「チーム」>「Subversion」>「チェックアウト」を選択します。
    2. 「チェックアウト」ダイアログ・ボックスで次のリポジトリURLを入力します。
      https://svn.netbeans.org/svn/samples~samples-source-code
      「次」をクリックします。
    3. 「参照」をクリックして「リポジトリ・フォルダを参照」ダイアログ・ボックスを開きます。
    4. ルート・ノードを展開し、samples/javaee/SimpleEE6Appを選択します。「OK」をクリックします。
    5. ソースのローカル・フォルダを指定します(ローカル・フォルダは空である必要があります)。
    6. 「終了」をクリックします。

      「終了」をクリックすると、IDEではローカル・フォルダがSubversionリポジトリとして初期化され、プロジェクト・ソースがチェックアウトされます。

    7. チェックアウトが完了するときに表示されるダイアログで、「プロジェクトを開く」をクリックします。

    注意:



関連項目

NetBeans IDEを使用したJava EEアプリケーションの開発方法の詳細は、次のリソースを参照してください。

Java EEテクノロジを使用したアプリケーション開発の詳細は、Java EE 7チュートリアルを参照してください。

nbj2eeメーリング・リストに登録することによって、NetBeans IDE Java EE開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2013, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo