You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GlassFish 5部署Java EE应用遇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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:13:08