2014-09-01 34 views
0

为什么只有JNDI被用来访问远程EJB(不同的JVM,不同的主机)?为什么不使用@EJB注释?为什么要使用JNDI? - 远程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允许远程访问,你必须:

  • 装饰企业bean与@Remote注释业务接口:

    @Remote公共接口InterfaceName {...}

  • 或者用@Remote修饰bean类,指定业务接口或 int erfaces:

    @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”);

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

几个后说,这是不可能的使用@ EJB注释用于调用远程EJB:

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

+0

作为你的[第二个链接(http://stackoverflow.com/a/16518704/3167508)状态,“只能当应用程序在同一个服务器实例部署使用@EJB注释。” – EJP 2014-09-02 00:34:34

+1

它是由相矛盾如下:“企业bean的远程客户机具有以下特征: 它可以在不同的机器和从企业bean它访问不同的JVM上运行” – DavidJesus03 2014-09-02 00:43:54

+1

也:“一个企业级bean实现远程业务接口是通过两种依赖注入(@EJB)或JNDI查找完成客户端的访问。” – DavidJesus03 2014-09-02 00:48:00

回答

0

相信主要的原因是远程的(不同的JVM)EJB实例的该注射通过

@EJB(lookup = "jndi_name")

仅由一些应用程序服务器并只与特定的配置支持。

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

此外:

  • @EJB只能在CDI工作管理豆

  • 使用这种方法迫使你定义每一次连接的连接属性,同时与程序的查找你可以在每一个改变他们请求(你可以自由地手工处理情况和连接,如果需要的话)。