在 JBoss AS / EAP / WildFly 中升级 JSF / Mojarra

2024-03-04

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

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


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

  • Download the individual Mojarra API https://maven.java.net/content/repositories/releases/com/sun/faces/jsf-api/ and impl https://maven.java.net/content/repositories/releases/com/sun/faces/jsf-impl/ files (and thus not the single javax.faces.jar file). Current latest 2.1.x version is 2.1.29 and current latest 2.2.x version is 2.2.14. Let's assume that you want to upgrade to 2.2.x. You can download them individually from their Maven repository:
    • jsf-api-2.2.14.jar https://maven.java.net/content/repositories/releases/com/sun/faces/jsf-api/2.2.14/jsf-api-2.2.14.jar
    • jsf-impl-2.2.14.jar https://maven.java.net/content/repositories/releases/com/sun/faces/jsf-impl/2.2.14/jsf-impl-2.2.14.jar
  • 确保 JBoss 已关闭。
  • Update JSF API in /modules/system/layers/base/javax/faces/api/main:
    • 删除或备份旧的 JAR 文件(不要将其保留在同一文件夹中,甚至不重命名!)。
    • Put jsf-api-2.2.14.jar文件在那里。
    • Open module.xml归档并编辑<resource-root>指定新文件名,如下所示<resource-root path="jsf-api-2.2.14.jar"/>
  • Update JSF impl in /modules/system/layers/base/com/sun/jsf-impl/main:
    • 删除或备份旧的 JAR 文件(不要将其保留在同一文件夹中,甚至不重命名!)。
    • Put jsf-impl-2.2.14.jar文件在那里。
    • Open module.xml归档并编辑<resource-root>指定新文件名,如下所示<resource-root path="jsf-impl-2.2.14.jar"/>
  • Cleanup JBoss cache/work data just to make sure that there's no old copy of the JARs from previous deployments hanging in there which would potentially only collide with the new JARs:
    • 删除所有内容/standalone/data(当然,自定义数据文件夹(例如包含上传文件的文件夹)除外)
    • 删除所有内容/standalone/deployments
    • 删除所有内容/standalone/tmp
  • 启动 JBoss。现在,它应该对所有部署使用新的 JSF 版本。

同样的程序适用于JBoss AS 7.0/7.1 and JBoss EAP 6.0,您只需浏览/modules/*代替/modules/system/layers/base/*,并且您需要显式删除旧的.index文件(如果有的话)(JBoss 将自动创建一个)。另外,如果module.xml在 API 文件夹中遗漏<module name="com.sun.jsf-impl"/> inside <dependencies>,那么就需要手动添加了。

重要提示是,早于 2.2.7 的 Mojarra 2.2.x 版本在部署期间将在 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 或更高版本。

如果您想升级到莫贾拉2.3,它不再在 Maven 上提供 2-JAR 变体,您需要根据以下内容手动创建 2-JAR 变体javax.faces.jar按照此程序归档:如何在 WildFly 上安装 JSF (javax.faces.jar) 的一个 jar 变体 https://stackoverflow.com/questions/35899887/how-to-install-one-jar-variant-of-jsf-i-e-javax-faces-2-3-0-m01-jar-on-wildfly.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JBoss AS / EAP / WildFly 中升级 JSF / Mojarra 的相关文章