无法解决Glassfish部署JDeveloper开发的ADF应用时的错误
解决ADF应用部署到Glassfish 5.0.1的错误方案
Hey,我之前处理过类似的ADF部署到Glassfish的问题,针对你遇到的 oracle.jbo.mom.DefObjectEventManager 相关的SEVERE级错误,结合你已经完成的操作,给你几个针对性的排查和修复步骤:
1. 确认ADF Essential包的正确性
- 你已经把
adf-essential.zip放到域的lib文件夹,但要注意:必须用JDeveloper 12.2.1.2安装目录下的对应包(路径一般是$JDEV_HOME/oracle_common/modules/oracle.adf),版本要和应用编译版本完全匹配,不能混用其他版本的包。 - 不要直接放zip文件,要解压整个zip到域的lib目录,确保所有ADF相关jar都能被Glassfish加载。
2. 验证JVM选项的完整配置
ADF依赖特定的JVM参数,检查你添加的选项是否包含以下关键项:
-Doracle.mds.cache=simple -Djavax.xml.soap.MessageFactory=oracle.j2ee.ws.saaj.soap.MessageFactoryImpl -Djava.security.policy=${com.sun.aas.instanceRoot}/config/server.policy -Doracle.adf.share.http.context=oracle.adf.share.http.ServletADFContext -Xmx2048m -Xms1024m
最后两个堆内存参数是为了避免内存不足引发的类加载异常,建议加上。
3. 调整EAR包的部署描述符
- 打开生成的EAR包,删除WebLogic专属的配置(比如
weblogic-application.xml里的WebLogic特有参数),避免Glassfish加载时出错。 - 添加Glassfish专属的配置文件
glassfish-application.xml,内容如下:
<glassfish-application xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="7"> <class-loader delegate="false"/> <property name="oracle.jbo.server.lazyloading" value="true"/> </glassfish-application>
4. 排查类加载冲突问题
oracle.jbo.mom.DefObjectEventManager 的错误大多是类加载异常导致的:
- 检查Glassfish域的
lib目录,看是否存在重复或版本不一致的ADF jar包(比如不同版本的oracle.adf.model_*.jar),如果有,删除重复的旧版本。 - 查看Glassfish的完整日志,找是否有
ClassNotFoundException或NoClassDefFoundError,这会直接告诉你缺失的jar包。
5. 重新编译打包部署
有时候缓存会坑人,建议:
- 在JDeveloper中执行
Build->Clean All,清理所有项目缓存后重新编译生成EAR包。 - 部署前删除Glassfish域中已有的旧应用文件(路径一般是
$GLASSFISH_HOME/glassfish/domains/你的域名/applications/你的应用名),避免旧文件干扰。
内容的提问来源于stack exchange,提问作者Ritesh Lad
相关产品推荐
相关产品推荐

