我正在使用wildfly 10.1.0和JavaEE 7
我有这个界面:
public interface TestEjb {
String something();
}
这个实现它的Ejb类:
@LocalBean
@Stateless
public class TestEjbImpl implements TestEjb {
@Override
public String something() {
return "Hello world";
}
}
当我使用
将它注入我的@Path注释jax-rs类时@Inject
private TestEjb testEjb;
它给出了一个错误说" WELD-001408:类型TestEjb的不满意依赖性与限定符@ Default"
但是当我像
那样注射它时@Inject
private TestEjbImpl testEjb;
它工作正常。 令人惊讶的是,两种方式在jboss-eap-6.4中都没有问题。但为什么呢?
答案 0 :(得分:2)
首先,您将CDI注入与EJB注入混合在一起。而是在注入EJB时使用@EJB
(而不是@Inject
)。
@LocalBean
具有无界面视图。因此,您有一个没有视图注释的接口和一个没有接口视图注释的bean。 EJB容器将其理解为无接口视图。
最好的方法是使用TestEjb
视图注释@Local
界面,并从@LocalBean
实施中删除TestEjbImpl
,以便您的解决方案正常运行。
接口
@Local
public interface TestEjb {
String something();
}
EJB
@Stateless
public class TestEjbImpl implements TestEjb {
@Override
public String something() {
return "Hello world";
}
}
注射时间
@EJB
private TestEjb testEjb;
我希望这会有所帮助。
Further reading ...