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

34

如何在JBoss服务器中升级Mojarra并告诉它使用给定的Mojarra 2.x JAR文件,而不是在启动日志中指示的JBoss自己的?

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

1个回答

65
以下步骤适用于 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文件冲突:
    • 垃圾桶/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 缺少 内的 ,则需要手动添加。
重要提示是,在 AS/EAP 中部署时,早于 2.2.7 的 Mojarra 2.2.x 版本将失败,并显示以下异常: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.faces.flow.builder.FlowDefinition。您基本上有两个选择:降级到 Mojarra 2.1.x 或升级至至少 2.2.7 或更新版本。

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


1
我按照这些指示进行操作,但是当我运行jboss7.1服务器时,出现了关键错误:java.lang.NoClassDefFoundError: com/sun/faces/spi/InjectionProvider,有什么提示吗? - simonC
我忘了提到我使用的是JSF 2.2.3版本,我需要在CDI bean中使用@ViewScoped,据我所知,这种支持已经包含在JSF2.2中。 - simonC
我认为应该使用 " individual Mojarra 2.1.x" 而不是 " individual Mojarra 2.x" 来表示,因为 JSF2.2 需要采用不同的方法。2.x 可能会让用户误以为 2.2.. 也遵循相同的步骤。 - kosa
2
@Nambari:上述内容也适用于2.2版本。至少在WildFly上,不再有.index文件,并且已经正确添加了com.sun.jsf-impl模块条目。但我还没有在JBoss AS7/EAP6上尝试过2.2版本。 - BalusC
你可能对WildFly的看法是正确的。我们仍在使用7.1.1 Final版本。我看到了这个答案,准备按照建议进行更改,但评论中说2.2版本有不同的说明,感觉答案和评论传达了不同的信息。想提醒您注意一下。 - kosa
1
我将jsfi-mpl模块添加为依赖项。请参见此处:http://stackoverflow.com/questions/17138490/jsf-2-2-final-not-works-on-jboss-7-1-1 - Spindizzy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接