WebSphere 9.0.5.3+MyFaces 2.2启用CACHE_EL_EXPRESSIONS后异常求助
WebSphere 9自带MyFaces 2.2与标准实现的差异及
CACHE_EL_EXPRESSIONS配置问题 你遇到的这个异常完全是因为WebSphere 9自带的MyFaces 2.2并非Apache官方的标准实现——IBM对它做了不少适配容器环境的定制修改,和标准版相比确实存在一些功能限制,具体来说:
核心差异点
- 内部API的定制调整:标准MyFaces 2.2的
org.apache.myfaces.view.facelets.AbstractFaceletCache类包含setMemberFactories这个内部方法,但IBM在WebSphere定制版本中移除或修改了该方法。当你配置org.apache.myfaces.CACHE_EL_EXPRESSIONS=alwaysRecompile时,JSF运行时会尝试调用这个缺失的方法,直接抛出NoSuchMethodException。 - 缓存配置项的功能限制:
alwaysRecompile这个配置值对应的EL表达式缓存逻辑依赖于标准版的内部实现,WebSphere的定制版本没有保留这部分逻辑,导致该配置值无法正常工作。
可行的解决方案
- 替换为支持的配置值:放弃使用
alwaysRecompile,改用WebSphere支持的true(启用EL表达式缓存)或false(禁用缓存)。如果你的场景需要频繁重新编译EL表达式(比如开发阶段),可以手动清理WebSphere的JSF临时缓存目录,或者在开发环境中使用自己打包的标准MyFaces 2.2(注意:这种方式需要调整WebSphere的类加载优先级,且可能引发容器兼容性问题,需充分测试)。 - 利用WebSphere原生缓存控制:WebSphere管理控制台提供了针对JSF视图和EL缓存的专属配置项,你可以通过控制台调整缓存过期时间、禁用特定缓存策略,以此实现类似
alwaysRecompile的效果。
内容的提问来源于stack exchange,提问作者Nikola
相关产品推荐
相关产品推荐

