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

use*_*625 33 jsf jboss jsf-2 mojarra wildfly

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

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

Bal*_*usC 64

以下过程适用于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可能只与新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>,则需要手动添加它.

重要提示是,在部署期间,早于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变体,您需要根据javax.faces.jar此过程手动创建基于文件的2-JAR变体:如何安装一个WildFly上的JSF(javax.faces.jar)变体.

  • @Nambari:以上也适用于2.2.至少,在WildFly上只有".index"文件,并且已经有了`com.sun.jsf-impl`模块条目.尚未在JBoss AS7/EAP6上尝试过2.2. (2认同)