[richfaces-svn-commits] JBoss Rich Faces SVN: r18853 - in trunk/examples/richfaces-showcase: src/main and 19 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Fri Aug 20 11:54:53 EDT 2010


Author: ilya_shaikovsky
Date: 2010-08-20 11:54:52 -0400 (Fri, 20 Aug 2010)
New Revision: 18853

Added:
   trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/
   trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/
   trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/
   trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/faces/
   trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/faces/config/
   trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/faces/config/WebConfiguration.java
   trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/mediaOutput/Color.java
   trunk/examples/richfaces-showcase/src/main/resources/META-INF/jdoconfig.xml
   trunk/examples/richfaces-showcase/src/main/resources/META-INF/persistence.xml
   trunk/examples/richfaces-showcase/src/main/resources/ant-macros.xml
   trunk/examples/richfaces-showcase/src/main/resources/log4j.properties
   trunk/examples/richfaces-showcase/src/main/resources/logging.properties
   trunk/examples/richfaces-showcase/src/main/webapp-gae/
   trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/
   trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/appengine-web.xml
   trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/web.xml
   trunk/examples/richfaces-showcase/src/main/webapp/WEB-INF/appengine-web.xml
   trunk/examples/richfaces-showcase/src/main/webapp/richfaces/mediaOutput/image/
   trunk/examples/richfaces-showcase/src/main/webapp/richfaces/mediaOutput/image/source.png
Removed:
   trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/
   trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/
   trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/faces/
   trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/faces/config/
   trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/faces/config/WebConfiguration.java
   trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/
   trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/appengine-web.xml
   trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/web.xml
   trunk/examples/richfaces-showcase/src/main/webapp/richfaces/mediaOutput/image/source.png
Modified:
   trunk/examples/richfaces-showcase/pom.xml
   trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/mediaOutput/MediaBean.java
   trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/mediaOutput/MediaData.java
   trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/push/Choice.java
   trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/push/ChoicesBean.java
   trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/tables/ExtTableSelectionBean.java
   trunk/examples/richfaces-showcase/src/main/resources/org/richfaces/demo/data/common/navigation.xml
   trunk/examples/richfaces-showcase/src/main/webapp/WEB-INF/web.xml
   trunk/examples/richfaces-showcase/src/main/webapp/richfaces/mediaOutput/imgUsage.xhtml
   trunk/examples/richfaces-showcase/src/main/webapp/richfaces/mediaOutput/samples/imgUsage-sample.xhtml
   trunk/examples/richfaces-showcase/src/main/webapp/richfaces/push/samples/push-sample.xhtml
   trunk/examples/richfaces-showcase/src/main/webapp/templates/main.xhtml
Log:
Merge from branch. GAE integration.

Modified: trunk/examples/richfaces-showcase/pom.xml
===================================================================
--- trunk/examples/richfaces-showcase/pom.xml	2010-08-20 15:10:07 UTC (rev 18852)
+++ trunk/examples/richfaces-showcase/pom.xml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -1,295 +1,428 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
-	<modelVersion>4.0.0</modelVersion>
+    <modelVersion>4.0.0</modelVersion>
 
-	<parent>
-		<groupId>org.richfaces</groupId>
-		<artifactId>richfaces-parent</artifactId>
-		<version>10-SNAPSHOT</version>
-	</parent>
+    <parent>
+        <groupId>org.richfaces</groupId>
+        <artifactId>richfaces-parent</artifactId>
+        <version>10-SNAPSHOT</version>
+    </parent>
 
-	<groupId>org.richfaces.examples</groupId>
-	<artifactId>richfaces-showcase</artifactId>
-	<version>4.0.0-SNAPSHOT</version>
-	<packaging>war</packaging>
-	<name>Richfaces Examples: Richfaces Showcase Application</name>
+    <groupId>org.richfaces.examples</groupId>
+    <artifactId>richfaces-showcase</artifactId>
+    <version>4.0.0-SNAPSHOT</version>
+    <packaging>war</packaging>
+    <name>Richfaces Examples: Richfaces Showcase Application</name>
 
-	<properties>
-		<!-- FIXME these should be through the richfaces-parent -->
-		<snapshotRepository>dav:https://repository.jboss.org/nexus/content/repositories/snapshots/</snapshotRepository>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    <properties>
+        <!-- FIXME these should be through the richfaces-parent -->
+        <snapshotRepository>dav:https://repository.jboss.org/nexus/content/repositories/snapshots/</snapshotRepository>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 
-		<jetty.port>8080</jetty.port>
-		<richfaces.checkstyle.version>1</richfaces.checkstyle.version>
-		<org.richfaces.bom.version>4.0.0-SNAPSHOT</org.richfaces.bom.version>
-	</properties>
+        <jetty.port>8080</jetty.port>
+        <richfaces.checkstyle.version>1</richfaces.checkstyle.version>
+        <org.richfaces.bom.version>4.0.0-SNAPSHOT</org.richfaces.bom.version>
+    </properties>
 
-	<dependencyManagement>
-		<dependencies>
-			<dependency>
-				<groupId>org.richfaces</groupId>
-				<artifactId>richfaces-bom</artifactId>
-				<version>${org.richfaces.bom.version}</version>
-				<scope>import</scope>
-				<type>pom</type>
-			</dependency>
-		</dependencies>
-	</dependencyManagement>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.richfaces</groupId>
+                <artifactId>richfaces-bom</artifactId>
+                <version>${org.richfaces.bom.version}</version>
+                <scope>import</scope>
+                <type>pom</type>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
 
-	<dependencies>
-		<dependency>
-			<groupId>org.richfaces.ui</groupId>
-			<artifactId>richfaces-components-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.richfaces.ui</groupId>
-			<artifactId>richfaces-components-ui</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.sun.faces</groupId>
-			<artifactId>jsf-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.sun.faces</groupId>
-			<artifactId>jsf-impl</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>servlet-api</artifactId>
-			<scope>provided</scope>
-		</dependency>
-		<dependency>
-			<groupId>javax.servlet.jsp</groupId>
-			<artifactId>jsp-api</artifactId>
-			<scope>provided</scope>
-		</dependency>
-		<dependency>
-			<groupId>javax.el</groupId>
-			<artifactId>el-api</artifactId>
-			<scope>provided</scope>
-		</dependency>
-		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>jstl</artifactId>
-		</dependency>
+    <dependencies>
+        <dependency>
+            <groupId>org.richfaces.ui</groupId>
+            <artifactId>richfaces-components-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.richfaces.ui</groupId>
+            <artifactId>richfaces-components-ui</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.faces</groupId>
+            <artifactId>jsf-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.faces</groupId>
+            <artifactId>jsf-impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet.jsp</groupId>
+            <artifactId>jsp-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.el</groupId>
+            <artifactId>el-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>jstl</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>net.sf.ehcache</groupId>
-			<artifactId>ehcache</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>net.sf.ehcache</groupId>
+            <artifactId>ehcache</artifactId>
+        </dependency>
 
-		<!--
-			simple logger binding: only messages of level INFO and higher are
-			printed
-		-->
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-log4j12</artifactId>
-			<version>1.5.8</version>
-		</dependency>
+        <!-- simple logger binding: only messages of level INFO and higher 
+            are printed -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>1.5.8</version>
+        </dependency>
 
-		<!-- Log4J dependency used in examples -->
-		<dependency>
-			<groupId>log4j</groupId>
-			<artifactId>log4j</artifactId>
-			<version>1.2.14</version>
-		</dependency>
-	</dependencies>
+        <!-- Log4J dependency used in examples -->
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>1.2.14</version>
+        </dependency>
+    </dependencies>
 
-	<build>
-		<finalName>richfaces-showcase</finalName>
+    <build>
+        <finalName>richfaces-showcase</finalName>
 
-		<plugins>
-			<plugin>
-				<artifactId>maven-checkstyle-plugin</artifactId>
-			</plugin>
-			<plugin>
-				<artifactId>maven-compiler-plugin</artifactId>
-			</plugin>
-			<plugin>
-				<groupId>org.mortbay.jetty</groupId>
-				<artifactId>maven-jetty-plugin</artifactId>
-				<version>6.1.18</version>
-				<configuration>
-					<scanIntervalSeconds>10</scanIntervalSeconds>
-					<connectors>
-						<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
-							<port>${jetty.port}</port>
-							<maxIdleTime>60000</maxIdleTime>
-						</connector>
-					</connectors>
-					<webResources>
-						<resource>
-							<directory>${basedir}/src/main/java</directory>
-							<targetPath>/WEB-INF/src</targetPath>
-						</resource>
-					</webResources>
-				</configuration>
-			</plugin>
-			<plugin>
-				<artifactId>maven-war-plugin</artifactId>
-				<configuration>
-					<webResources>
-						<resource>
-							<directory>${basedir}/src/main/java</directory>
-							<targetPath>/WEB-INF/src</targetPath>
-						</resource>
-					</webResources>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-checkstyle-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>maven-jetty-plugin</artifactId>
+                <version>6.1.18</version>
+                <configuration>
+                    <scanIntervalSeconds>10</scanIntervalSeconds>
+                    <connectors>
+                        <connector
+                            implementation="org.mortbay.jetty.nio.SelectChannelConnector">
+                            <port>${jetty.port}</port>
+                            <maxIdleTime>60000</maxIdleTime>
+                        </connector>
+                    </connectors>
+                    <webResources>
+                        <resource>
+                            <directory>${basedir}/src/main/java</directory>
+                            <targetPath>/WEB-INF/src</targetPath>
+                        </resource>
+                    </webResources>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-war-plugin</artifactId>
+                <configuration>
+                    <webResources>
+                        <resource>
+                            <directory>${basedir}/src/main/java</directory>
+                            <targetPath>/WEB-INF/src</targetPath>
+                        </resource>
+                    </webResources>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 
-	<profiles>
-		<profile>
-			<id>jdk5</id>
-			<activation>
-				<jdk>1.5</jdk>
-			</activation>
-			<dependencies>
-				<dependency>
-					<groupId>javax.xml.bind</groupId>
-					<artifactId>jaxb-api</artifactId>
-					<version>2.2</version>
-				</dependency>
-			</dependencies>
-		</profile>
-		<profile>
-			<id>release</id>
-			<build>
-				<plugins>
-					<plugin>
-						<artifactId>maven-war-plugin</artifactId>
-						<executions>
-							<execution>
-								<id>jee6</id>
-								<phase>package</phase>
-								<goals>
-									<goal>war</goal>
-								</goals>
-								<configuration>
-									<webappDirectory>${project.build.directory}/${project.build.finalName}-jee6</webappDirectory>
-									<classifier>jee6</classifier>
-									<packagingExcludes>WEB-INF/lib/jsf-api*,WEB-INF/lib/jsf-impl*,WEB-INF/lib/jta-*,WEB-INF/lib/jstl-*</packagingExcludes>
-									<warSourceExcludes>WEB-INF/lib/jsf-api*,WEB-INF/lib/jsf-impl*,WEB-INF/lib/jta-*,WEB-INF/lib/jstl-*</warSourceExcludes>
-									<webResources>
-										<resource>
-											<directory>${basedir}/src/main/java</directory>
-											<targetPath>/WEB-INF/src</targetPath>
-										</resource>
-									</webResources>
-								</configuration>
-							</execution>
-						</executions>
-						<configuration>
-							<classifier>tomcat6</classifier>
-							<webResources>
-								<resource>
-									<directory>${basedir}/src/main/java</directory>
-									<targetPath>/WEB-INF/src</targetPath>
-								</resource>
-							</webResources>
-						</configuration>
-					</plugin>
+    <profiles>
+        <profile>
+            <id>gae</id>
+            <dependencies>
+                <dependency>
+                    <groupId>net.sf.ehcache</groupId>
+                    <artifactId>ehcache</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+                <dependency>
+                    <groupId>javax.el</groupId>
+                    <artifactId>el-api</artifactId>
+                    <scope>runtime</scope>
+                </dependency>
+                <dependency>
+                    <groupId>el-impl</groupId>
+                    <artifactId>el-impl</artifactId>
+                    <scope>runtime</scope>
+                    <version>1.0</version>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.geronimo.specs</groupId>
+                    <artifactId>geronimo-jta_1.1_spec</artifactId>
+                    <version>1.1.1</version>
+                    <scope>runtime</scope>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.geronimo.specs</groupId>
+                    <artifactId>geronimo-jpa_3.0_spec</artifactId>
+                    <version>1.1.1</version>
+                    <scope>runtime</scope>
+                </dependency>
+                <dependency>
+                    <groupId>xalan</groupId>
+                    <artifactId>xalan</artifactId>
+                    <version>2.7.1</version>
+                    <scope>runtime</scope>
+                </dependency>
+                <dependency>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                    <version>2.9.1</version>
+                    <scope>runtime</scope>
+                </dependency>
+            </dependencies>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>build-helper-maven-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>add-source</id>
+                                <phase>generate-sources</phase>
+                                <goals>
+                                    <goal>add-source</goal>
+                                </goals>
+                                <configuration>
+                                    <sources>
+                                        <source>src/main/java-gae-jsf-ri</source>
+                                    </sources>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <artifactId>maven-war-plugin</artifactId>
+                        <configuration>
+                            <webResources>
+                                <resource>
+                                    <directory>src/main/webapp-gae</directory>
+                                </resource>
+                                <resource>
+                                    <directory>src/main/webapp</directory>
+                                </resource>
+                                <resource>
+                                    <directory>${project.build.directory}/generated-resources</directory>
+                                    <targetPath>static-resources</targetPath>
+                                </resource>
+                                <resource>
+                                    <directory>${basedir}/src/main/java</directory>
+                                    <targetPath>/WEB-INF/src</targetPath>
+                                </resource>
+                            </webResources>
+                        </configuration>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.richfaces.cdk</groupId>
+                        <artifactId>maven-resources-plugin</artifactId>
+                        <version>4.0.0-SNAPSHOT</version>
+                        <configuration>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <id>process</id>
+                                <goals>
+                                    <goal>process</goal>
+                                </goals>
+                                <configuration>
+                                    <outputDir>generated-resources</outputDir>
+                                    <skins>
+                                        <skin>blueSky</skin>
+                                        <skin>classic</skin>
+                                        <skin>deepMarine</skin>
+                                        <skin>emeraldTown</skin>
+                                        <skin>japanCherry</skin>
+                                        <skin>ruby</skin>
+                                        <skin>wine</skin>
+                                    </skins>
+                                    <includedContentTypes>
+                                        <include>application/javascript</include>
+                                        <include>text/css</include>
+                                        <include>image/.+</include>
+                                    </includedContentTypes>
+                                    <fileNameMappings>
+                                        <property>
+                                            <name>^\Qorg.richfaces.renderkit.html\E</name>
+                                            <value>org.richfaces/images</value>
+                                        </property>
+                                        <property>
+                                            <name>^\Qorg.richfaces.renderkit.html.images\E</name>
+                                            <value>org.richfaces/images</value>
+                                        </property>
+                                        <property>
+                                            <name>^css/</name>
+                                            <value>org.richfaces/css/</value>
+                                        </property>
+                                    </fileNameMappings>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>jdk5</id>
+            <activation>
+                <jdk>1.5</jdk>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>javax.xml.bind</groupId>
+                    <artifactId>jaxb-api</artifactId>
+                    <version>2.2</version>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>release</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-war-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>jee6</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>war</goal>
+                                </goals>
+                                <configuration>
+                                    <webappDirectory>${project.build.directory}/${project.build.finalName}-jee6</webappDirectory>
+                                    <classifier>jee6</classifier>
+                                    <packagingExcludes>WEB-INF/lib/jsf-api*,WEB-INF/lib/jsf-impl*,WEB-INF/lib/jta-*,WEB-INF/lib/jstl-*</packagingExcludes>
+                                    <warSourceExcludes>WEB-INF/lib/jsf-api*,WEB-INF/lib/jsf-impl*,WEB-INF/lib/jta-*,WEB-INF/lib/jstl-*</warSourceExcludes>
+                                    <webResources>
+                                        <resource>
+                                            <directory>${basedir}/src/main/java</directory>
+                                            <targetPath>/WEB-INF/src</targetPath>
+                                        </resource>
+                                    </webResources>
+                                </configuration>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <classifier>tomcat6</classifier>
+                            <webResources>
+                                <resource>
+                                    <directory>${basedir}/src/main/java</directory>
+                                    <targetPath>/WEB-INF/src</targetPath>
+                                </resource>
+                            </webResources>
+                        </configuration>
+                    </plugin>
 
-					<plugin>
-						<artifactId>maven-assembly-plugin</artifactId>
-						<executions>
-							<execution>
-								<id>group-sources</id>
-								<goals>
-									<goal>single</goal>
-								</goals>
-								<phase>package</phase>
-								<configuration>
-									<finalName>sources</finalName>
-									<descriptor>assembler.xml</descriptor>
-								</configuration>
-							</execution>
-						</executions>
-					</plugin>
-					<plugin>
-						<artifactId>maven-jar-plugin</artifactId>
-						<executions>
-							<execution>
-								<goals>
-									<goal>jar</goal>
-								</goals>
-								<phase>package</phase>
-								<configuration>
-									<classesDirectory>${basedir}/target/sources/sources</classesDirectory>
-									<classifier>sources</classifier>
-								</configuration>
-							</execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-		<profile>
-			<id>jee6</id>
-			<build>
-				<plugins>
-					<plugin>
-						<artifactId>maven-war-plugin</artifactId>
-						<configuration>
-							<webappDirectory>${project.build.directory}/${project.build.finalName}-jee6</webappDirectory>
-							<webResources>
-								<resource>
-									<directory>${basedir}/src/main/java</directory>
-									<targetPath>/WEB-INF/src</targetPath>
-								</resource>
-							</webResources>
-						</configuration>
-					</plugin>
-				</plugins>
-			</build>
+                    <plugin>
+                        <artifactId>maven-assembly-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>group-sources</id>
+                                <goals>
+                                    <goal>single</goal>
+                                </goals>
+                                <phase>package</phase>
+                                <configuration>
+                                    <finalName>sources</finalName>
+                                    <descriptor>assembler.xml</descriptor>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <artifactId>maven-jar-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>jar</goal>
+                                </goals>
+                                <phase>package</phase>
+                                <configuration>
+                                    <classesDirectory>${basedir}/target/sources/sources</classesDirectory>
+                                    <classifier>sources</classifier>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>jee6</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-war-plugin</artifactId>
+                        <configuration>
+                            <webappDirectory>${project.build.directory}/${project.build.finalName}-jee6</webappDirectory>
+                            <webResources>
+                                <resource>
+                                    <directory>${basedir}/src/main/java</directory>
+                                    <targetPath>/WEB-INF/src</targetPath>
+                                </resource>
+                            </webResources>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
 
