无状态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 { . . . }