Weblogic 14c环境部署应用出现JSF初始化失败问题咨询
故障根因
该错误是Weblogic版本升级后JSF实现类加载冲突导致:
- Weblogic 11g默认内置JSF实现为Apache MyFaces,与你应用中打包的
myfaces-all-1.1.1.jar兼容,可正常运行 - Weblogic 14c默认内置JSF实现切换为Oracle Mojarra,你应用自带的MyFaces实现与容器内置的Mojarra Injection SPI接口不兼容,触发注入失败报错
解决方案
按优先级可选择以下任意一种方案处理:
方案1:配置应用优先加载自带的MyFaces依赖
在应用WEB-INF目录下新增/修改weblogic.xml,添加类加载优先级配置:
<?xml version="1.0" encoding="UTF-8"?> <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.9/weblogic-web-app.xsd"> <container-descriptor> <prefer-application-packages> <package-name>javax.faces.*</package-name> <package-name>org.apache.myfaces.*</package-name> <package-name>com.sun.faces.*</package-name> </prefer-application-packages> <prefer-application-resources> <resource-name>META-INF/services/javax.faces.*</resource-name> <resource-name>META-INF/faces-config.xml</resource-name> </prefer-application-resources> </container-descriptor> </weblogic-web-app>
如果是EAR包部署,还需要在EAR根目录META-INF/weblogic-application.xml中添加相同的prefer-application-packages配置。
方案2:移除应用自带的JSF依赖,使用容器内置实现
删除应用WEB-INF/lib下的所有JSF相关依赖包:
myfaces-all-1.1.1.jarjsf-facelets-1.2.jar- 其他自定义打包的javax.faces、myfaces相关jar包
该方案适配Weblogic 14c默认技术栈,无需额外配置类加载,但需要回归测试应用功能,避免低版本MyFaces API与高版本Mojarra的兼容性差异。
生效操作
配置完成后执行以下操作避免缓存影响:
- 停止Weblogic服务
- 删除Weblogic临时目录下对应应用的缓存文件:
$DOMAIN_HOME/servers/[服务名]/tmp/_WL_user/[应用名]/ - 重启Weblogic服务,重新部署应用验证
内容的提问来源于stack exchange,提问作者KVNS_JavaLearner
相关产品推荐
相关产品推荐

