2

在 java EE 中,从远程服务器获取 EJB 的方式是在 JNDI 中查找它。该规范定义了给定 bean 类型的 JNDI 名称。

但是,这似乎仅适用于您想从本地计算机上获取 bean。我想像大多数用户一样从远程服务器上获取 bean。如何指定服务器 URL?我是否将地图传递给InitialContext构造函数?

注意:还有另一个问题几乎相同,但自从规范定义可移植 JNDI 名称以来,它已经过时了。

4

2 回答 2

2

我想把 bean 从远程服务器上取下来

是的,您需要指定远程服务器(JNDI 服务)正在运行/侦听的 IP/端口。

如何指定服务器 URL?

您必须设置属性: java.naming.provider.url并使其可用于 InitialConetxt。

这可以通过不同的方式完成:

  1. 使用 jndi.properties 文件
  2. 使用系统属性
  3. 在创建 InitialContext 对象的新实例时传递 Hashtable 中的值。

实例化 InitialConetct 的此属性和其他必要属性的具体值取决于供应商。JBoss 的一个示例可能是:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://yourServer:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

请记住,如果您不指定 url,则无法从远程服务器获取 EJB 存根。“远程”是指客户端和服务器在不同的 JVM 中运行。

于 2013-09-22T15:49:45.270 回答
2

您使用与运行服务器端时完全相同的代码对远程 EJB 进行 JNDI 查找:

Context context = new InitialContext();  // No properties needed
MyEJB myEjbInstance = (MyEJB) context.lookup("ejb/MyEJB");

或者,当然,您可以注入它:

@EJB
private MyEJB myEjbInstance;

要使命名上下文起作用,您必须将应用程序作为 Java EE应用程序客户端运行。应用程序客户端与常规的独立 Java 程序完全一样,具有标准main方法;唯一的区别是它需要以不同的方式运行。Java EE 规范中没有指定这种方式,因此每个应用程序服务器都有自己的方式。

例如,GlassFish 要求应用程序客户端在类路径中包含一些特殊的 jar,并设置几个系统属性。具体来说,您必须在类路径中包含lib/gf-installer.jar其清单引用的所有 jar,并且必须设置org.omg.CORBA.ORBInitialHostorg.omg.CORBA.ORBInitialPort系统属性。

于 2013-09-21T22:49:20.253 回答