Google App Engine + JSF 2の例

Google App Engine + JSF 2の例

このチュートリアルでは、Google App Engine(GAE)環境でJSF 2.0 Webアプリケーションを開発およびデプロイする方法を示します。

使用されるツールとテクノロジー:

  1. JDK 1.6

  2. Eclipse 3.7 + Eclipse用Googleプラグイン

  3. Google App Engine Java SDK 1.6.3.1

  4. JSF 2.1.7

Note
この例では、このJSF 2.0 hello world exampleを再利用し、変更して、このGAE + Java exampleとマージします。

1. 新しいWebアプリケーションプロジェクト

Eclipseで、「JSFGoogleAppEngine」という名前の新しいWebアプリケーションプロジェクトを作成します。

generate a new web application GAE project

「Google Plugin for Eclipse」は、GAEプロジェクト構造のサンプルを生成します。

2. JSF 2の依存関係

GAEでJSF 2を使用するには、次のjarが必要です

  1. jsf-api-2.1.7.jar

  2. jsf-impl-2.1.7.jar

  3. el-ri-1.0.jar

コピーして「war/WEB-INF/lib」フォルダに入れます。

gae jsf2 dependency libraries

プロジェクトフォルダを右クリックし、「Properties」を選択します。 「Java Build Path」→「Libraries」タブを選択し、「Add Jars」ボタンをクリックして、上のjarファイルを選択します。

gae jsf2 java build path

Note
このel-ri-1.0.jarを配置する必要があります。そうしないと、エラーメッセージ–Unable to instantiate ExpressionFactory ‘com.sun.el.ExpressionFactoryImpl’が表示されます。

3. JSFマネージドBean

3.1 Delete plugin generated JSFGoogleAppEngineServlet.java, you don’t need this.

3.2 Create a managed bean.

ファイル:src / com / example / HelloBean.java

package com.example;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import java.io.Serializable;

@ManagedBean
@SessionScoped
public class HelloBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

3.3 Create a new WebConfiguration.java.

JSF 2は、GAEでサポートされていない「javax.naming.InitialContext」を使用しています。

これを解決するには、JSFのソースコードのコピーを取得し、WebConfiguration.javaのクローンを作成し、「javax.naming.InitialContext」クラスを使用するコメントメソッドを「src/com/sun/faces/comfig/WebConfiguration.java」に配置する必要があります。 これで、新しく作成したWebConfiguration.javaクラスが元のWebConfiguration.javaをオーバーロードします。

Note
完全なsource code of the WebConfiguration.javaを取得します。

GAEチームがこのjarをホワイトリストに載せるとは思わない。JSFのチームが将来のリリースでこれを修正できることを願っている。

4. JSFページ

4.1 Create hello.xhtml page, accept a user input and pass it to helloBean.

ファイル:war / hello.xhtml





    GAE + JSF


    

Google App Engine + JSF 2.0 example - hello.xhtml

4.2 Create welcome.xhtml page, display the user input from hellobean.

ファイル:war / welcome.xhtml





    GAE + JSF


    

Google App Engine + JSF 2.0 example - welcome.xhtml

Welcome #{helloBean.name}

4.3 Delete the plugin generated index.html file, you don’t need this.

5. web.xml

web.xmlを更新し、JSF 2を統合します。

ファイル:web.xml



    JavaServerFaces

    
    
        javax.faces.STATE_SAVING_METHOD
        client
    


    
    
        javax.faces.PROJECT_STAGE
        Development
    

    
    
        faces/hello.xhtml
    

    
    
        Faces Servlet
        javax.faces.webapp.FacesServlet
        1
    

    
    
        Faces Servlet
        /faces/*
    
    
        Faces Servlet
        *.jsf
    
    
        Faces Servlet
        *.faces
    
    
        Faces Servlet
        *.xhtml
    

Note
GAEはサーバー側の状態管理をサポートしていないため、この「http://」を回避するには、「javax.faces.STATE_SAVING_METHOD」を「client」に定義する必要があります。 www.example.com/google-app-engine/gae-jsf-view-hello-xhtml-could-not-be-restored/ [ビュー/hello.xhtmlを復元できませんでした]」GAE実稼働環境でのエラーメッセージ。

6. GAEでセッションを有効にする

appengine-web.xmlを更新し、セッションサポートを有効にします。JSFにはこれが必要です。
_
ファイル:appengine-web.xml_


  
  1

    true

7. ディレクトリ構造

最終的なディレクトリ構造を確認します。

final directory structure

8. ローカルで実行

プロジェクトを右クリックし、「Webアプリケーション」として実行します。

local output

ボタンをクリックします。

local output

10. GAEにデプロイする

appengine-web.xmlファイルを更新し、AppEngineアプリケーションIDを追加します。

ファイル:appengine-web.xml


  example-jsf2gae
  1

    true

プロジェクトを選択し、Googleアイコン「Deploy to App Engine」をクリックします。

deploy on GAE

gae production output

ソースコードをダウンロード

ファイルサイズが大きいため、すべてのJSFおよびGAE jarは除外されます。

ダウンロード–JSF2-GoogleAppEngine-Example.zip(42 KB)