Java 跨容器注射

Java 跨容器注射,java,jboss7.x,cdi,ejb-3.1,Java,Jboss7.x,Cdi,Ejb 3.1,我们很难找到从另一个容器注入SessionBean的正确方法 假设我们有两个ear文件earA和earB以及一个共享jar: earA @Stateless public class MyBean implements BeanInterface{...} 耳塞 @Stateless public class OtherBean{ @Inject BeanInterface myBean; } apiJar earA和earB中都存在一个包含BeanInterface的JAR文件 我们

我们很难找到从另一个容器注入SessionBean的正确方法

假设我们有两个ear文件earA和earB以及一个共享jar:

earA

@Stateless
public class MyBean implements BeanInterface{...}
耳塞

@Stateless
public class OtherBean{
   @Inject BeanInterface myBean;
}
apiJar

earA和earB中都存在一个包含BeanInterface的JAR文件

我们不希望通过@EJB显式使用JNDI名称,因为earB将由外部客户实现和部署


我们希望使earB通过BeanInterface注射MyBean尽可能容易(并且尽可能少地了解earA)。

CDI不会在耳朵上工作

您可以在EAR B中使用
@EJB(lookup=…)
来获取对EAR a中实现的EJB的引用

在这种情况下,您不需要知道EAR A中的实现类,只需要知道它的JNDI名称。您还应该使EAR中的EJB成为一个公开远程接口的组件

如果两个EAR部署在不同的服务器实例上,那么还需要一些特定于供应商的配置来执行远程JNDI查找


您还可以隐藏此
@EJB(lookup=…)
,并通过执行此处描述的操作来使用CDI注入EJB:

您在哪里找到CDI可以跨耳朵工作的信息?如果在earB中您将使用@EJB,您将能够通过引用earA中的bean来映射它,而无需在earB中更改代码。我不确定是否理解您的响应。您想让我使用@EJB注释,然后指定实现类吗?然后我强制我的外部客户了解我的实施细节…不。使用标准的
@EJB(name=“EJB/BeanInterfaceRef”)BeanInterface myBean
然后您可以将
ejb/BeanInterfaceRef
映射到earA中bean的JNDI,例如通过jboss.xml-