如何在EJB中正确使用接口,解决WFLYEJB0406部署异常
EJB部署WFLYEJB0406异常解决方案
异常根因
WFLYEJB0406错误触发的核心逻辑是:EJB容器默认仅将实现类显式实现的业务接口注册为可注入的绑定类型,你在beans.security.RegistrationBean中是直接用实现类DatabaseUserManager作为注入点的类型,容器找不到对应类型的EJB绑定,因此抛出部署异常。
可用解决方案
方案1:调整注入点为接口类型(推荐)
符合EJB面向接口的设计规范,无需修改现有实现类配置,将RegistrationBean中的注入代码调整为:
@EJB private FieldChecker databaseUserManager;
方案2:暴露EJB无接口视图
如果业务需要直接注入实现类类型,给DatabaseUserManager添加@LocalBean注解即可:
@Singleton @LocalBean // 暴露实现类本身作为可注入类型 public class DatabaseUserManager implements FieldChecker { // 原有业务逻辑 }
添加该注解后,容器会同时注册FieldChecker接口和DatabaseUserManager实现类两种类型的绑定,两种注入方式均可正常使用。
方案3:显式指定暴露的业务接口
如果实现类后续需要实现多个接口,不想默认暴露所有接口,可以通过@Local注解手动指定要暴露的接口:
@Singleton @Local(FieldChecker.class) // 显式声明仅暴露FieldChecker作为本地业务接口 public class DatabaseUserManager implements FieldChecker { // 原有业务逻辑 }
如果需要同时支持接口和实现类注入,同时添加@Local和@LocalBean注解即可。
内容的提问来源于stack exchange,提问作者Shrek1996
相关产品推荐
相关产品推荐

