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

我如何升级在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+JBoss WildFly 8+,并假定您完全控制了服务器的安装和configuration。 这升级了服务器范围的默认 JSF版本:

  • 下载个人Mojarra API和impl文件(因此不是单个javax.faces.jar文件)。 目前最新的2.1.x版本是2.1.29,最新的2.2.x版本是2.2.14。 假设您要升级到2.2.x. 你可以从他们的Maven仓库单独下载它们:
    • jsf-api-2.2.14.jar
    • jsf-impl-2.2.14.jar
  • 确保JBoss已closures。
  • 更新/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"/>
  • 清理JBosscaching/工作数据只是为了确保没有以前部署的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会自动创build一个)。 另外,如果API文件夹中的module.xml错过了<dependencies> <module name="com.sun.jsf-impl"/> <dependencies> ,则需要手动添加它。

重要提示:在部署过程中,2.2.7以前版本的Mojarra 2.2.x版本在AS / EAP中将会失败,出现以下exception: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.faces.flow.builder.FlowDefinition 。 那么你基本上有两个select:降级到Mojarra 2.1.x,或升级到至less2.2.7或更新。

如果您想要升级到Mojarra 2.3 ,而Majar不再提供2-JAR变体,则需要根据此过程手动创build基于javax.faces.jar文件的2-JAR变体: 如何在WildFly上安装JSF的一个jar变体(javax.faces.jar) 。