在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.1和JBoss 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) 。