【问题标题】:CDI Cross container injectionCDI跨容器注入
【发布时间】:2014-09-19 08:20:06
【问题描述】:

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

假设我们有两个 ear-filesearA 和 earB 以及一个共享 jar:

耳朵

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

耳朵

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

apiJar

包含 BeanInterface 的 jarfile 存在于 earA 和 earB 中

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

我们希望让 earB 通过 BeanInterface 注入 MyBean 尽可能简单(并且尽可能少地了解 earA)。

【问题讨论】:

  • 您从哪里找到 CDI 可以跨 Ears 工作的信息?如果在 earB 中您将使用 @EJB,您将能够通过引用 earA 中的 bean 来映射它,而无需更改 earB 中的代码。
  • 不确定我是否理解您的回复。你想让我使用@EJB注解然后指定实现类吗?然后我强迫我的外部客户了解我的实施细节......
  • 没有。使用标准的@EJB(name="ejb/BeanInterfaceRef") BeanInterface myBean; 然后你可以将ejb/BeanInterfaceRef映射到earA中bean的JNDI,例如通过jboss.xml - docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/…

标签: java jboss7.x cdi ejb-3.1


【解决方案1】:

CDI 不能跨 EAR 工作。

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

在这种情况下,您不需要知道 EAR A 中的实现类,您只需要知道它的 JNDI 名称即可。您还应该让 EAR A 中的 EJB 暴露一个远程接口。

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

您还可以隐藏此 @EJB(lookup=...) 并使用 CDI 通过执行此处描述的操作来注入 EJB:http://whoopdicity.blogspot.ro/2014/07/developing-dynamic-jee-service-client.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2017-10-25
    • 2014-06-02
    相关资源
    最近更新 更多