在 Wildfly 应用程序中通过接口注入 EJB
Injecting EJB via interface in Wildfly application
我正在使用 wildfly 10.1.0 和 JavaEE 7
我有这个界面:
public interface TestEjb {
String something();
}
和这个 Ejb class 实现它:
@LocalBean
@Stateless
public class TestEjbImpl implements TestEjb {
@Override
public String something() {
return "Hello world";
}
}
当我使用
将它注入我的@Path 注释 jax-rs class 时
@Inject
private TestEjb testEjb;
它给出一个错误说 "WELD-001408: Unsatisfied dependencies for type TestEjb with qualifiers @Default"
但是当我像这样注入它时
@Inject
private TestEjbImpl testEjb;
它工作正常。
令人惊讶的是,这两种方式在 jboss-eap-6.4 中都没有问题。但是为什么?
首先,您将 CDI 注入与 EJB 注入混合在一起。注入 EJB 时,最好使用 @EJB
(而不是 @Inject
)。
@LocalBean
有一个无界面视图。因此,您有一个没有视图注释的接口和一个没有接口视图注释的 bean。 EJB 容器将其理解为无接口视图。
最好的方法是使用 @Local
视图注释 TestEjb
接口,并从 TestEjbImpl
实现中删除 @LocalBean
以使您的解决方案起作用。
界面
@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...
我正在使用 wildfly 10.1.0 和 JavaEE 7
我有这个界面:
public interface TestEjb {
String something();
}
和这个 Ejb class 实现它:
@LocalBean
@Stateless
public class TestEjbImpl implements TestEjb {
@Override
public String something() {
return "Hello world";
}
}
当我使用
将它注入我的@Path 注释 jax-rs class 时@Inject
private TestEjb testEjb;
它给出一个错误说 "WELD-001408: Unsatisfied dependencies for type TestEjb with qualifiers @Default"
但是当我像这样注入它时
@Inject
private TestEjbImpl testEjb;
它工作正常。 令人惊讶的是,这两种方式在 jboss-eap-6.4 中都没有问题。但是为什么?
首先,您将 CDI 注入与 EJB 注入混合在一起。注入 EJB 时,最好使用 @EJB
(而不是 @Inject
)。
@LocalBean
有一个无界面视图。因此,您有一个没有视图注释的接口和一个没有接口视图注释的 bean。 EJB 容器将其理解为无接口视图。
最好的方法是使用 @Local
视图注释 TestEjb
接口,并从 TestEjbImpl
实现中删除 @LocalBean
以使您的解决方案起作用。
界面
@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...