 ------
 Tutorial : Configuring MyFaces 2 to run on Google App Engine with Eclipse
 ------
 Ali Ok
 ------
 2010-04-08
 -------
 
~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements.  See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership.  The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License.  You may obtain a copy of the License at
~~
~~   http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied.  See the License for the
~~ specific language governing permissions and limitations
~~ under the License.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html
 

Tutorial : Configuring MyFaces 2 to run on Google App Engine with Eclipse
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  Google App Engine support for MyFaces 2 made trunk and it is released with MyFaces Core 2.0.0-beta-3. 
  In this tutorial, I will explain how to use it. I assume that you have basic Eclipse, JSF and Facelets knowledge.

  You can find IDE-independent instructions {{{./googleappenginesupport.html}here}}. Additionally, there is a tutorial for IntelliJ IDEA {{{./myfaces2-googleappengine-idea-tutorial.html}here}}.

  {{{http://sites.google.com/a/aliok.com.tr/upload/uploads/tutorial-gae-myfaces2.zip?attredirects=0&d=1}Here}} 
  is the complete source code and the Eclipse project of the example application (which I took from 
  {{{https://facelets.dev.java.net/nonav/docs/dev/docbook.html}Facelets Tutorial}}) that I configured to run on 
  Google App Engine. 
  
  I deployed the application explained in this tutorial to: 
  {{{http://myfaces2-tutorial.latest.aliok-com-tr-test.appspot.com/guess.jsf}http://myfaces2-tutorial.latest.aliok-com-tr-test.appspot.com/guess.jsf}} 

  In order to run Myfaces on Google App Engine, you need to complete the steps below. Configuration explained in this document is tested with
  Google App Engine 1.3.2.

*Table of Content
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
%{toc|section=2|fromDepth=1|toDepth=1}



*{Setting up the environment}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
  [[1]]  Download Eclipse {{{http://www.eclipse.org/downloads/}here}}, preferably IDE for JEE Developers.
  
  [[2]]  Install Google Eclipse Plugin with {{{http://code.google.com/eclipse/docs/download.html}this}} guide.




*{Creating the Project and Placing the Jars}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
  [[1]] Create a Web Application Project (uncheck "Use Google Web Toolkit" if you won't use GWT)
  
[images/gaetutorial-eclipse/01.jpg] Creating the Project
  
[images/gaetutorial-eclipse/02.jpg] Creating the Project
  
  [[2]] Download Myfaces Core {{{http://myfaces.apache.org/download.html}here}}. We need "MyFaces Core 2.0.0-beta-3" or a 
        later version. Extract files below and put them into war/WEB-INF/lib.
    
      * lib/myfaces-api-2.x.x.jar
      
      * lib/myfaces-impl-2.x.x.jar
      
      * lib/commons-logging-1.x.x.jar
      
      * lib/commons-beanutils-1.x.x.jar
      
      * lib/commons-collections-3.x.jar
      
      * lib/commons-digester-x.x.jar (I tested with version 1.8)
      
      * lib/commons-discovery-0.x.jar

      Here is the war/WEB-INF/lib so far:
      
[images/gaetutorial-eclipse/03.jpg] war/WEB-INF/lib
         
      Please note that some jars (i.e. jdo2-api-2.3-eb.jar) are put by Google App Engine Eclipse plugin when the project is created.
        

  [[3]]  Download {{{http://download.java.net/maven/glassfish/javax/el/el-api/1.1/el-api-1.1.jar}el-api}}  
         and {{{http://download.java.net/maven/glassfish/org/glassfish/web/el-impl/1.1/el-impl-1.1.jar}el-impl}} 
         and put them into war/WEB-INF/lib. You can see the war/WEB-INF/lib so far below.

[images/gaetutorial-eclipse/04.jpg] war/WEB-INF/lib

  [[4]]  Add lines below into war/WEB-INF/web.xml.

+------------------------------------------------------------------------+
     <web-app ...
             ...
            <!--
                Need to set a secret to avoid javax.crypto.BadPaddingException.
                "param-value" must be Base64 encoded.
                More details: http://wiki.apache.org/myfaces/Secure_Your_Application
             -->
            <context-param>
                <param-name>org.apache.myfaces.SECRET</param-name>
                <param-value>NzY1NDMyMTA=</param-value>
                </context-param>       

            <!--
               Facelets configuration fragment
            -->
            <context-param>
              <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
              <param-value>.xhtml</param-value>
            </context-param>
           
            <servlet>
              <servlet-name>Faces Servlet</servlet-name>
              <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            </servlet>
           
            <servlet-mapping>
              <servlet-name>Faces Servlet</servlet-name>
              <url-pattern>*.jsf</url-pattern>
            </servlet-mapping>
           ...     
    </web-app>
+------------------------------------------------------------------------+

  
  
  [[5]] Make sure that you use the JSF 2 header in your faces-config.

+------------------------------------------------------------------------+
<?xml version="1.0"  encoding="UTF-8"?>

<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
     ...
</faces-config>
+------------------------------------------------------------------------+



  [[6]] Add the following line into war/WEB-INF/appengine-web.xml:

+------------------------------------------------------------------------+
      <sessions-enabled>true</sessions-enabled>
+------------------------------------------------------------------------+


  
  [[7]]  Now you can add your stuff (pages, beans, etc.). You cannot use JSP as view technology on Google App Engine. 
         You must use Facelets, which is the default view technology in JSF 2.
         





*{Deploying to App Engine Development Server (Your Local Server)}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  Right click on the project and select "Run As -> Web Application". This will start 
  Google App Engine development server. You can see the port information on the console (default is 8888).
  
[images/gaetutorial-eclipse/05.jpg] Deployment to Local Development Server
  




*{Deploying to Google App Engine}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  [[1]]  Right-click on the project and select "Properties".
  
  [[2]]  Select "Google"->"App Engine".
  
  [[3]]  Select "Use Google App Engine" if not selected, and type your "Application ID". Press OK and close the dialog.
  
[images/gaetutorial-eclipse/06.jpg] Configuring the Google App Engine Project
  
  [[4]]  Right click on the project and select "Google" -> "Deploy to App Engine"
    
  [[5]]  Enter your account information, and the application will be deployed on your-app-id.appspot.com.

[images/gaetutorial-eclipse/07.jpg] Deployment to Google App Engine

  [[6]]  The URL for the application I deployed is : 
         {{{http://myfaces2-tutorial.latest.aliok-com-tr-test.appspot.com/guess.jsf}http://myfaces2-tutorial.latest.aliok-com-tr-test.appspot.com/guess.jsf}}
