无状态EJB实现接口注入失败

Wildfly 8.2.0

我有一个Stateless EJB和一个接口。

 @Local @Stateless public class Bean implements IBean{ ... } @Local public interface IBean { ... } 

但我得到一个WELD错误。 如果Bean没有实现接口,则没有错误。 根据https://stackoverflow.com/a/13988450/2023524和https://blogs.oracle.com/arungupta/entry/what_s_new_in_ejb ,应该没有错误。

错误:

 WELD-001408: Unsatisfied dependencies for type Bean with qualifiers @Default at injection point [BackedAnnotatedField] @Inject private mypackage.anotherBean.bean 

更新 :我尝试了所有可能的Local组合,但它没有帮助。 只有删除接口才会出错。

 @Stateless public class Bean implements IBean{ ... } @Local public interface IBean { ... } //***************************** @Stateless public class Bean implements IBean{ ... } public interface IBean { ... } //************************************ @Local @Stateless public class Bean implements IBean{ ... } public interface IBean { ... } 

当您想要通过EJB(使用@EJB )或CDI(使用@Inject )容器注入bean时,您可以声明具有接口类型的变量。 在应用程序部署期间,容器会找到已声明接口的具体实现。 在您的示例中,问题不在于注释,而是注入了声明的类型( Bean而不是IBean )。

你需要从Bean中删除@Local

 @Stateless public class Bean implements IBean{ ... } 

因为您定义了2个可能的本地WELD,不知道使用哪个。

oracle文档也使用@Remote接口显示:

 @Remote public interface Foo { . . . } @Stateless public class Bean implements Foo, Bar { . . . }