-			<dependencies>
-				<dependency>
-					<groupId>com.sun.faces</groupId>
-					<artifactId>jsf-api</artifactId>
-					<scope>provided</scope>
-				</dependency>
-				<dependency>
-					<groupId>com.sun.faces</groupId>
-					<artifactId>jsf-impl</artifactId>
-					<scope>provided</scope>
-				</dependency>
-				<dependency>
-					<groupId>javax.transaction</groupId>
-					<artifactId>jta</artifactId>
-					<version>1.1</version>
-					<scope>provided</scope>
-				</dependency>
-				<dependency>
-					<groupId>javax.servlet</groupId>
-					<artifactId>jstl</artifactId>
-					<scope>provided</scope>
-				</dependency>
-			</dependencies>
-		</profile>
-	</profiles>
+            <dependencies>
+                <dependency>
+                    <groupId>com.sun.faces</groupId>
+                    <artifactId>jsf-api</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+                <dependency>
+                    <groupId>com.sun.faces</groupId>
+                    <artifactId>jsf-impl</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+                <dependency>
+                    <groupId>javax.transaction</groupId>
+                    <artifactId>jta</artifactId>
+                    <version>1.1</version>
+                    <scope>provided</scope>
+                </dependency>
+                <dependency>
+                    <groupId>javax.servlet</groupId>
+                    <artifactId>jstl</artifactId>
+                    <scope>provided</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
 
-	<repositories>
-		<!-- FIXME - This should be set globally in parent -->
-		<repository>
-			<id>maven-repository2.dev.java.net</id>
-			<name>Java.net Repository for Maven 2</name>
-			<url>http://download.java.net/maven/2</url>
-			<snapshots>
-				<enabled>true</enabled>
-			</snapshots>
-		</repository>
-	</repositories>
+    <repositories>
+        <!-- FIXME - This should be set globally in parent -->
+        <repository>
+            <id>maven-repository2.dev.java.net</id>
+            <name>Java.net Repository for Maven 2</name>
+            <url>http://download.java.net/maven/2</url>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
 
-	<scm>
-		<connection>scm:svn:http://anonsvn.jboss.org/repos/richfaces/trunk/examples/richfaces-showcase</connection>
-		<developerConnection>scm:svn:https://svn.jboss.org/repos/richfaces/trunk/examples/richfaces-showcase</developerConnection>
-		<url>http://fisheye.jboss.org/browse/richfaces</url>
-	</scm>
+    <scm>
+        <connection>scm:svn:http://anonsvn.jboss.org/repos/richfaces/trunk/examples/richfaces-showcase</connection>
+        <developerConnection>scm:svn:https://svn.jboss.org/repos/richfaces/trunk/examples/richfaces-showcase</developerConnection>
+        <url>http://fisheye.jboss.org/browse/richfaces</url>
+    </scm>
 </project>

Copied: trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/mediaOutput/Color.java (from rev 18841, branches/RF-7939-showcase/src/main/java/org/richfaces/demo/mediaOutput/Color.java)
===================================================================
--- trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/mediaOutput/Color.java	                        (rev 0)
+++ trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/mediaOutput/Color.java	2010-08-20 15:54:52 UTC (rev 18853)
@@ -0,0 +1,46 @@
+package org.richfaces.demo.mediaOutput;
+
+/**
+ * @author Ilya Shaikovsky Class created to hold rgb properties of the color. Used in order to avoid AWT dependencies as
+ *         GAE not allows them
+ */
+public class Color {
+
+    private int red;
+    private int green;
+    private int blue;
+
+    public Color(int red, int green, int blue) {
+        this.red = red;
+        this.green = green;
+        this.blue = blue;
+    }
+
+    public int getRed() {
+        return red;
+    }
+
+    public void setRed(int red) {
+        this.red = red;
+    }
+
+    public int getGreen() {
+        return green;
+    }
+
+    public void setGreen(int green) {
+        this.green = green;
+    }
+
+    public int getBlue() {
+        return blue;
+    }
+
+    public void setBlue(int blue) {
+        this.blue = blue;
+    }
+    @Override
+    public String toString() {
+        return String.valueOf(getRed()) + String.valueOf(getGreen()) + String.valueOf(getBlue());
+    }
+}

