blob: 6c6f904a7c54f8d9c2c3b315deb570daab4ebbe8 [file] [log] [blame]
------
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}}