gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:35:40 25 4
gpt4 key购买 nike

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

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

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

32.4.4 Remote Clients

A remote client of an enterprise bean has the following traits.

  • It can run on a different machine and a different JVM from the enterprise bean itaccesses. (It is not required to run on a different JVM.)

  • It can be a web component, an application client, or another enterprise bean

  • It can be a web component, an application client, or another enterprise bean.

  • To a remote client, the location of the enterprise bean is transparent.

  • The enterprise bean must implement a business interface. That is, remote clients may notaccess an enterprise bean through a no-interface view.

To create an enterprise bean that allows remote access, you must either:

  • Decorate the business interface of the enterprise bean with the @Remote annotation:

    @Remote public interface InterfaceName { ... }

  • Or decorate the bean class with @Remote, specifying the business interface orinterfaces:

    @Remote(InterfaceName.class)public class BeanName implements InterfaceName { ... }

Client access to an enterprise bean that implements a remote business interface isaccomplished through either dependency injection or JNDI lookup.

  • To obtain a reference to the remote business interface of an enterprise bean throughdependency injection, use the javax.ejb.EJB annotation and specify the enterprise bean'sremote business interface name:

    @EJB Example example;

  • To obtain a reference to a remote business interface of an enterprise bean through JNDIlookup, use the javax.naming.InitialContext interface's lookup method:

    ExampleRemote example = (ExampleRemote)InitialContext.lookup("java:global/myApp/ExampleRemote");

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

一些帖子说不可能使用 @ EJB 注释来调用远程 ejb:

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

最佳答案

我认为主要原因是通过注入(inject)远程(不同的 JVM)EJB 实例

@EJB(lookup = "jndi_name")

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

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

此外:

  • @EJB 只能在 CDI 托管 bean 中工作

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

关于java - 为什么要使用JNDI? - 远程EJB调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25613579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com