我们无法找到从另一个容器注入(inject) SessionBean 的正确方法。
假设我们有两个ear文件earA和earB以及一个共享jar:
耳朵A
@Stateless
public class MyBean implements BeanInterface{...}
耳朵
@Stateless
public class OtherBean{
@Inject BeanInterface myBean;
}
apiJar
earA 和earB 中均存在包含BeanInterface 的jarfile
我们不想通过@EJB显式使用JNDI名称,因为earB将由外部客户实现和部署。
我们希望让earB 尽可能简单地通过BeanInterface 注入(inject)MyBean(并且对earA 的了解尽可能少)。
最佳答案
CDI 无法跨 EAR 工作。
您可以在 EAR B 中使用 @EJB(lookup=...)
来获取对 EAR A 中实现的 EJB 的引用。
在这种情况下,您不需要知道 EAR A 中的实现类,您只需要知道它的 JNDI 名称。您或许还应该使 EAR A 中的 EJB 公开远程接口(interface)。
如果您的两个 EAR 部署在不同的服务器实例上,您还需要一些供应商特定的配置来执行远程 JNDI 查找。
您还可以隐藏此 @EJB(lookup=...)
并使用 CDI 来注入(inject) EJB,方法如下: http://whoopdicity.blogspot.ro/2014/07/developing-dynamic-jee-service-client.html
关于java - CDI 跨容器注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25929395/