GlassFish 5部署Java EE应用遇MBean注销异常求助
解决GlassFish 5部署时TopLink MBean注销警告的问题
我碰到过不少类似的情况,这个警告通常和配置拼写错误或者容器缓存残留有关,咱们一步步来排查解决:
首先,你提供的persistence.xml里有个致命的拼写错误,这大概率是引发问题的核心原因:
你在配置属性里用了javax.persistance(少了一个字母e),正确的JPA命名空间应该是javax.persistence。一共有两处写错了:
<property name="javax.persistance.schema-generation.database.action" value="drop-and-create"/><property name="javax.persistance.schema-generation.scripts.drop-target" value="bookStoreDrop.ddl"/>
这个错误会导致GlassFish默认的JPA实现EclipseLink无法正确解析你的持久化配置,进而在尝试注册/注销MBean时找不到对应实例,抛出InstanceNotFoundException。
第一步:修正persistence.xml的拼写错误
把所有javax.persistance替换成javax.persistence,修正后的完整配置如下:
<persistence-unit name="bookStorePU" transaction-type="JTA"> <class>com.learning.model.Book</class> <properties> <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/> <property name="javax.persistence.schema-generation.scripts.action" value="drop-and-create"/> <property name="javax.persistence.schema-generation.scripts.create-target" value="bookStoreCreate.ddl"/> <property name="javax.persistence.schema-generation.scripts.drop-target" value="bookStoreDrop.ddl"/> </properties> </persistence-unit>
第二步:清理GlassFish的部署缓存
即使修正了配置,GlassFish可能还残留着旧的部署缓存,导致异常持续出现:
- 停止GlassFish服务器
- 删除GlassFish安装目录下
domains/domain1/applications里的你的项目文件夹 - 删除
domains/domain1/generated目录下的所有内容 - 重启GlassFish
第三步:重新打包并部署应用
- 先用Maven命令重新清理打包:
mvn clean package - 如果用IntelliJ部署,先执行
Build > Clean Project清除本地编译缓存,再重新部署到GlassFish;也可以直接把target目录下的WAR包手动上传到GlassFish管理控制台完成部署
额外排查点(如果以上步骤无效)
- 检查项目依赖的EclipseLink版本是否和GlassFish 5自带版本一致:GlassFish 5默认使用EclipseLink 2.7.x,若你的项目手动依赖了其他版本,可能引发冲突,建议移除项目中手动添加的EclipseLink依赖,使用容器自带版本。
- 确认Book实体类正确标注了
@Entity注解,且包路径和persistence.xml里的<class>配置完全匹配。
完成以上操作后,再部署应用,应该就能解决这个MBean注销的警告问题了。
内容的提问来源于stack exchange,提问作者mixnix
相关产品推荐
相关产品推荐

