从远程客户端获取初始上下文

时间:2016-09-29 11:15:24

标签: java java-ee jndi glassfish-4

请参阅以下代码:

Context ctx = null;
ctx=new InitialContext();
TestEJBRemote t = (TestEJBRemote) ctx.lookup("java:global/EJBTest/EJBTest-ejb/TestEJB");
System.out.println(t.getName("Ian"));

输出是我所期望的,即Hello Ian。

上面的代码假定客户端与Glassfish实例安装在同一台计算机上。如何从远程应用程序客户端获得相同的结果。我试过这个:

Context ic = new InitialContext();
        TestEJBRemote t = (TestEJBRemote) ic.lookup("corbaname:computer:4848#/a/b/TestEJB");
        System.out.println(t.getName("Ian"));

会产生错误。我假设端口是Glassfish安装的端口。

1 个答案:

答案 0 :(得分:1)

对于连接到GlassFish和Payara的远程客户端,我通常使用以下内容:

document.getElementById('pretestNameSelectHiddenTextQ0').value = test;

我想,从您的示例中,您的原始查找在此方案中可以正常工作:

Properties props = new Properties();  
props = new Properties();
props.setProperty("java.naming.factory.initial",
    "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs",
    "com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state",
    "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
props.setProperty("org.omg.CORBA.ORBInitialHost", "127.0.0.1");
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext ctx = new InitialContext(props);

MyBeanRemote bean = (MyBeanRemote) ctx.lookup("com.example.MyBean");

如果您有多个远程端点,则可以使用以下内容在它们之间进行负载平衡:

TestEJBRemote t = (TestEJBRemote) ctx.lookup("java:global/EJBTest/EJBTest-ejb/TestEJB");

参考:https://docs.oracle.com/cd/E26576_01/doc.312/e24930/java-clients.htm#GSDVG00075