在Wildfly应用程序中通过接口注入EJB

时间:2016-11-17 08:39:35

标签: java ejb cdi

我正在使用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中都没有问题。但为什么呢?

1 个答案:

答案 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 ...