Wildfly 24跨项目EJB调用报错WFLYEJB0405如何解决?
Wildfly跨部署单元EJB注入报错WFLYEJB0405解决方案
核心原因
该错误是schedulers独立war包作为独立部署单元,无法识别另一个部署单元services中注册的远程EJB Bean,属于跨部署EJB调用的配置遗漏问题,可按以下顺序排查修复:
公共接口依赖一致性检查
com.tests.services和com.tests.schedulers两个项目必须同时引入com.tests.interfaces的依赖,且两个项目引用的IFoo接口全限定类名、方法签名完全一致,禁止在schedulers项目中单独定义同名同路径接口,或引入不同版本的接口包。远程EJB视图显式声明
虽然IFoo接口已经加了@Remote注解,仍需在FooBean实现类上显式指定远程视图,避免Wildfly默认注册为本地视图无法跨包调用:@Stateless(name = "IFoo") @Remote(IFoo.class) // 新增该注解显式暴露远程视图 public class FooBean implements IFoo { // 原有业务代码 }跨部署EJB注入注解调整
跨不同部署包调用远程EJB时,仅指定beanName无法跨部署单元识别,必须使用lookup属性指定全局JNDI路径:
全局JNDI命名规则为// 替换原有@EJB(beanName = "IFoo") @EJB(lookup = "java:global/com.tests.services/IFoo!com.tests.interfaces.IFoo") private IFoo iFoo;java:global/[services项目部署包名]/[Bean名称]![远程接口全限定名],如果services项目打包为ear,需要在部署包名前加ear包名,也可以直接在Wildfly管理控制台的JNDI浏览器中查询IFoo的实际绑定路径替换。部署顺序依赖配置
必须保证services项目先部署完成、EJB成功注册到JNDI后再启动schedulers项目,可在schedulers项目的WEB-INF目录下新增jboss-all.xml配置强制指定部署依赖:
内容的提问来源于stack exchange,提问作者Marllon Nasser
相关产品推荐
相关产品推荐

