35

如何在 JBoss 服务器中升级 Mojarra 并告诉它使用给定的 Mojarra 2.x JAR 而不是 JBoss 自己的jboss-jsf-api_2.1_spec-2.0.1.Final.jar,如启动日志中所示?

如果这是相关的,我目前正在使用 JBoss AS 7.1。

4

1 回答 1

66

以下过程适用于JBoss AS 7.2+JBoss EAP 6.1+JBoss WildFly 8+,并假设您完全控制了服务器的安装和配置。这将升级服务器范围的默认JSF 版本:

  • 下载单独的 Mojarra APIimpl文件(因此不是单个javax.faces.jar文件)。当前最新的 2.1.x 版本是 2.1.29,当前最新的 2.2.x 版本是 2.2.14。假设您要升级到 2.2.x。您可以从他们的 Maven 存储库中单独下载它们:
  • 确保 JBoss 已关闭。
  • 更新 JSF API /modules/system/layers/base/javax/faces/api/main
    • 删除或备份旧的 JAR 文件(不要将它保存在同一个文件夹中,甚至不要重命名!)。
    • jsf-api-2.2.14.jar文件放在那里。
    • 打开module.xml文件并编辑<resource-root>以指定新文件名,如<resource-root path="jsf-api-2.2.14.jar"/>
  • 更新JSF impl /modules/system/layers/base/com/sun/jsf-impl/main
    • 删除或备份旧的 JAR 文件(不要将它保存在同一个文件夹中,甚至不要重命名!)。
    • jsf-impl-2.2.14.jar文件放在那里。
    • 打开module.xml文件并编辑<resource-root>以指定新文件名,如<resource-root path="jsf-impl-2.2.14.jar"/>
  • 清理 JBoss 缓存/工作数据只是为了确保没有来自以前部署的 JAR 的旧副本挂在那里,这可能只会与新的 JAR 发生冲突:
    • 垃圾箱的所有内容/standalone/data(当然,自定义数据文件夹除外,例如包含上传文件的文件夹)
    • 垃圾箱的所有内容/standalone/deployments
    • 垃圾箱的所有内容/standalone/tmp
  • 启动 JBoss。它现在应该对所有部署使用新的 JSF 版本。

相同的过程适用于JBoss AS 7.0/7.1JBoss EAP 6.0,您只需要浏览/modules/*而不是/modules/system/layers/base/*,并且您需要显式删除.index那里的旧文件,如果有的话(JBoss 将自动创建一个)。此外,如果module.xmlin API 文件夹<module name="com.sun.jsf-impl"/>在里面丢失<dependencies>,那么您需要手动添加它。

重要说明是 Mojarra 2.2.x 版本早于 2.2.7 将在部署期间在 AS/EAP 中失败,但以下异常:org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.faces.flow.builder.FlowDefinition. 然后,您基本上有 2 个选择:降级到 Mojarra 2.1.x,或升级到至少 2.2.7 或更高版本。

如果您想升级到Mojarra 2.3,它不再在 Maven 上提供 2-JAR 变体,您需要javax.faces.jar按照以下过程基于文件手动创建 2-JAR 变体:如何安装一个WildFly 上 JSF (javax.faces.jar) 的 jar 变体

于 2013-06-13T11:24:42.203 回答