Author: nbelaevski
Date: 2010-07-28 15:23:56 -0400 (Wed, 28 Jul 2010)
New Revision: 18266
Added:
root/examples-sandbox/trunk/richfaces-showcase-gae/
root/examples-sandbox/trunk/richfaces-showcase-gae/pom.xml
root/examples-sandbox/trunk/richfaces-showcase-gae/src/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/assembly/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/assembly/assembly.xml
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/com/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/com/sun/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/com/sun/faces/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/com/sun/faces/config/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/com/sun/faces/config/WebConfiguration.java
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/org/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/org/richfaces/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/org/richfaces/examples/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/org/richfaces/examples/App.java
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/META-INF/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/META-INF/jdoconfig.xml
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/META-INF/persistence.xml
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/ant-macros.xml
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/log4j.properties
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/logging.properties
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/webapp/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/webapp/WEB-INF/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/webapp/WEB-INF/appengine-web.xml
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/webapp/WEB-INF/web.xml
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/webapp/index.jsp
root/examples-sandbox/trunk/richfaces-showcase-gae/src/test/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/test/java/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/test/java/org/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/test/java/org/richfaces/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/test/java/org/richfaces/examples/
root/examples-sandbox/trunk/richfaces-showcase-gae/src/test/java/org/richfaces/examples/AppBaseTest.java
root/examples-sandbox/trunk/richfaces-showcase-gae/src/test/java/org/richfaces/examples/TestEnvironment.java
Log:
richfaces-showcase-gae stub initial check-in
Added: root/examples-sandbox/trunk/richfaces-showcase-gae/pom.xml
===================================================================
--- root/examples-sandbox/trunk/richfaces-showcase-gae/pom.xml
(rev 0)
+++ root/examples-sandbox/trunk/richfaces-showcase-gae/pom.xml 2010-07-28 19:23:56 UTC
(rev 18266)
@@ -0,0 +1,247 @@
+<?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/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>examples-sandbox</artifactId>
+ <groupId>org.richfaces</groupId>
+ <version>4.0.0-SNAPSHOT</version>
+ </parent>
+
+ <!-- The Basics -->
+ <groupId>org.richfaces.examples-sandbox</groupId>
+ <artifactId>richfaces-showcase-gae</artifactId>
+ <version>4.0.0-SNAPSHOT</version>
+ <packaging>war</packaging>
+
+ <properties>
+ <gae.version>1.3.2</gae.version>
+ <project_charset>UTF-8</project_charset>
+ </properties>
+
+ <dependencies>
+ <!--unit test related dependencies -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.appengine</groupId>
+ <artifactId>appengine-api-1.0-labs</artifactId>
+ <version>${gae.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.appengine</groupId>
+ <artifactId>appengine-api-1.0-stubs</artifactId>
+ <version>${gae.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.appengine</groupId>
+ <artifactId>appengine-api-1.0-runtime</artifactId>
+ <version>${gae.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.appengine</groupId>
+ <artifactId>appengine-tools-sdk</artifactId>
+ <version>${gae.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <!--servlet and jsp api -->
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jsp-api</artifactId>
+ <version>2.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <!--app engine related dependencies -->
+ <dependency>
+ <groupId>com.google.appengine</groupId>
+ <artifactId>appengine-api-1.0-sdk</artifactId>
+ <version>${gae.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.appengine.orm</groupId>
+ <artifactId>datanucleus-appengine</artifactId>
+ <version>1.0.6</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jta_1.1_spec</artifactId>
+ <version>1.1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jpa_3.0_spec</artifactId>
+ <version>1.1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.jdo</groupId>
+ <artifactId>jdo2-api</artifactId>
+ <version>2.3-eb</version>
+ </dependency>
+ <dependency>
+ <groupId>org.datanucleus</groupId>
+ <artifactId>datanucleus-core</artifactId>
+ <version>1.1.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.datanucleus</groupId>
+ <artifactId>datanucleus-jpa</artifactId>
+ <version>1.1.5</version>
+ </dependency>
+ <!--jstl -->
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jstl</artifactId>
+ <version>1.1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>taglibs</groupId>
+ <artifactId>standard</artifactId>
+ <version>1.1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.faces</groupId>
+ <artifactId>jsf-api</artifactId>
+ <version>2.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.faces</groupId>
+ <artifactId>jsf-impl</artifactId>
+ <version>2.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.el</groupId>
+ <artifactId>jboss-el</artifactId>
+ <version>2.0.2.CR1</version>
+ <type>jar</type>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.5</version>
+ <type>jar</type>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.richfaces.examples</groupId>
+ <artifactId>richfaces-showcase</artifactId>
+ <version>4.0.0-SNAPSHOT</version>
+ <type>war</type>
+ </dependency>
+ </dependencies>
+
+ <!-- Build Settings -->
+ <build>
+ <finalName>richfaces-showcase-gae</finalName>
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ <resource>
+ <directory>src/main/java</directory>
+ <includes>
+ <include>**/*.xml</include>
+ </includes>
+ </resource>
+ </resources>
+ <testResources>
+ <testResource>
+ <directory>src/test/resources</directory>
+ </testResource>
+ <testResource>
+ <directory>src/test/java</directory>
+ <includes>
+ <include>**/*.xml</include>
+ </includes>
+ </testResource>
+ </testResources>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <descriptor>src/assembly/assembly.xml</descriptor>
+ </configuration>
+ <executions>
+ <execution>
+ <id>assemble</id>
+ <goals>
+ <goal>directory-single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <outputEncoding>${project_charset}</outputEncoding>
+ <inputEncoding>${project_charset}</inputEncoding>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>net.kindleit</groupId>
+ <artifactId>maven-gae-plugin</artifactId>
+ <version>0.5.6</version>
+ <configuration>
+ <port>81</port>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <repositories>
+ <repository>
+ <id>mvnsearch</id>
+ <
url>http://www.mvnsearch.org/maven2</url>
+ </repository>
+ <repository>
+ <id>datanucleus</id>
+ <
url>http://www.datanucleus.org/downloads/maven2</url>
+ </repository>
+ <repository>
+ <id>gae-plugin</id>
+ <
url>http://maven-gae-plugin.googlecode.com/svn/repository</url>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>datanucleus</id>
+ <
url>http://www.datanucleus.org/downloads/maven2</url>
+ </pluginRepository>
+ <pluginRepository>
+ <id>gae-plugin</id>
+ <
url>http://maven-gae-plugin.googlecode.com/svn/repository</url>
+ </pluginRepository>
+ <pluginRepository>
+ <id>mvnsearch</id>
+ <
url>http://www.mvnsearch.org/maven2</url>
+ </pluginRepository>
+ </pluginRepositories>
+</project>
Added: root/examples-sandbox/trunk/richfaces-showcase-gae/src/assembly/assembly.xml
===================================================================
--- root/examples-sandbox/trunk/richfaces-showcase-gae/src/assembly/assembly.xml
(rev 0)
+++
root/examples-sandbox/trunk/richfaces-showcase-gae/src/assembly/assembly.xml 2010-07-28
19:23:56 UTC (rev 18266)
@@ -0,0 +1,11 @@
+<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembl...
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-p...
http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <dependencySets>
+ <dependencySet>
+ <includes>
+ <include>*:war</include>
+ </includes>
+ </dependencySet>
+ </dependencySets>
+</assembly>
\ No newline at end of file
Added:
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/com/sun/faces/config/WebConfiguration.java
===================================================================
---
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/com/sun/faces/config/WebConfiguration.java
(rev 0)
+++
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/com/sun/faces/config/WebConfiguration.java 2010-07-28
19:23:56 UTC (rev 18266)
@@ -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:
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/org/richfaces/examples/App.java
===================================================================
---
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/org/richfaces/examples/App.java
(rev 0)
+++
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/java/org/richfaces/examples/App.java 2010-07-28
19:23:56 UTC (rev 18266)
@@ -0,0 +1,13 @@
+package org.richfaces.examples;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
Added:
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/META-INF/jdoconfig.xml
===================================================================
---
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/META-INF/jdoconfig.xml
(rev 0)
+++
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/META-INF/jdoconfig.xml 2010-07-28
19:23:56 UTC (rev 18266)
@@ -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/jdocon...
+
+ <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:
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/META-INF/persistence.xml
===================================================================
---
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/META-INF/persistence.xml
(rev 0)
+++
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/META-INF/persistence.xml 2010-07-28
19:23:56 UTC (rev 18266)
@@ -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:
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/ant-macros.xml
===================================================================
--- root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/ant-macros.xml
(rev 0)
+++
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/ant-macros.xml 2010-07-28
19:23:56 UTC (rev 18266)
@@ -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:
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/log4j.properties
===================================================================
---
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/log4j.properties
(rev 0)
+++
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/log4j.properties 2010-07-28
19:23:56 UTC (rev 18266)
@@ -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:
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/logging.properties
===================================================================
---
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/logging.properties
(rev 0)
+++
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/resources/logging.properties 2010-07-28
19:23:56 UTC (rev 18266)
@@ -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
Added:
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/webapp/WEB-INF/appengine-web.xml
===================================================================
---
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/webapp/WEB-INF/appengine-web.xml
(rev 0)
+++
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/webapp/WEB-INF/appengine-web.xml 2010-07-28
19:23:56 UTC (rev 18266)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<appengine-web-app
xmlns="http://appengine.google.com/ns/1.0">
+ <application>richfaces-showcase-gae</application>
+ <version>3</version>
+
+ <system-properties>
+ <property name="java.util.logging.config.file"
value="WEB-INF/classes/logging.properties"/>
+ </system-properties>
+
+</appengine-web-app>
Added: root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/webapp/WEB-INF/web.xml
===================================================================
--- root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/webapp/WEB-INF/web.xml
(rev 0)
+++
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/webapp/WEB-INF/web.xml 2010-07-28
19:23:56 UTC (rev 18266)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ version="2.5">
+
+ <welcome-file-list>
+ <welcome-file>index.jsp</welcome-file>
+ <welcome-file>index.html</welcome-file>
+ </welcome-file-list>
+
+</web-app>
Added: root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/webapp/index.jsp
===================================================================
--- root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/webapp/index.jsp
(rev 0)
+++
root/examples-sandbox/trunk/richfaces-showcase-gae/src/main/webapp/index.jsp 2010-07-28
19:23:56 UTC (rev 18266)
@@ -0,0 +1,9 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Welcome</title>
+</head>
+<body>
+Welcome to Google App Engine for Java!
+</body>
+</html>
\ No newline at end of file
Added:
root/examples-sandbox/trunk/richfaces-showcase-gae/src/test/java/org/richfaces/examples/AppBaseTest.java
===================================================================
---
root/examples-sandbox/trunk/richfaces-showcase-gae/src/test/java/org/richfaces/examples/AppBaseTest.java
(rev 0)
+++
root/examples-sandbox/trunk/richfaces-showcase-gae/src/test/java/org/richfaces/examples/AppBaseTest.java 2010-07-28
19:23:56 UTC (rev 18266)
@@ -0,0 +1,38 @@
+package org.richfaces.examples;
+
+//import com.google.appengine.tools.development.ApiProxyLocalImpl;
+import com.google.apphosting.api.ApiProxy;
+import junit.framework.TestCase;
+
+import java.io.File;
+
+/**
+ * local service test
+ */
+public class AppBaseTest extends TestCase {
+
+ /**
+ * setup env
+ *
+ * @throws Exception exception
+ */
+ @Override
+ public void setUp() throws Exception {
+// ApiProxy.setEnvironmentForCurrentThread(new TestEnvironment());
+// ApiProxy.setDelegate(new ApiProxyLocalImpl(new File(".")) {
+// });
+ }
+
+ /**
+ * cleanup
+ *
+ * @throws Exception exception
+ */
+ @Override
+ public void tearDown() throws Exception {
+// ApiProxy.setDelegate(null);
+// ApiProxy.setEnvironmentForCurrentThread(null);
+ }
+
+
+}
\ No newline at end of file
Added:
root/examples-sandbox/trunk/richfaces-showcase-gae/src/test/java/org/richfaces/examples/TestEnvironment.java
===================================================================
---
root/examples-sandbox/trunk/richfaces-showcase-gae/src/test/java/org/richfaces/examples/TestEnvironment.java
(rev 0)
+++
root/examples-sandbox/trunk/richfaces-showcase-gae/src/test/java/org/richfaces/examples/TestEnvironment.java 2010-07-28
19:23:56 UTC (rev 18266)
@@ -0,0 +1,59 @@
+package org.richfaces.examples;
+
+import com.google.apphosting.api.ApiProxy;
+
+import java.util.Map;
+
+/**
+ * project test environment
+ */
+class TestEnvironment implements ApiProxy.Environment {
+ /**
+ * get GAE app id
+ *
+ * @return app id
+ */
+ public String getAppId() {
+ return "gae-showcase";
+ }
+
+ /**
+ * get version id
+ *
+ * @return version
+ */
+ public String getVersionId() {
+ return "4.0.0-SNAPSHOT";
+ }
+
+ public void setDefaultNamespace(String s) {
+ }
+
+ public String getRequestNamespace() {
+ return null;
+ }
+
+ public String getDefaultNamespace() {
+ return null;
+ }
+
+ public String getAuthDomain() {
+ return null;
+ }
+
+ public boolean isLoggedIn() {
+ return false;
+ }
+
+ public String getEmail() {
+ return null;
+ }
+
+ public boolean isAdmin() {
+ return false;
+ }
+
+ public Map<String, Object> getAttributes() {
+ return null;
+ }
+}