2 a18251988255 a18251988255 于 2014.07.15 12:28 提问

两个GlassFish4.0服务器之间的远程EJB调用

两台服务器在不同的机器上,环境为jdk8,javaee7.
当我在一台服务器A上调用服务器B的时候,如果在普通的java main方法中调用 :

   InitialContext ctx = new InitialContext();
    ctx.lookup("corbaname:iiop:192.168.0.210:3700#java:global/RemoteEjb/SayHelloService!rm.SayHelloServiceRemote");
    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", "192.168.1.210");
    // 远程主机的缺省端口号
    props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
    // 创建远程上下文
    InitialContext ctx = new InitialContext(props);
    // 查找EJB,其中查找的参数为远程接口类
    System.out.println("k开始连接.....................");
    SayHelloServiceRemote testRmi = (SayHelloServiceRemote) ctx.lookup("java:global/RemoteEjb/SayHelloService");
    testRmi.say();
    System.out.println("k开始连接.....................");

这样总是会调用成功.
但是如果在javaee环境中,比如说servlet或者JSF的托管Bean中总是会出现各种错误,以下是我尝试的几种方法与对应的错误:
1.采用glssfish的配置文件,并在托管bean中调(此处没有对JNDI名字做详细的记录,有误差,但是在实际测试的时候肯定是正确的)用:ctx.lookup("java:global/RemoteEJBName")
<glassfish-web-app error-url="">
<ejb-ref>
<ejb-ref-name>RemoteEJBName</ejb-ref-name>
<jndi-name>corbaname:iiop:<servername or IP>:3700#java:global/<projectname>/FooClassImpl!com.test.foo.FooClass</jndi-name>
</ejb-ref>
</glassfish-web-app>

这种总是会报找不到JNDI之类的错误.
2.在托管Bean中类似在main方法中调用的一样.
error:avax.naming.CommunicationException: Communication exception for SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=192.168.1.104, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is java.rmi.RemoteException: CORBA INITIALIZE 0 No; nested exception is:

.希望有人能指点一下,在两个glssFish服务器之间进行远程调用的具体细节.先谢过了..

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!