WAS 8.5.5 EJB lookup抛出InvalidObjectException是否需重生成部署代码?
原始异常
com.ibm.ws.naming.util.InvalidObjectException: Some object reference in the name "MyEJB" relative to the context "path/to/myserver" is invalid. Some possible causes include a context binding in the name which refers to a destroyed context, or an object binding which contains an invalid EJBHome reference. [Root exception is org.omg.CORBA.INV_OBJREF: Could not resolve IOR string. vmcid: 0x0 minor code: 0 completed: No]
异常翻译
com.ibm.ws.naming.util.InvalidObjectException:上下文path/to/myserver下名称为MyEJB的部分对象引用无效。
可能的原因包括:名称对应的上下文绑定指向已销毁的上下文,或者对象绑定包含无效的EJBHome引用。
[根异常为org.omg.CORBA.INV_OBJREF:无法解析IOR字符串。vmcid: 0x0 次要代码: 0 执行状态:未完成]
问题场景
- 同一应用内其余EJB的lookup操作全部正常
- 本次报错的EJB仅修改了Bean类代码,更新后的类文件打包进EAR后,已通过WAS管理控制台完成应用更新
- 核心疑问:该场景下是否需要重新生成该EJB的部署代码(stub/tie等)?
解答
该场景下必须重新生成对应EJB的部署代码(stub/tie等),原因如下:
- 根异常
org.omg.CORBA.INV_OBJREF的本质是服务端绑定的EJB对象引用标识(IOR)和调用端持有的标识不匹配。仅更新EJB Bean类文件、不重新生成部署代码的情况下,WAS容器生成的JNDI绑定信息和旧的stub/tie文件不匹配,直接触发IOR无法解析的问题。 - WAS的EJB部署代码(stub/tie、绑定配置)是基于EJB类的元数据生成的,即便仅修改Bean类的业务逻辑没有调整对外接口,部分WAS版本也会在EJB类更新后变更部署阶段的绑定标识,仅替换类文件会导致JNDI绑定的对象引用和实际运行的类不匹配。
- 其余EJB运行正常,已排除容器全局JNDI服务故障的可能,进一步确认是当前修改过的EJB部署元数据不匹配导致的异常。
修复建议
- 对修改后的EJB模块重新执行deploy操作,生成最新的stub/tie代码,和更新后的Bean类共同打包进EAR重新部署即可解决问题
- 部署完成后建议清空WAS的临时缓存目录,避免旧的绑定信息残留引发二次问题
内容的提问来源于stack exchange,提问作者Senior Coder
相关产品推荐
相关产品推荐

