为什么要使用JNDI? - 远程EJB调用

时间:2014-09-01 22:29:04

标签: java java-ee ejb jndi

为什么只有JNDI用于访问远程EJB(不同的JVM,不同主机)?为什么不使用@ EJB注释?

在所有EJB书中都提到您可以使用@EJB注释访问远程EJB。

示例:http://docs.oracle.com/javaee/7/tutorial/doc/ejb-intro004.htm

  

32.4.4远程客户端

     

企业bean的远程客户端具有以下特征。

     
      
  • 它可以在与企业bean不同的机器和不同的JVM上运行   访问。(不需要在不同的JVM上运行。)

  •   
  • 它可以是Web组件,应用程序客户端或其他企业bean

  •   
  • 它可以是Web组件,应用程序客户端或其他企业bean。

  •   
  • 对于远程客户端,企业bean的位置是透明的。

  •   
  • 企业bean必须实现业务接口。也就是说,远程客户端可能不会   通过无接口视图访问企业bean。

  •   
     

要创建允许远程访问的企业bean,您必须:

     
      
  • 使用@Remote注释装饰企业bean的业务接口:

         

    @Remote public interface InterfaceName {...}

  •   
  • 或者使用@Remote装饰bean类,指定业务接口或   接口:

         

    @Remote(InterfaceName.class)   公共类BeanName实现InterfaceName {...}

  •   
     

客户端访问实现远程业务接口的企业bean是   通过依赖注入或JNDI查找完成。

     
      
  • 通过获取对企业bean的远程业务接口的引用   依赖注入,使用javax.ejb.EJB注释并指定企业bean   远程业务接口名称:

         

    @EJB示例示例;

  •   
  • 通过JNDI获取对企业bean的远程业务接口的引用   查找,使用javax.naming.InitialContext接口的查找方法:

         

    ExampleRemote示例=(ExampleRemote)   InitialContext.lookup("的java:全球/对myApp / ExampleRemote&#34);

  •   

上面的文字不正确?我还没有看到任何使用依赖注入(@EJB)来访问远程EJB的代码。这是不可能的?

有几篇文章称,无法使用@ EJB注释来调用远程ejb:

PD:对不起。我的英语很基础。

1 个答案:

答案 0 :(得分:0)

我认为主要原因是通过

注入远程(不同的JVM)EJB实例

@EJB(lookup = "jndi_name")

仅受某些应用程序服务器支持,并且仅受特定配置支持。

即。只有在独立文件中定义remote-outbound-connection时,JBoss 7+才支持它(并在包含对该连接的引用的已部署包的META-INF文件夹中添加jboss-ejb-jar.xml)。 / p>

此外:

  • @EJB只能在CDI托管bean中使用

  • 使用此方法会强制您为每个连接定义一次连接属性,而使用编程查找时,您可以在每个请求中更改它们(如果需要,您可以手动处理上下文和连接)。