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

时间:2013-06-13 11:15:39

标签: jsf jsf-2 jboss wildfly mojarra

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

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

1 个答案:

答案 0 :(得分:63)

以下程序适用于 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已关闭。
  • 更新/modules/system/layers/base/javax/faces/api/main中的JSF API:
    • 删除或备份旧的JAR文件(不要将其保存在同一文件夹中,甚至不要重命名!)。
    • jsf-api-2.2.14.jar文件放在那里。
    • 打开module.xml文件并修改<resource-root>以指定<resource-root path="jsf-api-2.2.14.jar"/>
    • 中的新文件名
  • 更新/modules/system/layers/base/com/sun/jsf-impl/main中的JSF impl:
    • 删除或备份旧的JAR文件(不要将其保存在同一文件夹中,甚至不要重命名!)。
    • jsf-impl-2.2.14.jar文件放在那里。
    • 打开module.xml文件并修改<resource-root>以指定<resource-root path="jsf-impl-2.2.14.jar"/>
    • 中的新文件名
  • 清理JBoss缓存/工作数据只是为了确保以前的部署中没有旧JAR的副本,这些JAR可能只会与新的JAR发生冲突:
    • 删除/standalone/data的所有内容(当然,包含上传文件的文件夹等自定义数据文件夹除外)
    • 删除/standalone/deployments
    • 的所有内容
    • 删除/standalone/tmp
    • 的所有内容
  • 启动JBoss。它现在应该为所有部署使用新的JSF版本。

同样的程序适用于 JBoss AS 7.0 / 7.1 JBoss EAP 6.0 ,您只需要浏览/modules/*而不是/modules/system/layers/base/* ,你需要显式删除那里的旧.index文件,如果有的话(JBoss会自动创建一个)。此外,如果API文件夹中的module.xml错过了<module name="com.sun.jsf-impl"/>内的<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或更新。

如果你想升级到 Mojarra 2.3 ,它不再在Maven上提供2-JAR变体,你需要手动创建基于2-JAR变体的2-JAR变体根据此程序javax.faces.jar文件:How to install one jar variant of JSF (javax.faces.jar) on WildFly