bigDic 2014-07-15 04:28 采纳率: 0%
浏览 1880

两个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服务器之间进行远程调用的具体细节.先谢过了..

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 安装svn网络有问题怎么办
    • ¥15 Python爬取指定微博话题下的内容,保存为txt
    • ¥15 vue2登录调用后端接口如何实现
    • ¥65 永磁型步进电机PID算法
    • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
    • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
    • ¥15 如何处理复杂数据表格的除法运算
    • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
    • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
    • ¥15 latex怎么处理论文引理引用参考文献