WebLogic 12部署EAR时EJB类加载失败问题求助
解决方案:WebLogic 12 部署依赖 JDK 1.5 EJB 的 EAR 类找不到问题
针对你遇到的类加载异常,且需要新旧 EAR 并行运行的场景,推荐采用**WebLogic 共享库(Shared Library)**的方式解决,既能隔离新旧应用的类依赖,又能让新 EAR 正确加载旧版本 EJB 类。以下是具体步骤:
1. 将依赖的 JDK 1.5 EJB Jar 打包为 WebLogic 共享库
共享库是 WebLogic 提供的一种全局类共享机制,允许多个应用复用同一套类资源,同时保持类加载隔离。
- 在 EJB Jar 的
META-INF目录下创建weblogic-library.xml文件,内容如下:
<weblogic-library xmlns="http://xmlns.oracle.com/weblogic/weblogic-library" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-library http://xmlns.oracle.com/weblogic/weblogic-library/1.0/weblogic-library.xsd"> <library-name>legacy-ejb-shared-lib</library-name> <library-version>1.0.0</library-version> <description>共享库:JDK 1.5 编译的遗留 EJB 类</description> </weblogic-library>
- 保存后,将该 Jar 包部署到 WebLogic 12 服务器:
- 登录 WebLogic 控制台,进入「部署」页面
- 点击「安装」,选择该 Jar 包
- 部署类型选择「库」,完成部署
2. 修改新 EAR 的配置,引用共享库
让新 EAR 明确依赖上述共享库,确保类加载器能正确找到 EJB 类:
- 在新 EAR 的
META-INF目录下的weblogic-application.xml文件中添加共享库引用:
<weblogic-application xmlns="http://xmlns.oracle.com/weblogic/weblogic-application" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.0/weblogic-application.xsd"> <!-- 其他原有配置 --> <library-ref> <library-name>legacy-ejb-shared-lib</library-name> <library-version>1.0.0</library-version> <exact-match>false</exact-match> <!-- 允许兼容版本的库,若需严格匹配设为 true --> </library-ref> </weblogic-application>
3. 彻底清理 WebLogic 缓存(关键步骤)
之前的缓存清理可能不够彻底,需确保删除以下目录后再重启服务器:
- Domain 根目录下的
tmp、cache文件夹 servers/[你的服务器名称]/tmp、servers/[你的服务器名称]/cache文件夹
4. 验证兼容性与隔离性
- 部署新 EAR 后,检查控制台是否再出现类加载异常
- 确认旧 EAR 在 WebLogic 10 上仍正常运行(共享库仅对 WebLogic 12 的新 EAR 生效,不会影响旧环境)
补充说明
- 不建议将 EJB Jar 放入 WebLogic 的
domain/lib目录:该目录属于全局类加载器,可能会与其他应用的类依赖产生冲突,而共享库可以精确控制哪些应用能访问它 - JDK 版本兼容性:JDK 1.7 完全兼容 JDK 1.5 编译的类文件,因此无需担心字节码层面的兼容性问题
内容的提问来源于stack exchange,提问作者SmurtD
相关产品推荐
相关产品推荐

