gpt4 book ai didi

java - 如果它已经在客户端类路径中,为什么我必须为每个 JNDI 查找 EJB stub ?

转载 作者:行者123 更新时间:2023-11-30 09:46:09 25 4
gpt4 key购买 nike

我对使用 JNDI 查找 EJB stub 感到困惑。如果我有一个不动态下载 stub 的应用程序服务器,因此我在客户端类路径上有 stub ,那么我的客户端使用 JNDI 查找这些 stub 的目的是什么?

例如:

InitialContext ctx=new InitialContext();
SomeEJBHome stub=ctx.lookup("someEJB");

在这里,我取回了一个 stub ,它已经存在于我的类路径中。它被指定为通过 client.jar 或者你有什么。如果我已经有了 stub ,为什么还要查找它?

最佳答案

如果您的 EJB 客户端(调用者,即 web 应用程序)和 EJB 驻留在同一个 EAR(JVM 集群等)中,这将开箱即用。如果您有不同的 EAR,一个包含您的 Web 客户端,另一个包含您的 EJB,您必须通常使用 JAR 文件使客户端 stub 对客户端 EAR(eclipse 项目类型EJB 客户端)可用。

如果我已经有了它,为什么还要查找它呢?您必须查找 stub ,因为 EJB 是由 Java EE 容器管理的对象,因此您不能简单地实例化它。如果您查找它,您会检索到容器创建的对象。

顺便说一句:如果你使用 Java EE 6,你可以摆脱这些东西,改用依赖注入(inject)。

客户端 stub 将客户端实现到远程接口(interface),但它们不知道连接到哪里。下面几行定义了您的客户端用来连接到 EJB 容器的上下文。在远程客户端的情况下,您必须指定不同的属性,如主机名和端口,以便上下文知道从哪里检索对远程 EJB 的引用。

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, <NamingContextFactory>);
env.put(Context.PROVIDER_URL, <url:port>);
env.put(... container specific props);

InitialContext ctx = new InitialContext(env);

以下调用尝试在上面提供的远程位置找到 EJB:

SomeEJBHome stub = ctx.lookup("someEJB");

关于java - 如果它已经在客户端类路径中,为什么我必须为每个 JNDI 查找 EJB stub ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7261943/

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