如何指定从中获取EJB的服务器?

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

但是,这似乎只有在您想从本地计算机上获取bean时才会出现这种情况。 我想像大多数用户那样从远程服务器上获取bean。 如何指定服务器URL? 我是否将地图传递给InitialContext构造函数?

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

我想从远程服务器上取下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中运行。

您使用与运行服务器端时使用的代码完全相同的代码来执行远程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系统属性。