java - CDI 跨容器注入(inject)

标签 java jboss7.x cdi ejb-3.1

我们无法找到从另一个容器注入(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/

相关文章:

java - 基于 JVM 的 longpoll/comet 客户端 : routers killing idle connections

mysql - JBoss 新数据源向导中无法选择 MySQL 驱动程序

java - javax.enterprise.context.RequestScoped 在字段上指定时如何工作?

java.sql.DriverManager 无法识别 java.sql.Driver stub

java - 在 Web 应用程序中管理数据库连接的最佳实践

java - 如何在jboss中修改standalone-full-ha.xml

java - Jasper 尚未更新 jboss 服务器中的文件 7

java - CDI 拦截器作用域注解

java - 如何将带有 CDI 的 @Alternative 从 WAR 注入(inject)到 EJB 模块中

java - jax-rs 路由优先级冲突