有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

然而,这似乎只是当你想从你的本地计算机上得到一个bean的时候。我想像大多数用户一样,从远程服务器上获取bean。如何指定服务器URL?我是否将映射传递给InitialContext构造函数

注意:有another question几乎相同,但自从规范定义了可移植JNDI名称以来,它已经过时了


共 (2) 个答案

  1. # 1 楼答案

    I want to get the bean off a remote server

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

    How do I specify the server URL?

    必须设置属性:java。命名。供应商。url并将其提供给InitialConetxt

    这可以在different ways中完成:

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

    该属性和实例化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中运行

  2. # 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方法;唯一的区别是,它需要以不同的方式运行。JavaEE规范中没有指定这种方式,因此每个应用服务器都有自己的方式

    例如,GlassFish需要一个应用程序客户端来include some special jars in the classpathset a couple system properties。具体来说,必须在类路径中包含lib/gf-installer.jar及其清单引用的所有JAR,并且必须设置org.omg.CORBA.ORBInitialHostorg.omg.CORBA.ORBInitialPort系统属性