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 数学的三元一次方程求解
    • ¥20 iqoo11 如何下载安装工程模式
    • ¥15 本题的答案是不是有问题
    • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
    • ¥15 C++使用Gunplot
    • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
    • ¥15 matlab数字图像处理频率域滤波
    • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
    • ¥15 ELGamal和paillier计算效率谁快?
    • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题