当有多个 EJB 时,如何 'narrow' 到特定的 EJB

How do I 'narrow' down to a specific EJB when there are multiple EJB's

我有以下情况:

两个 EJB 实现相同的接口

@Stateless(name="theOne")
public class EjbOne implements InterfaceOne {
    ...
}

@Stateless(name="theSecond")
public class EjbTwo implements InterfaceOne {
    ...
}

我想将特定的 EJB 注入第三个 class

@Stateless
public class EjbThree  {
    @EJB(...???...mappedName="theOne"? name=...? )
    private EjbOne ejbOne;
}

我应该怎么做? (请注意,我使用的是@EJB,而不是带有@Qualifier 的@Inject)

您引用的是混凝土 class private EjbOne ejbOne; 别无选择。你根本没有使用接口,如果你想使用好的旧多态性,你应该像这样引用 @EJB private InterfaceOne ejbOne 那么你的问题就有意义了,你可以做的是:

一个。 @EJB(beanName="EjbOne") private InterfaceOne ejbOne

b。 @EJB(lookup ="jndi-address") private InterfaceOne ejbOne

c。 @EJB(mappedName="vendor-specific-address") private InterfaceOne ejbOne

d. @EJB(name="java:comp/env like logical name") private InterfaceOne ejbOne

https://docs.oracle.com/javaee/7/api/javax/ejb/EJB.html