2014-09-19 51 views
1

我们无法找到从另一个容器注入SessionBean的正确方法。CDI跨容器注入

比方说,我们有两个耳朵文件EARA和EARB和共享的jar:

EARA

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

EARB

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

apiJar

包含BeanInterface的jar文件存在于earA和earB中

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

我们想让earB通过BeanInterface注入MyBean尽可能简单(以及尽可能少的earA知识)。

+0

你在哪里找到的信息CDI将整个耳朵工作?如果在earB中使用@EJB,则可以通过引用earA中的bean来映射该值,而不会在earB中更改代码。 – Gas 2014-09-19 08:55:44

+0

不知道我明白你的回应。你希望我使用@EJB注释,然后指定实现类?然后我强迫我的外部客户了解我的实现细节...... – mathiasbn 2014-09-19 11:04:29

+0

编号使用标准的'@EJB(name =“ejb/BeanInterfaceRef”)BeanInterface myBean;'然后您可以将'ejb/BeanInterfaceRef'映射到bean的JNDI在earA中,例如通过jboss.xml - http://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/ENC_Usage_Conventions-EJB_References_with_jboss.xml_and_jboss_web.xml.html – Gas 2014-09-19 11:22:17

回答

1

CDI不适用于EAR。

您可以使用@EJB(lookup=...)在EAR B小跑到耳朵A.

实施。在这种情况下,EJB的引用,你不需要知道在耳实现类,你只需要知道它的JNDI名称。你也应该在EJB EAR A中暴露一个远程接口。

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

您还可以隐藏这个@EJB(lookup=...)并在这里做一些说明使用CDI注入EJB:http://whoopdicity.blogspot.ro/2014/07/developing-dynamic-jee-service-client.html