Modified: trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/mediaOutput/MediaBean.java
===================================================================
--- trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/mediaOutput/MediaBean.java	2010-08-20 15:10:07 UTC (rev 18852)
+++ trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/mediaOutput/MediaBean.java	2010-08-20 15:54:52 UTC (rev 18853)
@@ -1,86 +1,477 @@
 package org.richfaces.demo.mediaOutput;
 
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Graphics2D;
-import java.awt.geom.AffineTransform;
-import java.awt.image.BufferedImage;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.FilterInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.IntBuffer;
+import java.nio.charset.Charset;
+import java.util.zip.CRC32;
+import java.util.zip.Deflater;
+import java.util.zip.DeflaterOutputStream;
+import java.util.zip.Inflater;
+import java.util.zip.InflaterInputStream;
 
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.RequestScoped;
-import javax.imageio.ImageIO;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
 
 @ManagedBean(name = "mediaBean")
 @RequestScoped
 public class MediaBean {
-    public void paint(OutputStream out, Object data) throws IOException {
-        if (data instanceof MediaData) {
-            MediaData paintData = (MediaData) data;
-            BufferedImage img = new BufferedImage(paintData.width, paintData.height, BufferedImage.TYPE_INT_RGB);
-            Graphics2D g2d = img.createGraphics();
+    private static final String RICHFACES_MEDIA_OUTPUT_IMAGE_SOURCE = "/richfaces/mediaOutput/image/source.png";
+    private static final int BUFFER_SIZE = 8192;
 
-            g2d.setColor(Color.WHITE);
-            g2d.fillRect(0, 0, 300, 120);
+    private Color[] colors;
+    private boolean isIndexed = false;
 
-            int testLenght = paintData.text.length();
-            int fontSize = testLenght < 8 ? 40 : 40 - (testLenght - 8);
+    private Charset asciiCharset = Charset.forName("US-ASCII");
 
-            if (fontSize < 12) {
-                fontSize = 12;
+    private int sectionLength;
+
+    private int imageWidth;
+
+    private byte[] lengthBytes = new byte[4];
+
+    private byte[] chunkTypeBytes = new byte[4];
+
+    private class Section {
+
+        protected void writeHeaderSectionData(OutputStream outChannel) throws IOException {
+            outChannel.write(lengthBytes);
+            outChannel.write(chunkTypeBytes);
+        }
+
+        protected void writeInt(OutputStream outChannel, int value) throws IOException {
+            byte[] bs = new byte[4];
+            ByteBuffer.wrap(bs).order(ByteOrder.BIG_ENDIAN).asIntBuffer().put(value);
+            outChannel.write(bs);
+        }
+
+        protected void writeSectionData(InputStream inChannel, OutputStream outChannel) throws IOException {
+            byte[] bs = new byte[BUFFER_SIZE];
+            int read = 0;
+            int remaining = sectionLength;
+
+            while ((read = inChannel.read(bs, 0, Math.min(remaining, bs.length))) > 0) {
+                outChannel.write(bs, 0, read);
+                remaining -= read;
             }
 
-            Font font = new Font("Serif", Font.HANGING_BASELINE, fontSize);
+            if (remaining > 0) {
+                throw new IllegalArgumentException();
+            }
 
-            g2d.setFont(font);
+            byte[] crc = new byte[4];
+            if (inChannel.read(crc) < crc.length) {
+                throw new IllegalArgumentException();
+            }
 
-            int x = 10;
-            int y = fontSize * 5 / 2;
+            outChannel.write(crc);
+        }
 
-            g2d.translate(x, y);
+        public void write(InputStream inChannel, OutputStream outChannel) throws IOException {
+            writeHeaderSectionData(outChannel);
+            writeSectionData(inChannel, outChannel);
+        }
+    };
 
-            Color color = new Color(paintData.color);
+    private class HeaderSection extends Section {
 
-            g2d.setPaint(new Color(color.getRed(), color.getGreen(), color.getBlue(), 30));
+        @Override
+        protected void writeSectionData(InputStream inChannel, OutputStream outChannel) throws IOException {
+            // // Width 4 bytes
+            // // Height 4 bytes
+            // // Bit depth 1 byte
+            // // Colour type 1 byte
+            // // Compression method 1 byte
+            // // Filter method 1 byte
+            // // Interlace method 1 byte
 
-            AffineTransform origTransform = g2d.getTransform();
+            byte[] headerBytes = new byte[sectionLength];
 
-            g2d.shear(-0.5 * paintData.scale, 0);
-            g2d.scale(1, paintData.scale);
-            g2d.drawString(paintData.text, 0, 0);
-            g2d.setTransform(origTransform);
-            g2d.setPaint(color);
-            g2d.drawString(paintData.text, 0, 0);
-            ImageIO.write(img, "jpeg", out);
+            if (inChannel.read(headerBytes) < headerBytes.length) {
+                throw new IllegalArgumentException();
+            }
+
+            if (headerBytes[8] != 8) {
+                throw new IllegalStateException("Color depth is not 8");
+            }
+
+            if (headerBytes[9] != 2 && headerBytes[9] != 3) {
+                throw new IllegalStateException("Unsupported color type");
+            }
+
+            imageWidth = ByteBuffer.wrap(headerBytes, 0, 4).order(ByteOrder.BIG_ENDIAN).asIntBuffer().get();
+
+            isIndexed = (headerBytes[9] == 3);
+
+            outChannel.write(headerBytes);
+
+            byte[] crc = new byte[4];
+            if (inChannel.read(crc) < crc.length) {
+                throw new IllegalArgumentException();
+            }
+
+            outChannel.write(crc);
         }
-    }
 
-    private void copy(InputStream in, OutputStream out) throws IOException {
-        byte[] buffer = new byte[2048];
-        int read;
+    };
 
-        while ((read = in.read(buffer)) != -1) {
-            out.write(buffer, 0, read);
+    private void transformColors(byte[] data, int offset, int length) {
+        float[] intensities = new float[3];
+
+        for (int i = offset; i < length + offset; i += 3) {
+            float weight = 0;
+            for (int j = 0; j < intensities.length; j++) {
+                intensities[j] = ((float) (data[i + j] & 0xFF)) / 255;
+                weight += intensities[j];
+            }
+
+            float r = 0;
+            float g = 0;
+            float b = 0;
+
+            for (int j = 0; j < intensities.length; j++) {
+                r += intensities[j] * colors[j].getRed();
+                g += intensities[j] * colors[j].getGreen();
+                b += intensities[j] * colors[j].getBlue();
+            }
+
+            data[i] = (byte) (r);
+            data[i + 1] = (byte) (g);
+            data[i + 2] = (byte) (b);
         }
     }
 
-    public void paintFlash(OutputStream out, Object data) throws IOException {
-        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+    private class PaletteSection extends Section {
+        @Override
+        protected void writeSectionData(InputStream inChannel, OutputStream outChannel) throws IOException {
+            if (!isIndexed) {
+                super.writeSectionData(inChannel, outChannel);
+            } else {
+                byte[] data = new byte[2000 * 3];
+                int read;
+                int remaining = sectionLength;
 
-        if (loader == null) {
-            loader = getClass().getClassLoader();
+                assert (data.length < BUFFER_SIZE);
+
+                CRC32 crc32 = new CRC32();
+                crc32.update(chunkTypeBytes);
+
+                while ((read = (inChannel.read(data, 0, Math.min(remaining, data.length)))) > 0) {
+                    remaining -= read;
+
+                    transformColors(data, 0, read);
+
+                    outChannel.write(data, 0, read);
+                    crc32.update(data, 0, read);
+                }
+
+                if (remaining > 0) {
+                    throw new IllegalArgumentException();
+                }
+
+                inChannel.skip(4);
+
+                writeInt(outChannel, (int) crc32.getValue());
+            }
         }
+    };
 
-        InputStream stream = loader.getResourceAsStream("org/richfaces/demo/mediaOutput/text.swf");
+    private class LimitedInputStream extends FilterInputStream {
 
-        if (stream != null) {
-            try {
-                copy(stream, out);
-            } finally {
-                stream.close();
+        private int remaining;
+
+        protected LimitedInputStream(InputStream inChannel) {
+            super(inChannel);
+            this.remaining = sectionLength;
+        }
+
+        @Override
+        public int available() throws IOException {
+            return Math.min(super.available(), this.remaining);
+        }
+
+        @Override
+        public int read() throws IOException {
+            if (this.remaining > 0) {
+                int read = super.read();
+                if (read != -1) {
+                    this.remaining--;
+                }
+
+                return read;
+            } else {
+                return -1;
             }
         }
+
+        @Override
+        public int read(byte[] b) throws IOException {
+            return read(b, 0, b.length);
+        }
+
+        @Override
+        public int read(byte[] b, int off, int len) throws IOException {
+            int read = super.read(b, 0, Math.min(len, this.remaining));
+            if (read > 0) {
+                this.remaining -= read;
+            }
+
+            return read;
+        }
+
+        @Override
+        public synchronized void mark(int readlimit) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public boolean markSupported() {
+            return false;
+        }
+
+        @Override
+        public synchronized void reset() throws IOException {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public long skip(long n) throws IOException {
+            long toSkip = Math.min(this.remaining, n);
+            long skipped = super.skip(toSkip);
+
+            if (skipped > 0) {
+                this.remaining -= skipped;
+            }
+
+            return skipped;
+        }
+    };
+
+    private class DataSection extends Section {
+
+        private byte paeth(byte a, byte b, byte c) {
+            int p = (a & 0xFF) + (b & 0xFF) - (c & 0xFF);
+            int pa = Math.abs(p - a);
+            int pb = Math.abs(p - b);
+            int pc = Math.abs(p - c);
+
+            int pr;
+
+            if (pa <= pb && pa <= pc) {
+                pr = a;
+            } else if (pb <= pc) {
+                pr = b;
+            } else {
+                pr = c;
+            }
+
+            return (byte) pr;
+        };
+
+        private class Filter {
+            protected int idx;
+            byte a = 0;
+            byte b = 0;
+            byte c = 0;
+
+            byte oa = 0;
+            byte ob = 0;
+            byte oc = 0;
+
+            int step = 3;
+
+            byte[] bs;
+            byte[] ps;
+
+            public void setIdx(int idx) {
+                this.idx = idx;
+
+                oa = a;
+                ob = b;
+                oc = c;
+
+                b = ps[idx];
+                if (idx > step) {
+                    a = bs[idx - step];
+                    c = ps[idx - step];
+                }
+            }
+
+            public void next() {
+                idx = idx + step;
+                setIdx(idx);
+            }
+        };
+
+        private class SubFilter extends Filter {
+            @Override
+            public void next() {
+                bs[idx] = (byte) ((bs[idx] & 0xFF) + (a & 0xFF) - (oa & 0xFF));
+                setIdx(idx + step);
+            }
+        };
+
+        private class UpFilter extends Filter {
+            @Override
+            public void next() {
+                bs[idx] = (byte) ((bs[idx] & 0xFF) + (b & 0xFF) - (ob & 0xFF));
+                setIdx(idx + step);
+            }
+        };
+
+        private class PaethFilter extends Filter {
+            @Override
+            public void next() {
+                bs[idx] = (byte) (paeth(a, b, c) - paeth(oa, ob, oc) + (bs[idx] & 0xFF));
+                setIdx(idx + step);
+            }
+        }
+
+        private void reconstruct(byte[] bs, byte[] ps) {
+            Filter[] filters = new Filter[3];
+
+            for (int i = 0; i < filters.length; i++) {
+                switch (bs[0]) {
+                    case 0:
+                        filters[i] = new Filter();
+                        break;
+                    case 1:
+                        filters[i] = new SubFilter();
+                        break;
+                    case 2:
+                        filters[i] = new UpFilter();
+                        break;
+                    case 4:
+                        filters[i] = new PaethFilter();
+                        break;
+
+                    default:
+                        throw new IllegalArgumentException(Integer.toHexString(bs[0]));
+                }
+
+                filters[i].bs = bs;
+                filters[i].ps = ps;
+                filters[i].step = 3;
+
+                filters[i].setIdx(1 + i);
+            }
+
+            for (int i = 1; i < (bs.length - 1) / 3; i++) {
+                for (Filter filter : filters) {
+                    filter.next();
+                }
+            }
+
+            bs[0] = 0;
+        }
+
+        @Override
+        public void write(InputStream inChannel, OutputStream outChannel) throws IOException {
+            if (isIndexed) {
+                super.write(inChannel, outChannel);
+            } else {
+                byte[] ps = new byte[imageWidth * 3 + 1];
+                byte[] bs = new byte[imageWidth * 3 + 1];
+
+                assert (bs.length < BUFFER_SIZE);
+
+                int read = 0;
+
+                InputStream inflaterInputStream = new BufferedInputStream(new InflaterInputStream(
+                    new LimitedInputStream(inChannel), new Inflater(), 2048), BUFFER_SIZE);
+                ByteArrayOutputStream baos = new ByteArrayOutputStream(sectionLength);
+                DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(baos, new Deflater(), 2048);
+
+                while ((read = (inflaterInputStream.read(bs))) > 0) {
+                    reconstruct(bs, ps);
+                    transformColors(bs, 1, read - 1);
+
+                    deflaterOutputStream.write(bs, 0, read);
+
+                    byte[] swapVar = bs;
+                    bs = ps;
+                    ps = swapVar;
+                }
+
+                deflaterOutputStream.finish();
+
+                byte[] compressedSectionBytes = baos.toByteArray();
+                writeInt(outChannel, compressedSectionBytes.length);
+
+                CRC32 crc32 = new CRC32();
+                outChannel.write(chunkTypeBytes);
+                crc32.update(chunkTypeBytes);
+
+                if (inChannel.skip(4) < 4) {
+                    throw new IllegalArgumentException();
+                }
+
+                outChannel.write(compressedSectionBytes);
+
+                writeInt(outChannel, (int) crc32.getValue());
+            }
+        }
+
+    };
+
+    private Section readNextSection(InputStream inChannel) throws IOException {
+        int read = inChannel.read(lengthBytes);
+        if (read != -1) {
+            if (read < lengthBytes.length) {
+                throw new IllegalArgumentException();
+            }
+
+            if (inChannel.read(chunkTypeBytes) < chunkTypeBytes.length) {
+                throw new IllegalArgumentException();
+            }
+
+            IntBuffer lengthBuffer = ByteBuffer.wrap(lengthBytes).order(ByteOrder.BIG_ENDIAN).asIntBuffer();
+            sectionLength = lengthBuffer.get(0);
+            String chunkTypeString = new String(chunkTypeBytes, asciiCharset);
+
+            if ("IHDR".equals(chunkTypeString)) {
+                return new HeaderSection();
+            } else if ("PLTE".equals(chunkTypeString)) {
+                return new PaletteSection();
+            } else if ("IDAT".equals(chunkTypeString)) {
+                return new DataSection();
+            } else {
+                return new Section();
+            }
+        } else {
+            return null;
+        }
     }
+
+    public void process(OutputStream outStream, Object data) throws Exception {
+        colors = ((MediaData) data).getNewColors();
+
+        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
+        BufferedInputStream inStream = new BufferedInputStream(extContext
+            .getResourceAsStream(RICHFACES_MEDIA_OUTPUT_IMAGE_SOURCE), BUFFER_SIZE);
+        try {
+            // skip 8-bytes of header
+            byte[] bs = new byte[8];
+            if (inStream.read(bs) < bs.length) {
+                throw new IllegalArgumentException();
+            }
+            outStream.write(bs);
+
+            Section section = null;
+            while ((section = readNextSection(inStream)) != null) {
+                section.write(inStream, outStream);
+            }
+        } finally {
+            inStream.close();
+            outStream.close();
+        }
+    }
 }

Modified: trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/mediaOutput/MediaData.java
===================================================================
--- trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/mediaOutput/MediaData.java	2010-08-20 15:10:07 UTC (rev 18852)
+++ trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/mediaOutput/MediaData.java	2010-08-20 15:54:52 UTC (rev 18853)
@@ -3,65 +3,44 @@
 import java.io.Serializable;
 
 import javax.faces.bean.ManagedBean;
-import javax.faces.bean.RequestScoped;
+import javax.faces.bean.ViewScoped;
 
- at ManagedBean(name = "mediaData")
- at RequestScoped
+ at ManagedBean
+ at ViewScoped
 public class MediaData implements Serializable {
-
-    /**
-     *
-     */
+    private static final Color[] COLORS = { new Color(255, 0, 0), new Color(0, 0, 255), new Color(0, 255, 0),
+        new Color(255, 255, 0), new Color(0, 255, 255) };
     private static final long serialVersionUID = 1L;
-    int height = 120;
-    int width = 300;
-    Integer color;
-    float scale;
-    String text;
+    private int colorIndex1 = 0;
+    private int colorIndex2 = 1;
+    private int colorIndex3 = 2;
 
-    public MediaData() {
-        setText("RichFaces 4.0");
-        setColor(1000);
-        setScale(2);
+    public Color[] getNewColors() {
+        return new Color[] { COLORS[colorIndex1], COLORS[colorIndex2], COLORS[colorIndex3], };
     }
 
-    public Integer getColor() {
-        return color;
+    public int getColorIndex1() {
+        return colorIndex1;
     }
 
-    public void setColor(Integer color) {
-        this.color = color;
+    public void setColorIndex1(int colorIndex1) {
+        this.colorIndex1 = colorIndex1;
     }
 
-    public float getScale() {
-        return scale;
+    public int getColorIndex2() {
+        return colorIndex2;
     }
 
-    public void setScale(float scale) {
-        this.scale = scale;
+    public void setColorIndex2(int colorIndex2) {
+        this.colorIndex2 = colorIndex2;
     }
 
-    public String getText() {
-        return text;
+    public int getColorIndex3() {
+        return colorIndex3;
     }
 
-    public void setText(String text) {
-        this.text = text;
+    public void setColorIndex3(int colorIndex3) {
+        this.colorIndex3 = colorIndex3;
     }
 
-    public int getWidth() {
-        return width;
-    }
-
-    public void setWidth(int width) {
-        this.width = width;
-    }
-
-    public int getHeight() {
-        return height;
-    }
-
-    public void setHeight(int height) {
-        this.height = height;
-    }
-}
+}
\ No newline at end of file

Modified: trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/push/Choice.java
===================================================================
--- trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/push/Choice.java	2010-08-20 15:10:07 UTC (rev 18852)
+++ trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/push/Choice.java	2010-08-20 15:54:52 UTC (rev 18853)
@@ -1,6 +1,8 @@
 package org.richfaces.demo.push;
 
-public class Choice {
+import java.io.Serializable;
+
+public class Choice implements Serializable{
     private String label;
     private int votesCount;
 

Modified: trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/push/ChoicesBean.java
===================================================================
--- trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/push/ChoicesBean.java	2010-08-20 15:10:07 UTC (rev 18852)
+++ trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/push/ChoicesBean.java	2010-08-20 15:54:52 UTC (rev 18853)
@@ -1,27 +1,26 @@
 package org.richfaces.demo.push;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.EventListener;
 import java.util.EventObject;
 import java.util.List;
-import java.util.Random;
 
 import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
+import javax.faces.bean.ViewScoped;
 
 import org.ajax4jsf.event.PushEventListener;
+import org.richfaces.demo.common.data.RandomHelper;
 
 @ManagedBean(name = "choicesBean")
- at SessionScoped
-public class ChoicesBean implements Runnable {
+ at ViewScoped
+public class ChoicesBean implements Serializable{
     PushEventListener listener;
-    
-    private boolean enabled = false;
+
+    private boolean enabled = true;
     private List<Choice> choices;
     private List<Choice> lastVotes;
-    private Date startDate;
-    private Thread thread;
     private String updateInfo;
 
     public ChoicesBean() {
@@ -39,6 +38,13 @@
         lastVotes.add(new Choice("Apple"));
     }
 
+    public void initiateEvent() {
+        for (Choice choice : lastVotes) {
+            choice.setVotesCount(RandomHelper.rand(0, 3));
+        }
+        listener.onEvent(new EventObject(this));
+    }
+
     public List<Choice> getChoices() {
         return choices;
     }
@@ -58,56 +64,13 @@
     }
 
     public synchronized void start() {
-        if (thread == null) {
-            setStartDate(new Date());
-            setEnabled(true);
-            thread = new Thread(this);
-            thread.setDaemon(true);
-            thread.start();
-        }
+        setEnabled(true);
     }
 
     public synchronized void stop() {
-        if (thread != null) {
-            setStartDate(null);
-            setEnabled(false);
-            thread = null;
-        }
+        setEnabled(false);
     }
 
-    public static int rand(int lo, int hi) {
-        Random rn2 = new Random();
-        int n = hi - lo + 1;
-        int i = rn2.nextInt() % n;
-
-        if (i < 0) {
-            i = -i;
-        }
-
-        return lo + i;
-    }
-
-    public void run() {
-        while (thread != null) {
-            try {
-                if (((new Date()).getTime() - startDate.getTime()) >= 60000) {
-                    stop();
-                }
-
-                // changing votes count
-                for (Choice choice : lastVotes) {
-                    choice.setVotesCount(rand(0, 3));
-                }
-
-                // System.out.println("New Event!");
-                listener.onEvent(new EventObject(this));
-                Thread.sleep(5000);
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
     public void processUpdates() {
         for (Choice choice : lastVotes) {
             if (choice.getVotesCount() > 0) {
@@ -116,26 +79,14 @@
                 choices.get(index).increment(choice.getVotesCount());
             }
         }
-
         updateInfo = "[ ";
-
         for (Choice choice : lastVotes) {
             updateInfo += choice.getVotesCount() + " ";
         }
-
         updateInfo += "] ";
-
-        // System.out.println("ChoicesBean.processUpdates()");
     }
 
-    public Thread getThread() {
-        return thread;
-    }
-
     public boolean isEnabled() {
-
-        // System.out.println("ChoicesBean.isEnabled()");
-        // System.out.println(enabled);
         return enabled;
     }
 
@@ -143,14 +94,6 @@
         this.enabled = enabled;
     }
 
-    public Date getStartDate() {
-        return startDate;
-    }
-
-    public void setStartDate(Date startDate) {
-        this.startDate = startDate;
-    }
-
     public String getUpdateInfo() {
         return updateInfo;
     }

Modified: trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/tables/ExtTableSelectionBean.java
===================================================================
--- trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/tables/ExtTableSelectionBean.java	2010-08-20 15:10:07 UTC (rev 18852)
+++ trunk/examples/richfaces-showcase/src/main/java/org/richfaces/demo/tables/ExtTableSelectionBean.java	2010-08-20 15:54:52 UTC (rev 18853)
@@ -1,5 +1,6 @@
 package org.richfaces.demo.tables;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -14,7 +15,7 @@
 
 @ManagedBean
 @SessionScoped
-public class ExtTableSelectionBean {
+public class ExtTableSelectionBean implements Serializable{
     private Collection<Object> selection;
     @ManagedProperty(value = "#{carsBean.allInventoryItems}")
     private List<InventoryItem> inventoryItems;

Copied: trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri (from rev 18841, branches/RF-7939-showcase/src/main/java-gae-jsf-ri)

Copied: trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com (from rev 18841, branches/RF-7939-showcase/src/main/java-gae-jsf-ri/com)

Copied: trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun (from rev 18841, branches/RF-7939-showcase/src/main/java-gae-jsf-ri/com/sun)

Copied: trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/faces (from rev 18841, branches/RF-7939-showcase/src/main/java-gae-jsf-ri/com/sun/faces)

Copied: trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/faces/config (from rev 18841, branches/RF-7939-showcase/src/main/java-gae-jsf-ri/com/sun/faces/config)

Deleted: trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/faces/config/WebConfiguration.java
===================================================================
--- branches/RF-7939-showcase/src/main/java-gae-jsf-ri/com/sun/faces/config/WebConfiguration.java	2010-08-20 10:41:27 UTC (rev 18841)
+++ trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/faces/config/WebConfiguration.java	2010-08-20 15:54:52 UTC (rev 18853)
@@ -1,1109 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License. You can obtain
- * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
- * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
- * Sun designates this particular file as subject to the "Classpath" exception
- * as provided by Sun in the GPL Version 2 section of the License file that
- * accompanied this code.  If applicable, add the following below the License
- * Header, with the fields enclosed by brackets [] replaced by your own
- * identifying information: "Portions Copyrighted [year]
- * [name of copyright owner]"
- *
- * Contributor(s):
- *
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package com.sun.faces.config;
-
-import java.util.ArrayList;
-import java.util.EnumMap;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Pattern;
-
-import javax.faces.application.ResourceHandler;
-import javax.faces.application.StateManager;
-import javax.faces.application.ViewHandler;
-import javax.faces.component.UIInput;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.BeanValidator;
-import javax.faces.view.facelets.ResourceResolver;
-import javax.servlet.ServletContext;
-
-import com.sun.faces.util.FacesLogger;
-import com.sun.faces.util.Util;
-
-/** Class Documentation */
-public class WebConfiguration
-{
-
-	// Log instance for this class
-	private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
-
-	// A Simple regular expression of allowable boolean values
-	private static final Pattern ALLOWABLE_BOOLEANS = Pattern
-			.compile("true|false");
-
-	// Key under which we store our WebConfiguration instance.
-	private static final String WEB_CONFIG_KEY = "com.sun.faces.config.WebConfiguration";
-
-	// Logging level. Defaults to FINE
-	private Level loggingLevel = Level.FINE;
-
-	private Map<BooleanWebContextInitParameter, Boolean> booleanContextParameters = new EnumMap<BooleanWebContextInitParameter, Boolean>(
-			BooleanWebContextInitParameter.class);
-
-	private Map<WebContextInitParameter, String> contextParameters = new EnumMap<WebContextInitParameter, String>(
-			WebContextInitParameter.class);
-
-	private Map<WebEnvironmentEntry, String> envEntries = new EnumMap<WebEnvironmentEntry, String>(
-			WebEnvironmentEntry.class);
-
-	private Map<WebContextInitParameter, String[]> cachedListParams;
-
-	private List<String> setParams = new ArrayList<String>();
-
-	private ServletContext servletContext;
-
-	// ------------------------------------------------------------ Constructors
-
-	private WebConfiguration(ServletContext servletContext)
-	{
-
-		this.servletContext = servletContext;
-
-		String contextName = getServletContextName();
-
-		initSetList(servletContext);
-		processBooleanParameters(servletContext, contextName);
-		processInitParameters(servletContext, contextName);
-		if (canProcessJndiEntries())
-		{
-			processJndiEntries(contextName);
-		}
-
-		// build the cache of list type params
-		cachedListParams = new HashMap<WebContextInitParameter, String[]>(3);
-		getOptionValue(WebContextInitParameter.ResourceExcludes, " ");
-		getOptionValue(WebContextInitParameter.DefaultSuffix, " ");
-		getOptionValue(WebContextInitParameter.FaceletsViewMappings, ";");
-
-	}
-
-	// ---------------------------------------------------------- Public Methods
-
-	/**
-	 * Return the WebConfiguration instance for this application passing the
-	 * result of FacesContext.getCurrentInstance().getExternalContext() to
-	 * {@link #getInstance(javax.faces.context.ExternalContext)}.
-	 * 
-	 * @return the WebConfiguration for this application or <code>null</code> if
-	 *         no FacesContext is available.
-	 */
-	public static WebConfiguration getInstance()
-	{
-
-		FacesContext facesContext = FacesContext.getCurrentInstance();
-		return getInstance(facesContext.getExternalContext());
-
-	}
-
-	/**
-	 * Return the WebConfiguration instance for this application.
-	 * 
-	 * @param extContext
-	 *            the ExternalContext for this request
-	 * @return the WebConfiguration for this application
-	 */
-	public static WebConfiguration getInstance(ExternalContext extContext)
-	{
-
-		WebConfiguration config = (WebConfiguration) extContext
-				.getApplicationMap().get(WEB_CONFIG_KEY);
-		if (config == null)
-		{
-			return getInstance((ServletContext) extContext.getContext());
-		}
-		else
-		{
-			return config;
-		}
-
-	}
-
-	/**
-	 * Return the WebConfiguration instance for this application.
-	 * 
-	 * @param servletContext
-	 *            the ServletContext
-	 * @return the WebConfiguration for this application or <code>null</code> if
-	 *         no WebConfiguration could be located
-	 */
-	public static WebConfiguration getInstance(ServletContext servletContext)
-	{
-
-		WebConfiguration webConfig = (WebConfiguration) servletContext
-				.getAttribute(WEB_CONFIG_KEY);
-
-		if (webConfig == null)
-		{
-			webConfig = new WebConfiguration(servletContext);
-			servletContext.setAttribute(WEB_CONFIG_KEY, webConfig);
-		}
-		return webConfig;
-
-	}
-
-	/**
-	 * @return The <code>ServletContext</code> originally used to construct this
-	 *         WebConfiguration instance
-	 */
-	public ServletContext getServletContext()
-	{
-
-		return servletContext;
-
-	}
-
-	/**
-	 * Obtain the value of the specified boolean parameter
-	 * 
-	 * @param param
-	 *            the parameter of interest
-	 * @return the value of the specified boolean parameter
-	 */
-	public boolean isOptionEnabled(BooleanWebContextInitParameter param)
-	{
-
-		if (booleanContextParameters.get(param) != null)
-		{
-			return booleanContextParameters.get(param);
-		}
-		else
-		{
-			return param.getDefaultValue();
-		}
-
-	}
-
-	/**
-	 * Obtain the value of the specified parameter
-	 * 
-	 * @param param
-	 *            the parameter of interest
-	 * @return the value of the specified parameter
-	 */
-	public String getOptionValue(WebContextInitParameter param)
-	{
-		String result = contextParameters.get(param);
-
-		if (null == result)
-		{
-			WebContextInitParameter alternate = param.getAlternate();
-			if (null != alternate)
-			{
-				result = contextParameters.get(alternate);
-			}
-		}
-
-		return result;
-
-	}
-
-	public String[] getOptionValue(WebContextInitParameter param, String sep)
-	{
-		String[] result;
-
-		assert (null != cachedListParams);
-		if (null == (result = cachedListParams.get(param)))
-		{
-			String value = getOptionValue(param);
-			if (null == value)
-			{
-				result = new String[0];
-			}
-			else
-			{
-				result = Util.split(value, sep);
-			}
-			cachedListParams.put(param, result);
-		}
-
-		return result;
-	}
-
-	/**
-	 * Obtain the value of the specified env-entry
-	 * 
-	 * @param entry
-	 *            the env-entry of interest
-	 * @return the value of the specified env-entry
-	 */
-	public String getEnvironmentEntry(WebEnvironmentEntry entry)
-	{
-
-		return envEntries.get(entry);
-
-	}
-
-	/**
-	 * @param param
-	 *            the init parameter of interest
-	 * @return <code>true</code> if the parameter was explicitly set, otherwise,
-	 *         <code>false</code>
-	 */
-	public boolean isSet(WebContextInitParameter param)
-	{
-
-		return isSet(param.getQualifiedName());
-
-	}
-
-	/**
-	 * @param param
-	 *            the init parameter of interest
-	 * @return <code>true</code> if the parameter was explicitly set, otherwise,
-	 *         <code>false</code>
-	 */
-	public boolean isSet(BooleanWebContextInitParameter param)
-	{
-
-		return isSet(param.getQualifiedName());
-
-	}
-
-	/**
-	 * @return the name of this application
-	 */
-	public String getServletContextName()
-	{
-
-		if (servletContext.getMajorVersion() == 2
-				&& servletContext.getMinorVersion() <= 4)
-		{
-			return servletContext.getServletContextName();
-		}
-		else
-		{
-			return servletContext.getContextPath();
-		}
-
-	}
-
-	public void overrideContextInitParameter(
-			BooleanWebContextInitParameter param, boolean value)
-	{
-
-		if (param == null) { return; }
-		boolean oldVal = booleanContextParameters.put(param, value);
-		if (LOGGER.isLoggable(Level.FINE) && oldVal != value)
-		{
-			LOGGER
-					.log(
-							Level.FINE,
-							"Overriding init parameter {0}.  Changing from {1} to {2}.",
-							new Object[]
-							{
-									param.getQualifiedName(), oldVal, value
-							});
-		}
-
-	}
-
-	public void overrideContextInitParameter(WebContextInitParameter param,
-			String value)
-	{
-
-		if (param == null || value == null || value.length() == 0) { return; }
-		value = value.trim();
-		String oldVal = contextParameters.put(param, value);
-		cachedListParams.remove(param);
-		if (oldVal != null)
-		{
-			if (LOGGER.isLoggable(Level.FINE) && !(oldVal.equals(value)))
-			{
-				LOGGER
-						.log(
-								Level.FINE,
-								"Overriding init parameter {0}.  Changing from {1} to {2}.",
-								new Object[]
-								{
-										param.getQualifiedName(), oldVal, value
-								});
-			}
-		}
-
-	}
-
-	// ------------------------------------------------- Package Private Methods
-
-	static void clear(ServletContext servletContext)
-	{
-
-		servletContext.removeAttribute(WEB_CONFIG_KEY);
-
-	}
-
-	// --------------------------------------------------------- Private Methods
-
-	/**
-	 * <p>
-	 * Is the configured value valid against the default boolean pattern.
-	 * </p>
-	 * 
-	 * @param param
-	 *            the boolean parameter
-	 * @param value
-	 *            the configured value
-	 * @return <code>true</code> if the value is valid, otherwise
-	 *         <code>false</code>
-	 */
-	private boolean isValueValid(BooleanWebContextInitParameter param,
-			String value)
-	{
-
-		if (!ALLOWABLE_BOOLEANS.matcher(value).matches())
-		{
-			if (LOGGER.isLoggable(Level.WARNING))
-			{
-				LOGGER.log(Level.WARNING,
-						"jsf.config.webconfig.boolconfig.invalidvalue",
-						new Object[]
-						{
-								value, param.getQualifiedName(), "true|false"
-						});
-			}
-			return false;
-		}
-
-		return true;
-
-	}
-
-	/**
-	 * <p>
-	 * Process all boolean context initialization parameters.
-	 * </p>
-	 * 
-	 * @param servletContext
-	 *            the ServletContext of interest
-	 * @param contextName
-	 *            the context name
-	 */
-	private void processBooleanParameters(ServletContext servletContext,
-			String contextName)
-	{
-
-		// process boolean contxt parameters
-		for (BooleanWebContextInitParameter param : BooleanWebContextInitParameter
-				.values())
-		{
-			String strValue = servletContext.getInitParameter(param
-					.getQualifiedName());
-			boolean value;
-
-			if (strValue != null && strValue.length() > 0
-					&& param.isDeprecated())
-			{
-				BooleanWebContextInitParameter alternate = param.getAlternate();
-				if (LOGGER.isLoggable(Level.WARNING))
-				{
-					if (alternate != null)
-					{
-						LOGGER.log(Level.WARNING,
-								"jsf.config.webconfig.param.deprecated",
-								new Object[]
-								{
-										contextName, param.getQualifiedName(),
-										alternate.getQualifiedName()
-								});
-					}
-					else
-					{
-						LOGGER
-								.log(
-										Level.WARNING,
-										"jsf.config.webconfig.param.deprecated.no_replacement",
-										new Object[]
-										{
-												contextName,
-												param.getQualifiedName()
-										});
-					}
-				}
-
-				if (alternate != null)
-				{
-					if (isValueValid(param, strValue))
-					{
-						value = Boolean.valueOf(strValue);
-					}
-					else
-					{
-						value = param.getDefaultValue();
-					}
-
-					if (LOGGER.isLoggable(Level.INFO) && alternate != null)
-					{
-						LOGGER
-								.log(
-										Level.INFO,
-										((value) ? "jsf.config.webconfig.configinfo.reset.enabled"
-												: "jsf.config.webconfig.configinfo.reset.disabled"),
-										new Object[]
-										{
-												contextName,
-												alternate.getQualifiedName()
-										});
-					}
-
-					booleanContextParameters.put(alternate, value);
-				}
-				continue;
-			}
-
-			if (!param.isDeprecated())
-			{
-				if (strValue == null)
-				{
-					value = param.getDefaultValue();
-				}
-				else
-				{
-					if (isValueValid(param, strValue))
-					{
-						value = Boolean.valueOf(strValue);
-					}
-					else
-					{
-						value = param.getDefaultValue();
-					}
-				}
-
-				// first param processed should be
-				// com.sun.faces.displayConfiguration
-				if (BooleanWebContextInitParameter.DisplayConfiguration
-						.equals(param)
-						&& value)
-				{
-					loggingLevel = Level.INFO;
-				}
-
-				if (LOGGER.isLoggable(loggingLevel))
-				{
-					LOGGER
-							.log(
-									loggingLevel,
-									((value) ? "jsf.config.webconfig.boolconfiginfo.enabled"
-											: "jsf.config.webconfig.boolconfiginfo.disabled"),
-									new Object[]
-									{
-											contextName,
-											param.getQualifiedName()
-									});
-				}
-
-				booleanContextParameters.put(param, value);
-			}
-
-		}
-
-	}
-
-	/**
-	 * Adds all com.sun.faces init parameter names to a list. This allows
-	 * callers to determine if a parameter was explicitly set.
-	 * 
-	 * @param servletContext
-	 *            the ServletContext of interest
-	 */
-	private void initSetList(ServletContext servletContext)
-	{
-
-		for (Enumeration e = servletContext.getInitParameterNames(); e
-				.hasMoreElements();)
-		{
-			String name = e.nextElement().toString();
-			if (name.startsWith("com.sun.faces"))
-			{
-				setParams.add(name);
-			}
-		}
-
-	}
-
-	/**
-	 * @param name
-	 *            the param name
-	 * @return <code>true</code> if the name was explicitly specified
-	 */
-	private boolean isSet(String name)
-	{
-
-		return setParams.contains(name);
-
-	}
-
-	/**
-	 * <p>
-	 * Process all non-boolean context initialization parameters.
-	 * </p>
-	 * 
-	 * @param servletContext
-	 *            the ServletContext of interest
-	 * @param contextName
-	 *            the context name
-	 */
-	private void processInitParameters(ServletContext servletContext,
-			String contextName)
-	{
-
-		for (WebContextInitParameter param : WebContextInitParameter.values())
-		{
-			String value = servletContext.getInitParameter(param
-					.getQualifiedName());
-
-			if (value != null && value.length() > 0 && param.isDeprecated())
-			{
-				WebContextInitParameter alternate = param.getAlternate();
-				if (LOGGER.isLoggable(Level.WARNING))
-				{
-					if (alternate != null)
-					{
-						LOGGER.log(Level.WARNING,
-								"jsf.config.webconfig.param.deprecated",
-								new Object[]
-								{
-										contextName, param.getQualifiedName(),
-										alternate.getQualifiedName()
-								});
-					}
-					else
-					{
-						LOGGER
-								.log(
-										Level.WARNING,
-										"jsf.config.webconfig.param.deprecated.no_replacement",
-										new Object[]
-										{
-												contextName,
-												param.getQualifiedName()
-										});
-					}
-				}
-
-				if (alternate != null)
-				{
-					if (LOGGER.isLoggable(Level.INFO))
-					{
-						LOGGER.log(Level.INFO,
-								"jsf.config.webconfig.configinfo.reset",
-								new Object[]
-								{
-										contextName,
-										alternate.getQualifiedName(), value
-								});
-					}
-
-					contextParameters.put(alternate, value);
-				}
-				continue;
-			}
-
-			if ((value == null || value.length() == 0) && !param.isDeprecated())
-			{
-				value = param.getDefaultValue();
-			}
-			if (value == null || value.length() == 0)
-			{
-				continue;
-			}
-
-			if (value.length() > 0)
-			{
-				if (LOGGER.isLoggable(loggingLevel))
-				{
-					LOGGER.log(loggingLevel, "jsf.config.webconfig.configinfo",
-							new Object[]
-							{
-									contextName, param.getQualifiedName(),
-									value
-							});
-
-				}
-				contextParameters.put(param, value);
-			}
-			else
-			{
-				if (LOGGER.isLoggable(loggingLevel))
-				{
-					LOGGER.log(loggingLevel,
-							"jsf.config.webconfig.option.notconfigured",
-							new Object[]
-							{
-									contextName, param.getQualifiedName()
-							});
-				}
-			}
-
-		}
-
-	}
-
-	/**
-	 * <p>
-	 * Process all JNDI entries.
-	 * </p>
-	 * 
-	 * @param contextName
-	 *            the context name
-	 */
-	private void processJndiEntries(String contextName)
-	{
-/*
- * This section has been disabled due to incompatibilities with Google App Engine 1.2.6.
-		Context initialContext = null;
-		try
-		{
-			initialContext = new InitialContext();
-		}
-		catch (NamingException ne)
-		{
-			if (LOGGER.isLoggable(Level.WARNING))
-			{
-				LOGGER.log(Level.WARNING, ne.toString(), ne);
-			}
-		}
-
-		if (initialContext != null)
-		{
-			// process environment entries
-			for (WebEnvironmentEntry entry : WebEnvironmentEntry.values())
-			{
-				String entryName = entry.getQualifiedName();
-				String value = null;
-
-				try
-				{
-					value = (String) initialContext.lookup(entryName);
-				}
-				catch (NamingException root)
-				{
-					if (LOGGER.isLoggable(Level.FINE))
-					{
-						LOGGER.fine(root.toString());
-					}
-				}
-
-				if (value != null)
-				{
-					if (LOGGER.isLoggable(Level.INFO))
-					{
-						// special logic for ClientStateSavingPassword
-						if (!entry
-								.equals(WebEnvironmentEntry.ClientStateSavingPassword))
-						{
-							if (LOGGER.isLoggable(loggingLevel))
-							{
-								LOGGER.log(loggingLevel,
-										"jsf.config.webconfig.enventryinfo",
-										new Object[]
-										{
-												contextName, entryName, value
-										});
-							}
-						}
-						else
-						{
-							if (LOGGER.isLoggable(loggingLevel))
-							{
-								LOGGER
-										.log(
-												loggingLevel,
-												"jsf.config.webconfig.enventry.clientencrypt",
-												contextName);
-							}
-						}
-					}
-					envEntries.put(entry, value);
-				}
-			}
-		}
-*/
-	}
-
-	private boolean canProcessJndiEntries()
-	{
-
-		/*
-		 * This section has been disabled due to incompatibilities with Google App Engine 1.2.6
-		try
-		{
-			Util.getCurrentLoader(this)
-					.loadClass("javax.naming.InitialContext");
-		}
-		catch (Exception e)
-		{
-		*/
-			if (LOGGER.isLoggable(Level.FINE))
-			{
-				LOGGER
-						.fine("javax.naming is forced unavailable.  JNDI entries related to Mojarra configuration will not be processed.");
-			}
-			return false;
-		/*
-		}
-		return true;
-		*/
-
-	}
-
-	// ------------------------------------------------------------------- Enums
-
-	/**
-	 * <p>
-	 * An <code>enum</code> of all non-boolean context initalization parameters
-	 * recognized by the implementation.
-	 * </p>
-	 */
-	public enum WebContextInitParameter
-	{
-
-		// implementation note:
-		// if a parameter is to be deprecated,
-		// then the <name>Deprecated enum element
-		// *must* appear after the one that is taking
-		// its place. The reporting logic depends on this
-
-		ManagedBeanFactoryDecorator(
-				"com.sun.faces.managedBeanFactoryDecoratorClass", ""), StateSavingMethod(
-				"javax.faces.STATE_SAVING_METHOD", "server"), FaceletsSuffix(
-				ViewHandler.FACELETS_SUFFIX_PARAM_NAME,
-				ViewHandler.DEFAULT_FACELETS_SUFFIX), DefaultSuffix(
-				ViewHandler.DEFAULT_SUFFIX_PARAM_NAME,
-				ViewHandler.DEFAULT_SUFFIX), JavaxFacesConfigFiles(
-				"javax.faces.CONFIG_FILES", ""), JavaxFacesProjectStage(
-				"javax.faces.PROJECT_STAGE", "Production"), AlternateLifecycleId(
-				"javax.faces.LIFECYCLE_ID", ""), ResourceExcludes(
-				ResourceHandler.RESOURCE_EXCLUDES_PARAM_NAME,
-				ResourceHandler.RESOURCE_EXCLUDES_DEFAULT_VALUE + " .groovy"), NumberOfViews(
-				"com.sun.faces.numberOfViewsInSession", "15"), NumberOfViewsDeprecated(
-				"com.sun.faces.NUMBER_OF_VIEWS_IN_SESSION", "15", true,
-				NumberOfViews), NumberOfLogicalViews(
-				"com.sun.faces.numberOfLogicalViews", "15"), NumberOfLogicalViewsDeprecated(
-				"com.sun.faces.NUMBER_OF_VIEWS_IN_LOGICAL_VIEW_IN_SESSION",
-				"15", true, NumberOfLogicalViews), NumberOfConcurrentFlashUsers(
-				"com.sun.faces.numberOfConcerrentFlashUsers", "5000"), NumberOfFlashesBetweenFlashReapings(
-				"com.sun.faces.numberOfFlashesBetweenFlashReapings", "5000"), InjectionProviderClass(
-				"com.sun.faces.injectionProvider", ""), SerializationProviderClass(
-				"com.sun.faces.serializationProvider", ""), ResponseBufferSize(
-				"com.sun.faces.responseBufferSize", "1024"), FaceletsBufferSize(
-				"javax.faces.FACELETS_BUFFER_SIZE", "1024", true,
-				ResponseBufferSize), FaceletsBufferSizeDeprecated(
-				"facelets.BUFFER_SIZE", "1024", true, FaceletsBufferSize), ClientStateWriteBufferSize(
-				"com.sun.faces.clientStateWriteBufferSize", "8192"), ResourceBufferSize(
-				"com.sun.faces.resourceBufferSize", "2048"), ExpressionFactory(
-				"com.sun.faces.expressionFactory",
-				"com.sun.el.ExpressionFactoryImpl"), ClientStateTimeout(
-				"com.sun.faces.clientStateTimeout", ""), DefaultResourceMaxAge(
-				"com.sun.faces.defaultResourceMaxAge", "604800"), ResourceUpdateCheckPeriod(
-				"com.sun.faces.resourceUpdateCheckPeriod", "5" // in minutes
-		), CompressableMimeTypes("com.sun.faces.compressableMimeTypes", ""), DisableUnicodeEscaping(
-				"com.sun.faces.disableUnicodeEscaping", "auto"), FaceletsDefaultRefreshPeriod(
-				"javax.faces.FACELETS_REFRESH_PERIOD", "2"), FaceletsDefaultRefreshPeriodDeprecated(
-				"facelets.REFRESH_PERIOD", "2", true,
-				FaceletsDefaultRefreshPeriod), FaceletsResourceResolver(
-				ResourceResolver.FACELETS_RESOURCE_RESOLVER_PARAM_NAME, ""), FaceletsResourceResolverDeprecated(
-				"facelets.RESOURCE_RESOLVER", "", true,
-				FaceletsResourceResolver), FaceletsViewMappings(
-				ViewHandler.FACELETS_VIEW_MAPPINGS_PARAM_NAME, ""), FaceletsViewMappingsDeprecated(
-				"facelets.VIEW_MAPPINGS", "", true, FaceletsViewMappings), FaceletsLibraries(
-				"javax.faces.FACELETS_LIBRARIES", ""), FaceletsLibrariesDeprecated(
-				"facelets.LIBRARIES", "", true, FaceletsLibraries), FaceletsDecorators(
-				"javax.faces.FACELETS_DECORATORS", ""), FaceletsDecoratorsDeprecated(
-				"facelets.DECORATORS", "", true, FaceletsDecorators), DuplicateJARPattern(
-				"com.sun.faces.duplicateJARPattern", ""), ValidateEmptyFields(
-				UIInput.VALIDATE_EMPTY_FIELDS_PARAM_NAME, "auto"), FullStateSavingViewIds(
-				StateManager.FULL_STATE_SAVING_VIEW_IDS_PARAM_NAME, ""), AnnotationScanPackages(
-				"com.sun.faces.annotationScanPackages", ""), FaceletFactory(
-				"com.sun.faces.faceletFactory", "");
-
-		private String defaultValue;
-		private String qualifiedName;
-		private WebContextInitParameter alternate;
-		private boolean deprecated;
-
-		// ---------------------------------------------------------- Public
-		// Methods
-
-		public String getDefaultValue()
-		{
-
-			return defaultValue;
-
-		}
-
-		public String getQualifiedName()
-		{
-
-			return qualifiedName;
-
-		}
-
-		// ------------------------------------------------- Package Private
-		// Methods
-
-		WebContextInitParameter(String qualifiedName, String defaultValue)
-		{
-
-			this(qualifiedName, defaultValue, false, null);
-
-		}
-
-		WebContextInitParameter(String qualifiedName, String defaultValue,
-				boolean deprecated, WebContextInitParameter alternate)
-		{
-
-			this.qualifiedName = qualifiedName;
-			this.defaultValue = defaultValue;
-			this.deprecated = deprecated;
-			this.alternate = alternate;
-
-		}
-
-		// --------------------------------------------------------- Private
-		// Methods
-
-		private WebContextInitParameter getAlternate()
-		{
-
-			return alternate;
-
-		}
-
-		private boolean isDeprecated()
-		{
-
-			return deprecated;
-
-		}
-
-	}
-
-	/**
-	 * <p>
-	 * An <code>enum</code> of all boolean context initalization parameters
-	 * recognized by the implementation.
-	 * </p>
-	 */
-	public enum BooleanWebContextInitParameter
-	{
-
-		// implementation note:
-		// if a parameter is to be deprecated,
-		// then the <name>Deprecated enum element
-		// *must* appear after the one that is taking
-		// its place. The reporting logic depends on this
-
-		DisplayConfiguration("com.sun.faces.displayConfiguration", false), ValidateFacesConfigFiles(
-				"com.sun.faces.validateXml", false), VerifyFacesConfigObjects(
-				"com.sun.faces.verifyObjects", false), ForceLoadFacesConfigFiles(
-				"com.sun.faces.forceLoadConfiguration", false), DisableArtifactVersioning(
-				"com.sun.faces.disableVersionTracking", false, true, null), EnableHtmlTagLibraryValidator(
-				"com.sun.faces.enableHtmlTagLibValidator", false), EnableCoreTagLibraryValidator(
-				"com.sun.faces.enableCoreTagLibValidator", false), PreferXHTMLContentType(
-				"com.sun.faces.preferXHTML", false), PreferXHTMLContextTypeDeprecated(
-				"com.sun.faces.PreferXHTML", false, true,
-				PreferXHTMLContentType), CompressViewState(
-				"com.sun.faces.compressViewState", true), CompressViewStateDeprecated(
-				"com.sun.faces.COMPRESS_STATE", true, true, CompressViewState), CompressJavaScript(
-				"com.sun.faces.compressJavaScript", true), ExternalizeJavaScriptDeprecated(
-				"com.sun.faces.externalizeJavaScript", true, true, null), SendPoweredByHeader(
-				"com.sun.faces.sendPoweredByHeader", true), EnableJSStyleHiding(
-				"com.sun.faces.enableJSStyleHiding", false), EnableScriptInAttributeValue(
-				"com.sun.faces.enableScriptsInAttributeValues", true), WriteStateAtFormEnd(
-				"com.sun.faces.writeStateAtFormEnd", true), EnableLazyBeanValidation(
-				"com.sun.faces.enableLazyBeanValidation", true), EnableLoadBundle11Compatibility(
-				"com.sun.faces.enabledLoadBundle11Compatibility", false), EnableRestoreView11Compatibility(
-				"com.sun.faces.enableRestoreView11Compatibility", false), SerializeServerState(
-				"com.sun.faces.serializeServerState", false), EnableViewStateIdRendering(
-				"com.sun.faces.enableViewStateIdRendering", true), RegisterConverterPropertyEditors(
-				"com.sun.faces.registerConverterPropertyEditors", false), EnableGroovyScripting(
-				"com.sun.faces.enableGroovyScripting", false), DisableFaceletJSFViewHandler(
-				"javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER", false), DisableDefaultBeanValidator(
-				BeanValidator.DISABLE_DEFAULT_BEAN_VALIDATOR_PARAM_NAME, false), DateTimeConverterUsesSystemTimezone(
-				"javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE",
-				false), FaceletsSkipComments(
-				"javax.faces.FACELETS_SKIP_COMMENTS", false), FaceletsSkipCommentsDeprecated(
-				"facelets.SKIP_COMMENTS", false, true, FaceletsSkipComments), PartialStateSaving(
-				StateManager.PARTIAL_STATE_SAVING_PARAM_NAME, true), GenerateUniqueServerStateIds(
-				"com.sun.faces.generateUniqueServerStateIds", true), AutoCompleteOffOnViewState(
-				"com.sun.faces.autoCompleteOffOnViewState", true), EnableThreading(
-				"com.sun.faces.enableThreading", true), AllowTextChildren(
-				"com.sun.faces.allowTextChildren", false);
-
-		private BooleanWebContextInitParameter alternate;
-
-		private String qualifiedName;
-		private boolean defaultValue;
-		private boolean deprecated;
-
-		// ---------------------------------------------------------- Public
-		// Methods
-
-		public boolean getDefaultValue()
-		{
-
-			return defaultValue;
-
-		}
-
-		public String getQualifiedName()
-		{
-
-			return qualifiedName;
-
-		}
-
-		// ------------------------------------------------- Package Private
-		// Methods
-
-		BooleanWebContextInitParameter(String qualifiedName,
-				boolean defaultValue)
-		{
-
-			this(qualifiedName, defaultValue, false, null);
-
-		}
-
-		BooleanWebContextInitParameter(String qualifiedName,
-				boolean defaultValue, boolean deprecated,
-				BooleanWebContextInitParameter alternate)
-		{
-
-			this.qualifiedName = qualifiedName;
-			this.defaultValue = defaultValue;
-			this.deprecated = deprecated;
-			this.alternate = alternate;
-
-		}
-
-		// --------------------------------------------------------- Private
-		// Methods
-
-		private BooleanWebContextInitParameter getAlternate()
-		{
-
-			return alternate;
-
-		}
-
-		private boolean isDeprecated()
-		{
-
-			return deprecated;
-
-		}
-
-	}
-
-	/**
-	 * <p>
-	 * An <code>enum</code> of all environment entries (specified in the
-	 * web.xml) recognized by the implemenetation.
-	 * </p>
-	 */
-	public enum WebEnvironmentEntry
-	{
-
-		ClientStateSavingPassword("ClientStateSavingPassword"), ProjectStage(
-				javax.faces.application.ProjectStage.PROJECT_STAGE_JNDI_NAME);
-
-		private static final String JNDI_PREFIX = "java:comp/env/";
-		private String qualifiedName;
-
-		// ---------------------------------------------------------- Public
-		// Methods
-
-		public String getQualifiedName()
-		{
-
-			return qualifiedName;
-
-		}
-
-		// ------------------------------------------------- Package Private
-		// Methods
-
-		WebEnvironmentEntry(String qualifiedName)
-		{
-
-			if (qualifiedName.startsWith(JNDI_PREFIX))
-			{
-				this.qualifiedName = qualifiedName;
-			}
-			else
-			{
-				this.qualifiedName = JNDI_PREFIX + qualifiedName;
-			}
-
-		}
-
-	}
-
-	/**
-	 * <p>
-	 * An <code>enum</code> of all possible values for the
-	 * <code>disableUnicodeEscaping</code> configuration parameter.
-	 * </p>
-	 */
-	public enum DisableUnicodeEscaping
-	{
-		True("true"), False("false"), Auto("auto");
-
-		private final String value;
-
-		DisableUnicodeEscaping(String value)
-		{
-			this.value = value;
-		}
-
-		public static DisableUnicodeEscaping getByValue(String value)
-		{
-			for (DisableUnicodeEscaping disableUnicodeEscaping : DisableUnicodeEscaping
-					.values())
-			{
-				if (disableUnicodeEscaping.value.equals(value)) { return disableUnicodeEscaping; }
-			}
-
-			return null;
-		}
-	}
-
-} // END WebConfiguration
\ No newline at end of file

Copied: trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/faces/config/WebConfiguration.java (from rev 18841, branches/RF-7939-showcase/src/main/java-gae-jsf-ri/com/sun/faces/config/WebConfiguration.java)
===================================================================
--- trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/faces/config/WebConfiguration.java	                        (rev 0)
+++ trunk/examples/richfaces-showcase/src/main/java-gae-jsf-ri/com/sun/faces/config/WebConfiguration.java	2010-08-20 15:54:52 UTC (rev 18853)
@@ -0,0 +1,1109 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+package com.sun.faces.config;
+
+import java.util.ArrayList;
+import java.util.EnumMap;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Pattern;
+
+import javax.faces.application.ResourceHandler;
+import javax.faces.application.StateManager;
+import javax.faces.application.ViewHandler;
+import javax.faces.component.UIInput;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.BeanValidator;
+import javax.faces.view.facelets.ResourceResolver;
+import javax.servlet.ServletContext;
+
+import com.sun.faces.util.FacesLogger;
+import com.sun.faces.util.Util;
+
+/** Class Documentation */
+public class WebConfiguration
+{
+
+	// Log instance for this class
+	private static final Logger LOGGER = FacesLogger.CONFIG.getLogger();
+
+	// A Simple regular expression of allowable boolean values
+	private static final Pattern ALLOWABLE_BOOLEANS = Pattern
+			.compile("true|false");
+
+	// Key under which we store our WebConfiguration instance.
+	private static final String WEB_CONFIG_KEY = "com.sun.faces.config.WebConfiguration";
+
+	// Logging level. Defaults to FINE
+	private Level loggingLevel = Level.FINE;
+
+	private Map<BooleanWebContextInitParameter, Boolean> booleanContextParameters = new EnumMap<BooleanWebContextInitParameter, Boolean>(
+			BooleanWebContextInitParameter.class);
+
+	private Map<WebContextInitParameter, String> contextParameters = new EnumMap<WebContextInitParameter, String>(
+			WebContextInitParameter.class);
+
+	private Map<WebEnvironmentEntry, String> envEntries = new EnumMap<WebEnvironmentEntry, String>(
+			WebEnvironmentEntry.class);
+
+	private Map<WebContextInitParameter, String[]> cachedListParams;
+
+	private List<String> setParams = new ArrayList<String>();
+
+	private ServletContext servletContext;
+
+	// ------------------------------------------------------------ Constructors
+
+	private WebConfiguration(ServletContext servletContext)
+	{
+
+		this.servletContext = servletContext;
+
+		String contextName = getServletContextName();
+
+		initSetList(servletContext);
+		processBooleanParameters(servletContext, contextName);
+		processInitParameters(servletContext, contextName);
+		if (canProcessJndiEntries())
+		{
+			processJndiEntries(contextName);
+		}
+
+		// build the cache of list type params
+		cachedListParams = new HashMap<WebContextInitParameter, String[]>(3);
+		getOptionValue(WebContextInitParameter.ResourceExcludes, " ");
+		getOptionValue(WebContextInitParameter.DefaultSuffix, " ");
+		getOptionValue(WebContextInitParameter.FaceletsViewMappings, ";");
+
+	}
+
+	// ---------------------------------------------------------- Public Methods
+
+	/**
+	 * Return the WebConfiguration instance for this application passing the
+	 * result of FacesContext.getCurrentInstance().getExternalContext() to
+	 * {@link #getInstance(javax.faces.context.ExternalContext)}.
+	 * 
+	 * @return the WebConfiguration for this application or <code>null</code> if
+	 *         no FacesContext is available.
+	 */
+	public static WebConfiguration getInstance()
+	{
+
+		FacesContext facesContext = FacesContext.getCurrentInstance();
+		return getInstance(facesContext.getExternalContext());
+
+	}
+
+	/**
+	 * Return the WebConfiguration instance for this application.
+	 * 
+	 * @param extContext
+	 *            the ExternalContext for this request
+	 * @return the WebConfiguration for this application
+	 */
+	public static WebConfiguration getInstance(ExternalContext extContext)
+	{
+
+		WebConfiguration config = (WebConfiguration) extContext
+				.getApplicationMap().get(WEB_CONFIG_KEY);
+		if (config == null)
+		{
+			return getInstance((ServletContext) extContext.getContext());
+		}
+		else
+		{
+			return config;
+		}
+
+	}
+
+	/**
+	 * Return the WebConfiguration instance for this application.
+	 * 
+	 * @param servletContext
+	 *            the ServletContext
+	 * @return the WebConfiguration for this application or <code>null</code> if
+	 *         no WebConfiguration could be located
+	 */
+	public static WebConfiguration getInstance(ServletContext servletContext)
+	{
+
+		WebConfiguration webConfig = (WebConfiguration) servletContext
+				.getAttribute(WEB_CONFIG_KEY);
+
+		if (webConfig == null)
+		{
+			webConfig = new WebConfiguration(servletContext);
+			servletContext.setAttribute(WEB_CONFIG_KEY, webConfig);
+		}
+		return webConfig;
+
+	}
+
+	/**
+	 * @return The <code>ServletContext</code> originally used to construct this
+	 *         WebConfiguration instance
+	 */
+	public ServletContext getServletContext()
+	{
+
+		return servletContext;
+
+	}
+
+	/**
+	 * Obtain the value of the specified boolean parameter
+	 * 
+	 * @param param
+	 *            the parameter of interest
+	 * @return the value of the specified boolean parameter
+	 */
+	public boolean isOptionEnabled(BooleanWebContextInitParameter param)
+	{
+
+		if (booleanContextParameters.get(param) != null)
+		{
+			return booleanContextParameters.get(param);
+		}
+		else
+		{
+			return param.getDefaultValue();
+		}
+
+	}
+
+	/**
+	 * Obtain the value of the specified parameter
+	 * 
+	 * @param param
+	 *            the parameter of interest
+	 * @return the value of the specified parameter
+	 */
+	public String getOptionValue(WebContextInitParameter param)
+	{
+		String result = contextParameters.get(param);
+
+		if (null == result)
+		{
+			WebContextInitParameter alternate = param.getAlternate();
+			if (null != alternate)
+			{
+				result = contextParameters.get(alternate);
+			}
+		}
+
+		return result;
+
+	}
+
+	public String[] getOptionValue(WebContextInitParameter param, String sep)
+	{
+		String[] result;
+
+		assert (null != cachedListParams);
+		if (null == (result = cachedListParams.get(param)))
+		{
+			String value = getOptionValue(param);
+			if (null == value)
+			{
+				result = new String[0];
+			}
+			else
+			{
+				result = Util.split(value, sep);
+			}
+			cachedListParams.put(param, result);
+		}
+
+		return result;
+	}
+
+	/**
+	 * Obtain the value of the specified env-entry
+	 * 
+	 * @param entry
+	 *            the env-entry of interest
+	 * @return the value of the specified env-entry
+	 */
+	public String getEnvironmentEntry(WebEnvironmentEntry entry)
+	{
+
+		return envEntries.get(entry);
+
+	}
+
+	/**
+	 * @param param
+	 *            the init parameter of interest
+	 * @return <code>true</code> if the parameter was explicitly set, otherwise,
+	 *         <code>false</code>
+	 */
+	public boolean isSet(WebContextInitParameter param)
+	{
+
+		return isSet(param.getQualifiedName());
+
+	}
+
+	/**
+	 * @param param
+	 *            the init parameter of interest
+	 * @return <code>true</code> if the parameter was explicitly set, otherwise,
+	 *         <code>false</code>
+	 */
+	public boolean isSet(BooleanWebContextInitParameter param)
+	{
+
+		return isSet(param.getQualifiedName());
+
+	}
+
+	/**
+	 * @return the name of this application
+	 */
+	public String getServletContextName()
+	{
+
+		if (servletContext.getMajorVersion() == 2
+				&& servletContext.getMinorVersion() <= 4)
+		{
+			return servletContext.getServletContextName();
+		}
+		else
+		{
+			return servletContext.getContextPath();
+		}
+
+	}
+
+	public void overrideContextInitParameter(
+			BooleanWebContextInitParameter param, boolean value)
+	{
+
+		if (param == null) { return; }
+		boolean oldVal = booleanContextParameters.put(param, value);
+		if (LOGGER.isLoggable(Level.FINE) && oldVal != value)
+		{
+			LOGGER
+					.log(
+							Level.FINE,
+							"Overriding init parameter {0}.  Changing from {1} to {2}.",
+							new Object[]
+							{
+									param.getQualifiedName(), oldVal, value
+							});
+		}
+
+	}
+
+	public void overrideContextInitParameter(WebContextInitParameter param,
+			String value)
+	{
+
+		if (param == null || value == null || value.length() == 0) { return; }
+		value = value.trim();
+		String oldVal = contextParameters.put(param, value);
+		cachedListParams.remove(param);
+		if (oldVal != null)
+		{
+			if (LOGGER.isLoggable(Level.FINE) && !(oldVal.equals(value)))
+			{
+				LOGGER
+						.log(
+								Level.FINE,
+								"Overriding init parameter {0}.  Changing from {1} to {2}.",
+								new Object[]
+								{
+										param.getQualifiedName(), oldVal, value
+								});
+			}
+		}
+
+	}
+
+	// ------------------------------------------------- Package Private Methods
+
+	static void clear(ServletContext servletContext)
+	{
+
+		servletContext.removeAttribute(WEB_CONFIG_KEY);
+
+	}
+
+	// --------------------------------------------------------- Private Methods
+
+	/**
+	 * <p>
+	 * Is the configured value valid against the default boolean pattern.
+	 * </p>
+	 * 
+	 * @param param
+	 *            the boolean parameter
+	 * @param value
+	 *            the configured value
+	 * @return <code>true</code> if the value is valid, otherwise
+	 *         <code>false</code>
+	 */
+	private boolean isValueValid(BooleanWebContextInitParameter param,
+			String value)
+	{
+
+		if (!ALLOWABLE_BOOLEANS.matcher(value).matches())
+		{
+			if (LOGGER.isLoggable(Level.WARNING))
+			{
+				LOGGER.log(Level.WARNING,
+						"jsf.config.webconfig.boolconfig.invalidvalue",
+						new Object[]
+						{
+								value, param.getQualifiedName(), "true|false"
+						});
+			}
+			return false;
+		}
+
+		return true;
+
+	}
+
+	/**
+	 * <p>
+	 * Process all boolean context initialization parameters.
+	 * </p>
+	 * 
+	 * @param servletContext
+	 *            the ServletContext of interest
+	 * @param contextName
+	 *            the context name
+	 */
+	private void processBooleanParameters(ServletContext servletContext,
+			String contextName)
+	{
+
+		// process boolean contxt parameters
+		for (BooleanWebContextInitParameter param : BooleanWebContextInitParameter
+				.values())
+		{
+			String strValue = servletContext.getInitParameter(param
+					.getQualifiedName());
+			boolean value;
+
+			if (strValue != null && strValue.length() > 0
+					&& param.isDeprecated())
+			{
+				BooleanWebContextInitParameter alternate = param.getAlternate();
+				if (LOGGER.isLoggable(Level.WARNING))
+				{
+					if (alternate != null)
+					{
+						LOGGER.log(Level.WARNING,
+								"jsf.config.webconfig.param.deprecated",
+								new Object[]
+								{
+										contextName, param.getQualifiedName(),
+										alternate.getQualifiedName()
+								});
+					}
+					else
+					{
+						LOGGER
+								.log(
+										Level.WARNING,
+										"jsf.config.webconfig.param.deprecated.no_replacement",
+										new Object[]
+										{
+												contextName,
+												param.getQualifiedName()
+										});
+					}
+				}
+
+				if (alternate != null)
+				{
+					if (isValueValid(param, strValue))
+					{
+						value = Boolean.valueOf(strValue);
+					}
+					else
+					{
+						value = param.getDefaultValue();
+					}
+
+					if (LOGGER.isLoggable(Level.INFO) && alternate != null)
+					{
+						LOGGER
+								.log(
+										Level.INFO,
+										((value) ? "jsf.config.webconfig.configinfo.reset.enabled"
+												: "jsf.config.webconfig.configinfo.reset.disabled"),
+										new Object[]
+										{
+												contextName,
+												alternate.getQualifiedName()
+										});
+					}
+
+					booleanContextParameters.put(alternate, value);
+				}
+				continue;
+			}
+
+			if (!param.isDeprecated())
+			{
+				if (strValue == null)
+				{
+					value = param.getDefaultValue();
+				}
+				else
+				{
+					if (isValueValid(param, strValue))
+					{
+						value = Boolean.valueOf(strValue);
+					}
+					else
+					{
+						value = param.getDefaultValue();
+					}
+				}
+
+				// first param processed should be
+				// com.sun.faces.displayConfiguration
+				if (BooleanWebContextInitParameter.DisplayConfiguration
+						.equals(param)
+						&& value)
+				{
+					loggingLevel = Level.INFO;
+				}
+
+				if (LOGGER.isLoggable(loggingLevel))
+				{
+					LOGGER
+							.log(
+									loggingLevel,
+									((value) ? "jsf.config.webconfig.boolconfiginfo.enabled"
+											: "jsf.config.webconfig.boolconfiginfo.disabled"),
+									new Object[]
+									{
+											contextName,
+											param.getQualifiedName()
+									});
+				}
+
+				booleanContextParameters.put(param, value);
+			}
+
+		}
+
+	}
+
+	/**
+	 * Adds all com.sun.faces init parameter names to a list. This allows
+	 * callers to determine if a parameter was explicitly set.
+	 * 
+	 * @param servletContext
+	 *            the ServletContext of interest
+	 */
+	private void initSetList(ServletContext servletContext)
+	{
+
+		for (Enumeration e = servletContext.getInitParameterNames(); e
+				.hasMoreElements();)
+		{
+			String name = e.nextElement().toString();
+			if (name.startsWith("com.sun.faces"))
+			{
+				setParams.add(name);
+			}
+		}
+
+	}
+
+	/**
+	 * @param name
+	 *            the param name
+	 * @return <code>true</code> if the name was explicitly specified
+	 */
+	private boolean isSet(String name)
+	{
+
+		return setParams.contains(name);
+
+	}
+
+	/**
+	 * <p>
+	 * Process all non-boolean context initialization parameters.
+	 * </p>
+	 * 
+	 * @param servletContext
+	 *            the ServletContext of interest
+	 * @param contextName
+	 *            the context name
+	 */
+	private void processInitParameters(ServletContext servletContext,
+			String contextName)
+	{
+
+		for (WebContextInitParameter param : WebContextInitParameter.values())
+		{
+			String value = servletContext.getInitParameter(param
+					.getQualifiedName());
+
+			if (value != null && value.length() > 0 && param.isDeprecated())
+			{
+				WebContextInitParameter alternate = param.getAlternate();
+				if (LOGGER.isLoggable(Level.WARNING))
+				{
+					if (alternate != null)
+					{
+						LOGGER.log(Level.WARNING,
+								"jsf.config.webconfig.param.deprecated",
+								new Object[]
+								{
+										contextName, param.getQualifiedName(),
+										alternate.getQualifiedName()
+								});
+					}
+					else
+					{
+						LOGGER
+								.log(
+										Level.WARNING,
+										"jsf.config.webconfig.param.deprecated.no_replacement",
+										new Object[]
+										{
+												contextName,
+												param.getQualifiedName()
+										});
+					}
+				}
+
+				if (alternate != null)
+				{
+					if (LOGGER.isLoggable(Level.INFO))
+					{
+						LOGGER.log(Level.INFO,
+								"jsf.config.webconfig.configinfo.reset",
+								new Object[]
+								{
+										contextName,
+										alternate.getQualifiedName(), value
+								});
+					}
+
+					contextParameters.put(alternate, value);
+				}
+				continue;
+			}
+
+			if ((value == null || value.length() == 0) && !param.isDeprecated())
+			{
+				value = param.getDefaultValue();
+			}
+			if (value == null || value.length() == 0)
+			{
+				continue;
+			}
+
+			if (value.length() > 0)
+			{
+				if (LOGGER.isLoggable(loggingLevel))
+				{
+					LOGGER.log(loggingLevel, "jsf.config.webconfig.configinfo",
+							new Object[]
+							{
+									contextName, param.getQualifiedName(),
+									value
+							});
+
+				}
+				contextParameters.put(param, value);
+			}
+			else
+			{
+				if (LOGGER.isLoggable(loggingLevel))
+				{
+					LOGGER.log(loggingLevel,
+							"jsf.config.webconfig.option.notconfigured",
+							new Object[]
+							{
+									contextName, param.getQualifiedName()
+							});
+				}
+			}
+
+		}
+
+	}
+
+	/**
+	 * <p>
+	 * Process all JNDI entries.
+	 * </p>
+	 * 
+	 * @param contextName
+	 *            the context name
+	 */
+	private void processJndiEntries(String contextName)
+	{
+/*
+ * This section has been disabled due to incompatibilities with Google App Engine 1.2.6.
+		Context initialContext = null;
+		try
+		{
+			initialContext = new InitialContext();
+		}
+		catch (NamingException ne)
+		{
+			if (LOGGER.isLoggable(Level.WARNING))
+			{
+				LOGGER.log(Level.WARNING, ne.toString(), ne);
+			}
+		}
+
+		if (initialContext != null)
+		{
+			// process environment entries
+			for (WebEnvironmentEntry entry : WebEnvironmentEntry.values())
+			{
+				String entryName = entry.getQualifiedName();
+				String value = null;
+
+				try
+				{
+					value = (String) initialContext.lookup(entryName);
+				}
+				catch (NamingException root)
+				{
+					if (LOGGER.isLoggable(Level.FINE))
+					{
+						LOGGER.fine(root.toString());
+					}
+				}
+
+				if (value != null)
+				{
+					if (LOGGER.isLoggable(Level.INFO))
+					{
+						// special logic for ClientStateSavingPassword
+						if (!entry
+								.equals(WebEnvironmentEntry.ClientStateSavingPassword))
+						{
+							if (LOGGER.isLoggable(loggingLevel))
+							{
+								LOGGER.log(loggingLevel,
+										"jsf.config.webconfig.enventryinfo",
+										new Object[]
+										{
+												contextName, entryName, value
+										});
+							}
+						}
+						else
+						{
+							if (LOGGER.isLoggable(loggingLevel))
+							{
+								LOGGER
+										.log(
+												loggingLevel,
+												"jsf.config.webconfig.enventry.clientencrypt",
+												contextName);
+							}
+						}
+					}
+					envEntries.put(entry, value);
+				}
+			}
+		}
+*/
+	}
+
+	private boolean canProcessJndiEntries()
+	{
+
+		/*
+		 * This section has been disabled due to incompatibilities with Google App Engine 1.2.6
+		try
+		{
+			Util.getCurrentLoader(this)
+					.loadClass("javax.naming.InitialContext");
+		}
+		catch (Exception e)
+		{
+		*/
+			if (LOGGER.isLoggable(Level.FINE))
+			{
+				LOGGER
+						.fine("javax.naming is forced unavailable.  JNDI entries related to Mojarra configuration will not be processed.");
+			}
+			return false;
+		/*
+		}
+		return true;
+		*/
+
+	}
+
+	// ------------------------------------------------------------------- Enums
+
+	/**
+	 * <p>
+	 * An <code>enum</code> of all non-boolean context initalization parameters
+	 * recognized by the implementation.
+	 * </p>
+	 */
+	public enum WebContextInitParameter
+	{
+
+		// implementation note:
+		// if a parameter is to be deprecated,
+		// then the <name>Deprecated enum element
+		// *must* appear after the one that is taking
+		// its place. The reporting logic depends on this
+
+		ManagedBeanFactoryDecorator(
+				"com.sun.faces.managedBeanFactoryDecoratorClass", ""), StateSavingMethod(
+				"javax.faces.STATE_SAVING_METHOD", "server"), FaceletsSuffix(
+				ViewHandler.FACELETS_SUFFIX_PARAM_NAME,
+				ViewHandler.DEFAULT_FACELETS_SUFFIX), DefaultSuffix(
+				ViewHandler.DEFAULT_SUFFIX_PARAM_NAME,
+				ViewHandler.DEFAULT_SUFFIX), JavaxFacesConfigFiles(
+				"javax.faces.CONFIG_FILES", ""), JavaxFacesProjectStage(
+				"javax.faces.PROJECT_STAGE", "Production"), AlternateLifecycleId(
+				"javax.faces.LIFECYCLE_ID", ""), ResourceExcludes(
+				ResourceHandler.RESOURCE_EXCLUDES_PARAM_NAME,
+				ResourceHandler.RESOURCE_EXCLUDES_DEFAULT_VALUE + " .groovy"), NumberOfViews(
+				"com.sun.faces.numberOfViewsInSession", "15"), NumberOfViewsDeprecated(
+				"com.sun.faces.NUMBER_OF_VIEWS_IN_SESSION", "15", true,
+				NumberOfViews), NumberOfLogicalViews(
+				"com.sun.faces.numberOfLogicalViews", "15"), NumberOfLogicalViewsDeprecated(
+				"com.sun.faces.NUMBER_OF_VIEWS_IN_LOGICAL_VIEW_IN_SESSION",
+				"15", true, NumberOfLogicalViews), NumberOfConcurrentFlashUsers(
+				"com.sun.faces.numberOfConcerrentFlashUsers", "5000"), NumberOfFlashesBetweenFlashReapings(
+				"com.sun.faces.numberOfFlashesBetweenFlashReapings", "5000"), InjectionProviderClass(
+				"com.sun.faces.injectionProvider", ""), SerializationProviderClass(
+				"com.sun.faces.serializationProvider", ""), ResponseBufferSize(
+				"com.sun.faces.responseBufferSize", "1024"), FaceletsBufferSize(
+				"javax.faces.FACELETS_BUFFER_SIZE", "1024", true,
+				ResponseBufferSize), FaceletsBufferSizeDeprecated(
+				"facelets.BUFFER_SIZE", "1024", true, FaceletsBufferSize), ClientStateWriteBufferSize(
+				"com.sun.faces.clientStateWriteBufferSize", "8192"), ResourceBufferSize(
+				"com.sun.faces.resourceBufferSize", "2048"), ExpressionFactory(
+				"com.sun.faces.expressionFactory",
+				"com.sun.el.ExpressionFactoryImpl"), ClientStateTimeout(
+				"com.sun.faces.clientStateTimeout", ""), DefaultResourceMaxAge(
+				"com.sun.faces.defaultResourceMaxAge", "604800"), ResourceUpdateCheckPeriod(
+				"com.sun.faces.resourceUpdateCheckPeriod", "5" // in minutes
+		), CompressableMimeTypes("com.sun.faces.compressableMimeTypes", ""), DisableUnicodeEscaping(
+				"com.sun.faces.disableUnicodeEscaping", "auto"), FaceletsDefaultRefreshPeriod(
+				"javax.faces.FACELETS_REFRESH_PERIOD", "2"), FaceletsDefaultRefreshPeriodDeprecated(
+				"facelets.REFRESH_PERIOD", "2", true,
+				FaceletsDefaultRefreshPeriod), FaceletsResourceResolver(
+				ResourceResolver.FACELETS_RESOURCE_RESOLVER_PARAM_NAME, ""), FaceletsResourceResolverDeprecated(
+				"facelets.RESOURCE_RESOLVER", "", true,
+				FaceletsResourceResolver), FaceletsViewMappings(
+				ViewHandler.FACELETS_VIEW_MAPPINGS_PARAM_NAME, ""), FaceletsViewMappingsDeprecated(
+				"facelets.VIEW_MAPPINGS", "", true, FaceletsViewMappings), FaceletsLibraries(
+				"javax.faces.FACELETS_LIBRARIES", ""), FaceletsLibrariesDeprecated(
+				"facelets.LIBRARIES", "", true, FaceletsLibraries), FaceletsDecorators(
+				"javax.faces.FACELETS_DECORATORS", ""), FaceletsDecoratorsDeprecated(
+				"facelets.DECORATORS", "", true, FaceletsDecorators), DuplicateJARPattern(
+				"com.sun.faces.duplicateJARPattern", ""), ValidateEmptyFields(
+				UIInput.VALIDATE_EMPTY_FIELDS_PARAM_NAME, "auto"), FullStateSavingViewIds(
+				StateManager.FULL_STATE_SAVING_VIEW_IDS_PARAM_NAME, ""), AnnotationScanPackages(
+				"com.sun.faces.annotationScanPackages", ""), FaceletFactory(
+				"com.sun.faces.faceletFactory", "");
+
+		private String defaultValue;
+		private String qualifiedName;
+		private WebContextInitParameter alternate;
+		private boolean deprecated;
+
+		// ---------------------------------------------------------- Public
+		// Methods
+
+		public String getDefaultValue()
+		{
+
+			return defaultValue;
+
+		}
+
+		public String getQualifiedName()
+		{
+
+			return qualifiedName;
+
+		}
+
+		// ------------------------------------------------- Package Private
+		// Methods
+
+		WebContextInitParameter(String qualifiedName, String defaultValue)
+		{
+
+			this(qualifiedName, defaultValue, false, null);
+
+		}
+
+		WebContextInitParameter(String qualifiedName, String defaultValue,
+				boolean deprecated, WebContextInitParameter alternate)
+		{
+
+			this.qualifiedName = qualifiedName;
+			this.defaultValue = defaultValue;
+			this.deprecated = deprecated;
+			this.alternate = alternate;
+
+		}
+
+		// --------------------------------------------------------- Private
+		// Methods
+
+		private WebContextInitParameter getAlternate()
+		{
+
+			return alternate;
+
+		}
+
+		private boolean isDeprecated()
+		{
+
+			return deprecated;
+
+		}
+
+	}
+
+	/**
+	 * <p>
+	 * An <code>enum</code> of all boolean context initalization parameters
+	 * recognized by the implementation.
+	 * </p>
+	 */
+	public enum BooleanWebContextInitParameter
+	{
+
+		// implementation note:
+		// if a parameter is to be deprecated,
+		// then the <name>Deprecated enum element
+		// *must* appear after the one that is taking
+		// its place. The reporting logic depends on this
+
+		DisplayConfiguration("com.sun.faces.displayConfiguration", false), ValidateFacesConfigFiles(
+				"com.sun.faces.validateXml", false), VerifyFacesConfigObjects(
+				"com.sun.faces.verifyObjects", false), ForceLoadFacesConfigFiles(
+				"com.sun.faces.forceLoadConfiguration", false), DisableArtifactVersioning(
+				"com.sun.faces.disableVersionTracking", false, true, null), EnableHtmlTagLibraryValidator(
+				"com.sun.faces.enableHtmlTagLibValidator", false), EnableCoreTagLibraryValidator(
+				"com.sun.faces.enableCoreTagLibValidator", false), PreferXHTMLContentType(
+				"com.sun.faces.preferXHTML", false), PreferXHTMLContextTypeDeprecated(
+				"com.sun.faces.PreferXHTML", false, true,
+				PreferXHTMLContentType), CompressViewState(
+				"com.sun.faces.compressViewState", true), CompressViewStateDeprecated(
+				"com.sun.faces.COMPRESS_STATE", true, true, CompressViewState), CompressJavaScript(
+				"com.sun.faces.compressJavaScript", true), ExternalizeJavaScriptDeprecated(
+				"com.sun.faces.externalizeJavaScript", true, true, null), SendPoweredByHeader(
+				"com.sun.faces.sendPoweredByHeader", true), EnableJSStyleHiding(
+				"com.sun.faces.enableJSStyleHiding", false), EnableScriptInAttributeValue(
+				"com.sun.faces.enableScriptsInAttributeValues", true), WriteStateAtFormEnd(
+				"com.sun.faces.writeStateAtFormEnd", true), EnableLazyBeanValidation(
+				"com.sun.faces.enableLazyBeanValidation", true), EnableLoadBundle11Compatibility(
+				"com.sun.faces.enabledLoadBundle11Compatibility", false), EnableRestoreView11Compatibility(
+				"com.sun.faces.enableRestoreView11Compatibility", false), SerializeServerState(
+				"com.sun.faces.serializeServerState", false), EnableViewStateIdRendering(
+				"com.sun.faces.enableViewStateIdRendering", true), RegisterConverterPropertyEditors(
+				"com.sun.faces.registerConverterPropertyEditors", false), EnableGroovyScripting(
+				"com.sun.faces.enableGroovyScripting", false), DisableFaceletJSFViewHandler(
+				"javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER", false), DisableDefaultBeanValidator(
+				BeanValidator.DISABLE_DEFAULT_BEAN_VALIDATOR_PARAM_NAME, false), DateTimeConverterUsesSystemTimezone(
+				"javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE",
+				false), FaceletsSkipComments(
+				"javax.faces.FACELETS_SKIP_COMMENTS", false), FaceletsSkipCommentsDeprecated(
+				"facelets.SKIP_COMMENTS", false, true, FaceletsSkipComments), PartialStateSaving(
+				StateManager.PARTIAL_STATE_SAVING_PARAM_NAME, true), GenerateUniqueServerStateIds(
+				"com.sun.faces.generateUniqueServerStateIds", true), AutoCompleteOffOnViewState(
+				"com.sun.faces.autoCompleteOffOnViewState", true), EnableThreading(
+				"com.sun.faces.enableThreading", true), AllowTextChildren(
+				"com.sun.faces.allowTextChildren", false);
+
+		private BooleanWebContextInitParameter alternate;
+
+		private String qualifiedName;
+		private boolean defaultValue;
+		private boolean deprecated;
+
+		// ---------------------------------------------------------- Public
+		// Methods
+
+		public boolean getDefaultValue()
+		{
+
+			return defaultValue;
+
+		}
+
+		public String getQualifiedName()
+		{
+
+			return qualifiedName;
+
+		}
+
+		// ------------------------------------------------- Package Private
+		// Methods
+
+		BooleanWebContextInitParameter(String qualifiedName,
+				boolean defaultValue)
+		{
+
+			this(qualifiedName, defaultValue, false, null);
+
+		}
+
+		BooleanWebContextInitParameter(String qualifiedName,
+				boolean defaultValue, boolean deprecated,
+				BooleanWebContextInitParameter alternate)
+		{
+
+			this.qualifiedName = qualifiedName;
+			this.defaultValue = defaultValue;
+			this.deprecated = deprecated;
+			this.alternate = alternate;
+
+		}
+
+		// --------------------------------------------------------- Private
+		// Methods
+
+		private BooleanWebContextInitParameter getAlternate()
+		{
+
+			return alternate;
+
+		}
+
+		private boolean isDeprecated()
+		{
+
+			return deprecated;
+
+		}
+
+	}
+
+	/**
+	 * <p>
+	 * An <code>enum</code> of all environment entries (specified in the
+	 * web.xml) recognized by the implemenetation.
+	 * </p>
+	 */
+	public enum WebEnvironmentEntry
+	{
+
+		ClientStateSavingPassword("ClientStateSavingPassword"), ProjectStage(
+				javax.faces.application.ProjectStage.PROJECT_STAGE_JNDI_NAME);
+
+		private static final String JNDI_PREFIX = "java:comp/env/";
+		private String qualifiedName;
+
+		// ---------------------------------------------------------- Public
+		// Methods
+
+		public String getQualifiedName()
+		{
+
+			return qualifiedName;
+
+		}
+
+		// ------------------------------------------------- Package Private
+		// Methods
+
+		WebEnvironmentEntry(String qualifiedName)
+		{
+
+			if (qualifiedName.startsWith(JNDI_PREFIX))
+			{
+				this.qualifiedName = qualifiedName;
+			}
+			else
+			{
+				this.qualifiedName = JNDI_PREFIX + qualifiedName;
+			}
+
+		}
+
+	}
+
+	/**
+	 * <p>
+	 * An <code>enum</code> of all possible values for the
+	 * <code>disableUnicodeEscaping</code> configuration parameter.
+	 * </p>
+	 */
+	public enum DisableUnicodeEscaping
+	{
+		True("true"), False("false"), Auto("auto");
+
+		private final String value;
+
+		DisableUnicodeEscaping(String value)
+		{
+			this.value = value;
+		}
+
+		public static DisableUnicodeEscaping getByValue(String value)
+		{
+			for (DisableUnicodeEscaping disableUnicodeEscaping : DisableUnicodeEscaping
+					.values())
+			{
+				if (disableUnicodeEscaping.value.equals(value)) { return disableUnicodeEscaping; }
+			}
+
+			return null;
+		}
+	}
+
+} // END WebConfiguration
\ No newline at end of file

Added: trunk/examples/richfaces-showcase/src/main/resources/META-INF/jdoconfig.xml
===================================================================
--- trunk/examples/richfaces-showcase/src/main/resources/META-INF/jdoconfig.xml	                        (rev 0)
+++ trunk/examples/richfaces-showcase/src/main/resources/META-INF/jdoconfig.xml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">
+
+    <persistence-manager-factory name="transactions-optional">
+        <property name="javax.jdo.PersistenceManagerFactoryClass"
+            value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
+        <property name="javax.jdo.option.ConnectionURL" value="appengine"/>
+        <property name="javax.jdo.option.NontransactionalRead" value="true"/>
+        <property name="javax.jdo.option.NontransactionalWrite" value="true"/>
+        <property name="javax.jdo.option.RetainValues" value="true"/>
+        <property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
+    </persistence-manager-factory>
+</jdoconfig>

Added: trunk/examples/richfaces-showcase/src/main/resources/META-INF/persistence.xml
===================================================================
--- trunk/examples/richfaces-showcase/src/main/resources/META-INF/persistence.xml	                        (rev 0)
+++ trunk/examples/richfaces-showcase/src/main/resources/META-INF/persistence.xml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+             version="1.0">
+    <persistence-unit name="transactions-optional">
+        <provider>org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider</provider>
+        <properties>
+            <property name="datanucleus.NontransactionalRead" value="true"/>
+            <property name="datanucleus.NontransactionalWrite" value="true"/>
+            <property name="datanucleus.ConnectionURL" value="appengine"/>
+        </properties>
+    </persistence-unit>
+
+</persistence>
\ No newline at end of file

Added: trunk/examples/richfaces-showcase/src/main/resources/ant-macros.xml
===================================================================
--- trunk/examples/richfaces-showcase/src/main/resources/ant-macros.xml	                        (rev 0)
+++ trunk/examples/richfaces-showcase/src/main/resources/ant-macros.xml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -0,0 +1,106 @@
+<!--
+  This file contains useful Ant definitions for users of App Engine.
+  To use these macrodefs and taskdefs, import the file into your own build.xml:
+
+  <property name="appengine.sdk.dir" location="/some_dir/appengine-java-sdk-trunk"/>
+  <import file="${appengine.sdk.dir}/config/user/ant-macros.xml"/>
+
+  For example uses of the macros, see the template project's build.xml.
+ -->
+<project name="appengine-ant-macros">
+
+  <property name="appengine.sdk.home" location="${ant.file.appengine-ant-macros}../../../.."/>
+  <property name="appengine.tools.classpath" 
+            location="${appengine.sdk.home}/lib/appengine-tools-api.jar"/>
+
+  <!-- 
+    A macrodef for dev_appserver. Use like:
+    
+    <dev_appserver war="${war}"/>
+  -->
+  <macrodef name="dev_appserver" description="Runs the App Engine Development App Server">
+    <attribute name="war" description="The exploded war directory containing the application"/>
+    <attribute name="port" default="8080" description="The port the server starts on"/>
+    <attribute name="address" default="localhost" description="The interface the server binds to"/>
+    <element name="options" optional="true" description="Additional options for dev_appserver"/>
+    <element name="args" optional="true" description="Additional arguments for the java task"/>
+
+    <sequential>
+      <java classname="com.google.appengine.tools.KickStart"
+            classpath="${appengine.tools.classpath}"
+            fork="true">
+        <arg value="com.google.appengine.tools.development.DevAppServerMain"/>
+        <arg value="--port=@{port}"/>
+        <arg value="--address=@{address}"/>
+        <options/>
+        <arg value="@{war}"/>
+        <args/>
+      </java>
+    </sequential>
+  </macrodef>
+
+  <!-- 
+    A macrodef for appcfg. Use like:
+    
+    <appcfg action="update" war="${war}"/>
+
+  -->
+  <macrodef name="appcfg" description="Manages an application">
+    <attribute name="war" description="The exploded war directory containing the application"/>
+    <attribute name="action" description="One of (update, rollback, update_indexes, request_logs)"/>
+    <element name="options" optional="true" description="Options for appcfg (such as --server, --num_days, etc...)"/>
+    <element name="args" optional="true" description="Additional arguments for the java task"/>
+
+    <sequential>
+      <java classname="com.google.appengine.tools.admin.AppCfg"
+            classpath="${appengine.tools.classpath}"
+            fork="true">
+        <arg value="--disable_prompt"/>
+        <options/>
+        <arg value="@{action}"/>
+        <arg value="@{war}"/>
+        <args/>
+      </java>
+    </sequential>
+  </macrodef>
+
+  <!-- 
+    A taskdef for ORM enhancement. Use like:
+    
+    <enhance failonerror="true">
+      <classpath>
+        <pathelement path="${appengine.tools.classpath}"/>
+        <pathelement path="@{war}/WEB-INF/classes"/>
+        <fileset dir="@{war}/WEB-INF/lib" includes="*.jar"/>
+      </classpath>
+      <fileset dir="@{war}/WEB-INF/classes" includes="**/*.class"/>
+    </enhance>
+        
+    Alternatively, use the <enhance_war/> macrodef below.
+  -->
+  <taskdef name="enhance"
+           classpath="${appengine.tools.classpath}"
+           classname="com.google.appengine.tools.enhancer.EnhancerTask"/>
+
+  <!-- 
+    A macrodef for ORM enhancement for a war. Use like:
+     
+    <enhance_war war="${war}"/>  
+  -->
+  <macrodef name="enhance_war" description="Run the ORM enhancer on an exploded war">
+    <attribute name="war" description="The exploded war directory containing the application"/>
+    <element name="args" optional="true" description="Additional arguments to the enhancer"/>
+    <sequential>
+      <enhance failonerror="true">
+        <args/>
+        <classpath>
+          <pathelement path="${appengine.tools.classpath}"/>
+          <pathelement path="@{war}/WEB-INF/classes"/>
+          <fileset dir="@{war}/WEB-INF/lib" includes="*.jar"/>
+        </classpath>
+        <fileset dir="@{war}/WEB-INF/classes" includes="**/*.class"/>
+      </enhance>
+    </sequential>
+  </macrodef>
+
+</project>

Added: trunk/examples/richfaces-showcase/src/main/resources/log4j.properties
===================================================================
--- trunk/examples/richfaces-showcase/src/main/resources/log4j.properties	                        (rev 0)
+++ trunk/examples/richfaces-showcase/src/main/resources/log4j.properties	2010-08-20 15:54:52 UTC (rev 18853)
@@ -0,0 +1,24 @@
+# A default log4j configuration for log4j users.
+#
+# To use this configuration, deploy it into your application's WEB-INF/classes
+# directory.  You are also encouraged to edit it as you like.
+
+# Configure the console as our one appender
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] - %m%n
+
+# tighten logging on the DataNucleus Categories
+log4j.category.DataNucleus.JDO=WARN, A1
+log4j.category.DataNucleus.Persistence=WARN, A1
+log4j.category.DataNucleus.Cache=WARN, A1
+log4j.category.DataNucleus.MetaData=WARN, A1
+log4j.category.DataNucleus.General=WARN, A1
+log4j.category.DataNucleus.Utility=WARN, A1
+log4j.category.DataNucleus.Transaction=WARN, A1
+log4j.category.DataNucleus.Datastore=WARN, A1
+log4j.category.DataNucleus.ClassLoading=WARN, A1
+log4j.category.DataNucleus.Plugin=WARN, A1
+log4j.category.DataNucleus.ValueGeneration=WARN, A1
+log4j.category.DataNucleus.Enhancer=WARN, A1
+log4j.category.DataNucleus.SchemaTool=WARN, A1

Added: trunk/examples/richfaces-showcase/src/main/resources/logging.properties
===================================================================
--- trunk/examples/richfaces-showcase/src/main/resources/logging.properties	                        (rev 0)
+++ trunk/examples/richfaces-showcase/src/main/resources/logging.properties	2010-08-20 15:54:52 UTC (rev 18853)
@@ -0,0 +1,28 @@
+# A default java.util.logging configuration.
+# (All App Engine logging is through java.util.logging by default).
+#
+# To use this configuration, copy it into your application's WEB-INF
+# folder and add the following to your appengine-web.xml:
+# 
+# <system-properties>
+#   <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
+# </system-properties>
+#
+
+# Set the default logging level for all loggers to WARNING
+.level = WARNING
+
+# Set the default logging level for ORM, specifically, to WARNING
+DataNucleus.JDO.level=WARNING
+DataNucleus.Persistence.level=WARNING
+DataNucleus.Cache.level=WARNING
+DataNucleus.MetaData.level=WARNING
+DataNucleus.General.level=WARNING
+DataNucleus.Utility.level=WARNING
+DataNucleus.Transaction.level=WARNING
+DataNucleus.Datastore.level=WARNING
+DataNucleus.ClassLoading.level=WARNING
+DataNucleus.Plugin.level=WARNING
+DataNucleus.ValueGeneration.level=WARNING
+DataNucleus.Enhancer.level=WARNING
+DataNucleus.SchemaTool.level=WARNING

Modified: trunk/examples/richfaces-showcase/src/main/resources/org/richfaces/demo/data/common/navigation.xml
===================================================================
--- trunk/examples/richfaces-showcase/src/main/resources/org/richfaces/demo/data/common/navigation.xml	2010-08-20 15:10:07 UTC (rev 18852)
+++ trunk/examples/richfaces-showcase/src/main/resources/org/richfaces/demo/data/common/navigation.xml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -162,7 +162,7 @@
 					</sample>
 				</samples>
 			</demo>
-			<demo>
+			<demo new="true">
 				<id>mediaOutput</id>
 				<name>a4j:mediaOutput</name>
 				<samples>

Added: trunk/examples/richfaces-showcase/src/main/webapp/WEB-INF/appengine-web.xml
===================================================================
--- trunk/examples/richfaces-showcase/src/main/webapp/WEB-INF/appengine-web.xml	                        (rev 0)
+++ trunk/examples/richfaces-showcase/src/main/webapp/WEB-INF/appengine-web.xml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
+    <application>richfaces-showcase-gae</application>
+    <version>8</version>
+    <sessions-enabled>true</sessions-enabled>
+    
+    <system-properties>
+        <property name="java.util.logging.config.file" value="WEB-INF/classes/logging.properties"/>
+    </system-properties>
+
+</appengine-web-app>

Modified: trunk/examples/richfaces-showcase/src/main/webapp/WEB-INF/web.xml
===================================================================
--- trunk/examples/richfaces-showcase/src/main/webapp/WEB-INF/web.xml	2010-08-20 15:10:07 UTC (rev 18852)
+++ trunk/examples/richfaces-showcase/src/main/webapp/WEB-INF/web.xml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -1,49 +1,52 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="richfaces-showcase" version="2.5">
-  <display-name>richfaces-showcase</display-name>
-  <welcome-file-list>
-    <welcome-file>index.html</welcome-file>
-    <welcome-file>index.htm</welcome-file>
-    <welcome-file>index.jsp</welcome-file>
-    <welcome-file>default.html</welcome-file>
-    <welcome-file>default.htm</welcome-file>
-    <welcome-file>default.jsp</welcome-file>
-  </welcome-file-list>
-     <context-param>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+    id="richfaces-showcase" version="2.5">
+    <display-name>richfaces-showcase</display-name>
+    <welcome-file-list>
+        <welcome-file>index.html</welcome-file>
+        <welcome-file>index.htm</welcome-file>
+        <welcome-file>index.jsp</welcome-file>
+        <welcome-file>default.html</welcome-file>
+        <welcome-file>default.htm</welcome-file>
+        <welcome-file>default.jsp</welcome-file>
+    </welcome-file-list>
+    <context-param>
         <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
         <param-value>/WEB-INF/app-tags.taglib.xml</param-value>
     </context-param>
-  <context-param>
-	<param-name>org.richfaces.enableControlSkinning</param-name>
-    <param-value>true</param-value>
-  </context-param>
-  <context-param>
-	<param-name>org.richfaces.enableControlSkinningClasses</param-name>
-    <param-value>false</param-value>
-  </context-param>
-  <context-param>
-    <param-name>org.richfaces.skin</param-name>
-    <param-value>#{skinBean.skin}</param-value>
-  </context-param>
-  <context-param>
-    <param-name>javax.faces.PROJECT_STAGE</param-name>
-    <param-value>Development</param-value>
-  </context-param>
-	<context-param>
-		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-		<param-value>server</param-value>
-	</context-param>  
-  <servlet>
-    <servlet-name>Faces Servlet</servlet-name>
-    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>Faces Servlet</servlet-name>
-    <url-pattern>*.jsf</url-pattern>
-  </servlet-mapping>
-  <servlet-mapping>
-    <servlet-name>Faces Servlet</servlet-name>
-    <url-pattern>/faces/*</url-pattern>
-  </servlet-mapping>
+    <context-param>
+        <param-name>org.richfaces.enableControlSkinning</param-name>
+        <param-value>true</param-value>
+    </context-param>
+    <context-param>
+        <param-name>org.richfaces.enableControlSkinningClasses</param-name>
+        <param-value>false</param-value>
+    </context-param>
+    <context-param>
+        <param-name>org.richfaces.skin</param-name>
+        <param-value>#{skinBean.skin}</param-value>
+    </context-param>
+    <context-param>
+        <param-name>javax.faces.PROJECT_STAGE</param-name>
+        <param-value>Development</param-value>
+    </context-param>
+    <context-param>
+        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
+        <param-value>server</param-value>
+    </context-param>
+    <servlet>
+        <servlet-name>Faces Servlet</servlet-name>
+        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>Faces Servlet</servlet-name>
+        <url-pattern>*.jsf</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>Faces Servlet</servlet-name>
+        <url-pattern>/faces/*</url-pattern>
+    </servlet-mapping>
 </web-app>
\ No newline at end of file

Copied: trunk/examples/richfaces-showcase/src/main/webapp/richfaces/mediaOutput/image (from rev 18841, branches/RF-7939-showcase/src/main/webapp/richfaces/mediaOutput/image)

Deleted: trunk/examples/richfaces-showcase/src/main/webapp/richfaces/mediaOutput/image/source.png
===================================================================
(Binary files differ)

Copied: trunk/examples/richfaces-showcase/src/main/webapp/richfaces/mediaOutput/image/source.png (from rev 18841, branches/RF-7939-showcase/src/main/webapp/richfaces/mediaOutput/image/source.png)
===================================================================
(Binary files differ)

Modified: trunk/examples/richfaces-showcase/src/main/webapp/richfaces/mediaOutput/imgUsage.xhtml
===================================================================
--- trunk/examples/richfaces-showcase/src/main/webapp/richfaces/mediaOutput/imgUsage.xhtml	2010-08-20 15:10:07 UTC (rev 18852)
+++ trunk/examples/richfaces-showcase/src/main/webapp/richfaces/mediaOutput/imgUsage.xhtml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -9,9 +9,9 @@
 	other binary resources defined by a user on-the-fly.</p>
 	<p><b>createContent</b> attribute references to the method that
 	will be used for content creating. The method accepts two parameters.
-	The first parameter has an OutputStream type. It is a reference to the
-	steam that should be used for output. The second parameter is a
-	reference to a 'value' attribute of the component.</p>
+	The first parameter has an <b>OutputStream </b>type. It is a reference
+	to the steam that should be used for output. The second parameter is a
+	reference to a '<b>value</b>' attribute of the component.</p>
 	<p><b>value</b> attribute references to data that can be used as
 	input data for a content creator method. The data should be
 	serializable because it is encoded to the URL of the resource.</p>
@@ -23,7 +23,10 @@
 	cached. If it is set to true, it will be cached and the serialized
 	value of 'value' attribute plays the role of a cache key.</p>
 
-	<p>Dynamically generated JPEG file:</p>
+	<p>As <b>Google Application Engine restricts AWT classes usage</b> - in
+	this sample we <b>reading existent image and performing just re-indexing of the
+	palette</b> using colors you selected below. So try to change the color and
+	click process.</p>
 	<ui:include src="#{demoNavigator.sampleIncludeURI}" />
 	<ui:include src="/templates/includes/source-view.xhtml">
 		<ui:param name="src" value="#{demoNavigator.sampleIncludeURI}" />

Modified: trunk/examples/richfaces-showcase/src/main/webapp/richfaces/mediaOutput/samples/imgUsage-sample.xhtml
===================================================================
--- trunk/examples/richfaces-showcase/src/main/webapp/richfaces/mediaOutput/samples/imgUsage-sample.xhtml	2010-08-20 15:10:07 UTC (rev 18852)
+++ trunk/examples/richfaces-showcase/src/main/webapp/richfaces/mediaOutput/samples/imgUsage-sample.xhtml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -5,8 +5,38 @@
 	xmlns:ui="http://java.sun.com/jsf/facelets"
 	xmlns:a4j="http://richfaces.org/a4j"
 	xmlns:rich="http://richfaces.org/rich">
-	<a4j:mediaOutput element="img" cacheable="false" session="true"
-		createContent="#{mediaBean.paint}" value="#{mediaData}"
-		mimeType="image/jpeg" />
-
+	<h:form>
+		<h:panelGrid columns="6">
+			<h:outputText value="Color 1" />
+			<h:selectOneMenu value="#{mediaData.colorIndex1}">
+				<f:selectItem itemLabel="Red" itemValue="0"/>
+				<f:selectItem itemLabel="Dark Blue" itemValue="1"/>
+				<f:selectItem itemLabel="Green" itemValue="2"/>
+				<f:selectItem itemLabel="Yellow" itemValue="3"/>
+				<f:selectItem itemLabel="Blue" itemValue="4"/>				
+			</h:selectOneMenu>
+			<h:outputText value="Color 1" />
+			<h:selectOneMenu value="#{mediaData.colorIndex2}">
+				<f:selectItem itemLabel="Red" itemValue="0"/>
+				<f:selectItem itemLabel="Dark Blue" itemValue="1"/>
+				<f:selectItem itemLabel="Green" itemValue="2"/>
+				<f:selectItem itemLabel="Yellow" itemValue="3"/>
+				<f:selectItem itemLabel="Blue" itemValue="4"/>						
+			</h:selectOneMenu>
+			<h:outputText value="Color 1" />
+			<h:selectOneMenu value="#{mediaData.colorIndex3}">
+				<f:selectItem itemLabel="Red" itemValue="0"/>
+				<f:selectItem itemLabel="Dark Blue" itemValue="1"/>
+				<f:selectItem itemLabel="Green" itemValue="2"/>
+				<f:selectItem itemLabel="Yellow" itemValue="3"/>
+				<f:selectItem itemLabel="Blue" itemValue="4"/>					
+			</h:selectOneMenu>
+			<f:facet name="footer">
+				<a4j:commandButton value="Process the image" render="img" execute="@form"/>
+			</f:facet>
+		</h:panelGrid>
+		<a4j:mediaOutput element="img" cacheable="false" session="true" id="img"
+			createContent="#{mediaBean.process}" value="#{mediaData}"
+			mimeType="image/jpeg" />
+	</h:form>
 </ui:composition>
\ No newline at end of file

Modified: trunk/examples/richfaces-showcase/src/main/webapp/richfaces/push/samples/push-sample.xhtml
===================================================================
--- trunk/examples/richfaces-showcase/src/main/webapp/richfaces/push/samples/push-sample.xhtml	2010-08-20 15:10:07 UTC (rev 18852)
+++ trunk/examples/richfaces-showcase/src/main/webapp/richfaces/push/samples/push-sample.xhtml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -25,27 +25,38 @@
 			</h:column>
 		</h:dataTable>
 
-		<a4j:jsFunction name="startPush" action="#{choicesBean.start}"
-			execute="@this" render="push, stop, start" />
-		<a4j:jsFunction name="stopPush" action="#{choicesBean.stop}"
-			execute="@this" render="push, stop, start" />
-
-		<h:commandButton onclick="startPush()" value="Start" id="start"
-			disabled="#{choicesBean.enabled}" type="button" />
-
-		<h:commandButton onclick="stopPush()" type="button" value="Stop"
-			id="stop" disabled="#{!choicesBean.enabled}" />
-
 		<a4j:outputPanel layout="block" id="tempResults">
 			<h:outputText
 				value="Latest update votes was: #{choicesBean.updateInfo} at #{choicesBean.timeStamp}"
 				rendered="#{choicesBean.enabled}" />
+			<h:outputText style="color:red"
+				value="The push has been disabled automatically after 3 minutes of working. Please refresh the page."
+				rendered="#{!choicesBean.enabled}" />
 		</a4j:outputPanel>
-
+		
+		<fieldset>
+			<legend><b>Firing event</b></legend> 
+			<a4j:commandLink style="font-weight:bold;"
+				value="Initiate server Event" id="initiate"
+				disabled="#{!choicesBean.enabled}" render="@none"
+				action="#{choicesBean.initiateEvent}" />
+		<p>Pay attention that this link has <b>@none value in render</b> so it's actually not performs any updates.
+		It's just <b>queues server side event</b> which will be <b>fetched by push</b> component and processed</p>
+		</fieldset>
+		
 		<a4j:push enabled="#{choicesBean.enabled}" interval="1000"
 			eventProducer="#{choicesBean.addListener}" id="push"
-			action="#{choicesBean.processUpdates}">
-			<a4j:ajax render="choiceVotes push tempResults" />
-		</a4j:push>
+			action="#{choicesBean.processUpdates}"
+			render="choiceVotes push tempResults" />
+
 	</h:form>
+
+	<h:form>
+		<!-- This poll used only to expire push after a minute of working. Done in order not 
+		to flood the server with the requests from pages "forgotten" to be closed before 
+		weekends :)-->
+		<a4j:poll interval="180000" action="#{choicesBean.stop}"
+			enabled="#{choicesBean.enabled}"
+			render="push start initiate poll tempResults" id="poll" />
+	</h:form>
 </ui:composition>
\ No newline at end of file

Modified: trunk/examples/richfaces-showcase/src/main/webapp/templates/main.xhtml
===================================================================
--- trunk/examples/richfaces-showcase/src/main/webapp/templates/main.xhtml	2010-08-20 15:10:07 UTC (rev 18852)
+++ trunk/examples/richfaces-showcase/src/main/webapp/templates/main.xhtml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -30,9 +30,9 @@
 							<h:outputText value=" | "/>
 							<h:outputLink value="http://community.jboss.org/community/richfaces">RichFaces Community Space</h:outputLink>
 							<h:outputText value=" | "/>
-							<h:outputLink value="http://downloads.jboss.org/richfaces/milestones/4.0.X/4.0.0.ALPHA2/richfaces-4.0.0.ALPHA2.zip">Download</h:outputLink>													
+							<h:outputLink value="http://jboss.org/richfaces/download/milestones.html">Download</h:outputLink>													
 							<h:outputText value=" | "/>
-							<h:outputLink value="http://anonsvn.jboss.org/repos/richfaces/root/examples/richfaces-showcase/">Sources</h:outputLink>													
+							<h:outputLink value="http://anonsvn.jboss.org/repos/richfaces/trunk/examples/richfaces-showcase/">Sources</h:outputLink>													
 						</td>
 					</tr>
 					<tr>

Copied: trunk/examples/richfaces-showcase/src/main/webapp-gae (from rev 18841, branches/RF-7939-showcase/src/main/webapp-gae)

Copied: trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF (from rev 18841, branches/RF-7939-showcase/src/main/webapp-gae/WEB-INF)

Deleted: trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/appengine-web.xml
===================================================================
--- branches/RF-7939-showcase/src/main/webapp-gae/WEB-INF/appengine-web.xml	2010-08-20 10:41:27 UTC (rev 18841)
+++ trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/appengine-web.xml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
-    <application>richfaces-showcase-gae</application>
-    <version>11</version>
-    <sessions-enabled>true</sessions-enabled>
-    
-    <system-properties>
-        <property name="java.util.logging.config.file" value="WEB-INF/classes/logging.properties"/>
-    </system-properties>
-
-</appengine-web-app>

Copied: trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/appengine-web.xml (from rev 18841, branches/RF-7939-showcase/src/main/webapp-gae/WEB-INF/appengine-web.xml)
===================================================================
--- trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/appengine-web.xml	                        (rev 0)
+++ trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/appengine-web.xml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
+    <application>richfaces-showcase-gae</application>
+    <version>11</version>
+    <sessions-enabled>true</sessions-enabled>
+    
+    <system-properties>
+        <property name="java.util.logging.config.file" value="WEB-INF/classes/logging.properties"/>
+    </system-properties>
+
+</appengine-web-app>

Deleted: trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/web.xml
===================================================================
--- branches/RF-7939-showcase/src/main/webapp-gae/WEB-INF/web.xml	2010-08-20 10:41:27 UTC (rev 18841)
+++ trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/web.xml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
-    id="richfaces-showcase" version="2.5">
-    <display-name>richfaces-showcase-gae</display-name>
-    <welcome-file-list>
-        <welcome-file>index.html</welcome-file>
-        <welcome-file>index.htm</welcome-file>
-        <welcome-file>index.jsp</welcome-file>
-        <welcome-file>default.html</welcome-file>
-        <welcome-file>default.htm</welcome-file>
-        <welcome-file>default.jsp</welcome-file>
-    </welcome-file-list>
-    <context-param>
-        <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
-        <param-value>/WEB-INF/app-tags.taglib.xml</param-value>
-    </context-param>
-    <context-param>
-        <param-name>org.richfaces.enableControlSkinning</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <context-param>
-        <param-name>org.richfaces.enableControlSkinningClasses</param-name>
-        <param-value>false</param-value>
-    </context-param>
-    <context-param>
-        <param-name>org.richfaces.skin</param-name>
-        <param-value>#{skinBean.skin}</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.PROJECT_STAGE</param-name>
-        <param-value>Development</param-value>
-    </context-param>
-    <context-param>
-        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>server</param-value>
-    </context-param>
-    <context-param>
-        <param-name>org.richfaces.staticResourceLocation</param-name>
-        <param-value>#{facesContext.externalContext.requestContextPath}/static-resources/#{resourceLocation}</param-value>
-    </context-param>
-    
-    <context-param>
-        <param-name>org.ajax4jsf.cache.CACHE_MANAGER_FACTORY_CLASS</param-name>
-        <param-value>org.ajax4jsf.cache.lru.LRUMapCacheFactory</param-value>
-    </context-param>
-    
-    <context-param>
-        <description>
-      Set this flag to true if you want the JavaServer Faces
-      Reference Implementation to validate the XML in your
-      faces-config.xml resources against the DTD. Default
-      value is false.
-    </description>
-        <param-name>com.sun.faces.validateXml</param-name>
-        <param-value>true</param-value>
-    </context-param>
-    <!-- ***** Accommodate Single-Threaded Requirement of Google AppEngine -->
-    <context-param>
-        <description>
-      When enabled, the runtime initialization and default ResourceHandler
-      implementation will use threads to perform their functions. Set this 
-      value to false if threads aren't desired (as in the case of running 
-      within the Google Application Engine).
-
-      Note that when this option is disabled, the ResourceHandler will not 
-      pick up new versions of resources when ProjectStage is development.
-    </description>
-        <param-name>com.sun.faces.enableThreading</param-name>
-        <param-value>false</param-value>
-    </context-param>
-    <context-param>
-        <param-name>com.sun.faces.expressionFactory</param-name>
-        <param-value>com.sun.el.ExpressionFactoryImpl</param-value>
-    </context-param>
-    <context-param>
-        <param-name>org.richfaces.executeAWTInitializer</param-name>
-        <param-value>false</param-value>
-    </context-param>
-    <servlet>
-        <servlet-name>Faces Servlet</servlet-name>
-        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>*.jsf</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Faces Servlet</servlet-name>
-        <url-pattern>/faces/*</url-pattern>
-    </servlet-mapping>
-</web-app>
\ No newline at end of file

Copied: trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/web.xml (from rev 18841, branches/RF-7939-showcase/src/main/webapp-gae/WEB-INF/web.xml)
===================================================================
--- trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/web.xml	                        (rev 0)
+++ trunk/examples/richfaces-showcase/src/main/webapp-gae/WEB-INF/web.xml	2010-08-20 15:54:52 UTC (rev 18853)
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+    id="richfaces-showcase" version="2.5">
+    <display-name>richfaces-showcase-gae</display-name>
+    <welcome-file-list>
+        <welcome-file>index.html</welcome-file>
+        <welcome-file>index.htm</welcome-file>
+        <welcome-file>index.jsp</welcome-file>
+        <welcome-file>default.html</welcome-file>
+        <welcome-file>default.htm</welcome-file>
+        <welcome-file>default.jsp</welcome-file>
+    </welcome-file-list>
+    <context-param>
+        <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
+        <param-value>/WEB-INF/app-tags.taglib.xml</param-value>
+    </context-param>
+    <context-param>
+        <param-name>org.richfaces.enableControlSkinning</param-name>
+        <param-value>true</param-value>
+    </context-param>
+    <context-param>
+        <param-name>org.richfaces.enableControlSkinningClasses</param-name>
+        <param-value>false</param-value>
+    </context-param>
+    <context-param>
+        <param-name>org.richfaces.skin</param-name>
+        <param-value>#{skinBean.skin}</param-value>
+    </context-param>
+    <context-param>
+        <param-name>javax.faces.PROJECT_STAGE</param-name>
+        <param-value>Development</param-value>
+    </context-param>
+    <context-param>
+        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
+        <param-value>server</param-value>
+    </context-param>
+    <context-param>
+        <param-name>org.richfaces.staticResourceLocation</param-name>
+        <param-value>#{facesContext.externalContext.requestContextPath}/static-resources/#{resourceLocation}</param-value>
+    </context-param>
+    
+    <context-param>
+        <param-name>org.ajax4jsf.cache.CACHE_MANAGER_FACTORY_CLASS</param-name>
+        <param-value>org.ajax4jsf.cache.lru.LRUMapCacheFactory</param-value>
+    </context-param>
+    
+    <context-param>
+        <description>
+      Set this flag to true if you want the JavaServer Faces
+      Reference Implementation to validate the XML in your
+      faces-config.xml resources against the DTD. Default
+      value is false.
+    </description>
+        <param-name>com.sun.faces.validateXml</param-name>
+        <param-value>true</param-value>
+    </context-param>
+    <!-- ***** Accommodate Single-Threaded Requirement of Google AppEngine -->
+    <context-param>
+        <description>
+      When enabled, the runtime initialization and default ResourceHandler
+      implementation will use threads to perform their functions. Set this 
+      value to false if threads aren't desired (as in the case of running 
+      within the Google Application Engine).
+
+      Note that when this option is disabled, the ResourceHandler will not 
+      pick up new versions of resources when ProjectStage is development.
+    </description>
+        <param-name>com.sun.faces.enableThreading</param-name>
+        <param-value>false</param-value>
+    </context-param>
+    <context-param>
+        <param-name>com.sun.faces.expressionFactory</param-name>
+        <param-value>com.sun.el.ExpressionFactoryImpl</param-value>
+    </context-param>
+    <context-param>
+        <param-name>org.richfaces.executeAWTInitializer</param-name>
+        <param-value>false</param-value>
+    </context-param>
+    <servlet>
+        <servlet-name>Faces Servlet</servlet-name>
+        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>Faces Servlet</servlet-name>
+        <url-pattern>*.jsf</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>Faces Servlet</servlet-name>
+        <url-pattern>/faces/*</url-pattern>
+    </servlet-mapping>
+</web-app>
\ No newline at end of file



More information about the richfaces-svn-commits mailing list