WebLogic 12c部署EJB应用遇javax.persistence.Entity类加载异常求助
解决WebLogic 12c部署EJB时的
javax.persistence.Entity类加载异常 首先,咱们来拆解这个异常的核心原因:interface javax.persistence.Entity is not visible from class loader本质是类加载器冲突——同一个JPA API的不同版本被多个类加载器加载,或者重复的JPA包导致类加载器无法找到正确的类实例。结合你的配置和已放置的JAR包,问题主要出在这几个地方:
问题分析
- 重复的JPA API包:你在
WL_DOMAIN/lib里同时放了hibernate-jpa-2.0-api-1.0.1.Final(JPA 2.0)和javax.persistence_1.0.0.0_1-0-2(JPA 1.0),这两个是不同版本的JPA规范API,会导致类加载混乱。 - 不完整的
weblogic-application.xml配置:你提供的配置片段缺少闭合的</prefer-application-packages>标签,这会让WebLogic无法识别你设置的「优先加载应用包」规则,依然沿用默认的父类加载器优先逻辑,进一步加剧冲突。 - 冗余的容器支持包:
com.oracle.jpa2support_1.0.0.0_2-1是WebLogic自带的JPA2支持包,如果你已经引入了Hibernate的JPA实现,这个包可能会和Hibernate的依赖冲突。
分步解决方案
1. 清理WL_DOMAIN/lib中的重复JPA包
只保留与你应用兼容的JPA版本包:
- 如果你用的是JPA 2.0,保留
hibernate-jpa-2.0-api-1.0.1.Final,删除javax.persistence_1.0.0.0_1-0-2(JPA 1.0版本)。 - 移除
com.oracle.jpa2support_1.0.0.0_2-1,因为Hibernate已经提供了JPA的实现,不需要WebLogic自带的支持包。 - 确认
hibernate和dom4j包版本与JPA 2.0兼容(比如Hibernate 3.6+支持JPA 2.0)。
2. 修复weblogic-application.xml的配置
确保配置标签完整,让WebLogic优先加载应用中的JPA相关类:
<prefer-application-packages> <package-name>antlr.*</package-name> <package-name>javax.persistence.*</package-name> </prefer-application-packages>
(补充闭合标签后,WebLogic才会正确应用这个类加载优先级规则)
3. 检查应用自身的依赖
确认你的EJB应用的lib目录(或者WAR的WEB-INF/lib)中没有重复的JPA API包(比如javax.persistence.jar之类的)。如果有,直接删除——因为你已经通过prefer-application-packages指定了优先加载,或者通过WL_DOMAIN/lib提供了API包,重复的包只会导致冲突。
4. 重启WebLogic并重新部署
做完以上修改后,重启WebLogic服务器,然后重新部署你的EJB应用,应该就能解决这个类加载异常了。
内容的提问来源于stack exchange,提问作者Prerna shah
相关产品推荐
相关产品推荐

