RichFaces 4 与 Google 应用引擎支持

发布者:    |      

RichFaces 基于的应用程序云部署支持一直是热门话题之一,现在终于实现了!实际上,开发工作已于一个月前完成,并在 Java One 会议 上宣布。由于要稳定该特性并创建一个特殊的模板以简化启动过程,官方公告被推迟。

让我们回顾一下已经完成的工作以及将 RichFaces 应用程序部署到 Google 应用引擎所需执行的步骤。

GAE 部署限制

Google 应用引擎部署为 Java 开发者引入了一些限制。以下是一些对我们开始很重要的事项

如何避免使用 Java2D?资源生成 Maven 插件。

我们团队需要额外开发的一个重要限制是 Java2D 使用限制。RichFaces 皮肤机制依赖于这些类来动态生成资源以支持应用程序皮肤。为了满足 GAE 的限制而不会丢失 RichFaces 的灵活外观,需要一个新资源插件来创建 RichFaces 资源的静态版本

  • 将皮肤参数替换为应用程序使用的所有皮肤的 CSS
  • 压缩 CSS 文件
  • 在 CSS 中提供相对 URL
  • 生成皮肤图像
  • 提取应用程序使用的所有 JavaScript 文件并压缩它们
  • 为所有处理的文件生成描述符。RichFaces 框架使用此描述符来指向适当资源(例如放置在外部服务器/CDN 上)

生成的应用程序 pom.xml 中检查插件定义和配置(maven-resources-plugin)

之后需要做的只是使用上下文参数在 web.xml 中定义静态资源位置,例如

    <context-param>
        <param-name>org.richfaces.staticResourceLocation</param-name>
        <param-value>#{facesContext.externalContext.requestContextPath}/static-resources/#{resourceLocation}</param-value>
    </context-param>

注意:这也可以在服务器之间提供资源,有助于在生产环境中扩展规模。

还需要考虑的其他事项

有关GAE限制的一些其他点。其中一些与RichFaces的使用没有直接关系,但任何JSF开发人员都应该考虑。

  • 当前的推送组件架构不支持监听器序列化。

因此,我们仍然需要完成推送的架构重设计,以便为该组件正确支持云环境。

  • 不允许创建新线程

因此,尝试直接移植3.3.x的一些简单示例(例如轮询/推送),将不会正常工作。

  • 在GAE上运行JSF 2.0即使没有RichFaces 4也需要一些额外的设置。

有关详细信息,请参阅GAE知识库中的这篇文章

  • 无法访问文件系统

开发人员应配置缓存以使用Google Memcache实现

GAE项目生成和构建的Archetype

如上所述,在JavaOne,我们创建了一个特殊的Archetype,用于创建已配置为GAE部署的JSF 2.0、RichFaces 4应用程序骨架。要生成项目,只需执行

mvn archetype:generate -DarchetypeGroupId=org.richfaces.archetypes 
-DarchetypeArtifactId=richfaces-archetype-gae -DarchetypeVersion=4.0.0.20101004-M3 
-DgroupId=<yourGroupId> -DartifactId=<yourArtifactId> -Dversion=1.0-SNAPSHOT 

现在可以通过简单的mvn install执行来构建项目

注意

  1. Archetype的第一个发布版本是4.0.0.20101004-M3
  2. readme.txt文件包含将应用程序部署到GAE服务器或使用本地GAE SDK开发服务器进行本地测试的说明。

将应用程序部署到GAE账户

为了避免复制粘贴工作,这里提供了官方说明的链接,我们已成功用于测试部署。如果您已经创建了账户、注册了应用程序并正确配置了GAE SDK

  • 确保在重新部署之前更新了appengine-web.xml中的版本
  • 执行appcfg update <应用程序展开存档的路径>
  • 就这样!只需转到您的账户并检查应用程序是否就位且正常工作!

在Twitter上获取我的博客更新

我的jroller.com博客

回到顶部