如何指定从中获取EJB的服务器?
在java EE中,从远程服务器获取EJB的方式是在JNDI中查找它。 规范定义了给定bean类型的JNDI名称。
但是,这似乎只有在您想从本地计算机上获取bean时才会出现这种情况。 我想像大多数用户那样从远程服务器上获取bean。 如何指定服务器URL? 我是否将地图传递给InitialContext
构造函数?
注意:还有另一个问题几乎相同,但自从规范定义可移植JNDI名称以来,这已经过时了。
我想从远程服务器上取下bean
是的,您需要指定远程服务器(JNDI服务)正在运行/侦听的IP /端口。
如何指定服务器URL?
您必须设置属性: java.naming.provider.url并使其可用于InitialConetxt。
这可以通过不同方式完成:
- 使用jndi.properties文件
- 使用系统属性
- 在创建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.ORBInitialHost
和org.omg.CORBA.ORBInitialPort
系统属性。