LAN 上的 CORBA 查找挂起

Posted

技术标签:

【中文标题】LAN 上的 CORBA 查找挂起【英文标题】:CORBA lookup on a LAN hangs 【发布时间】:2014-11-22 12:09:49 【问题描述】:

是否需要任何特定的 Glassfish 配置才能允许跨 LAN 进行远程 CORBA 查找?或者,路由器防火墙是否需要配置?

我如何troubleshoot这个连接?

CORBA lookup client 只是挂起:

BUILD SUCCESSFUL
Total time: 3 seconds
Nov 22, 2014 3:45:26 AM aggregatorclient.AggregatorClient remoteEJB
WARNING: org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, Context.SECURITY_CREDENTIALS=pass123, org.omg.CORBA.ORBInitialHost=192.168.0.119, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, Context.SECURITY_PRINCIPAL=user1

当从 localhost 运行时(即从 localhost,连接到 localhost),所有东西都在同一台计算机上,连接工作正常。

CORBA 连接查找参数,在jndi.properties:

java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory
java.naming.factory.url.pkgs=com.sun.enterprise.naming
java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
Context.SECURITY_PRINCIPAL=user1
Context.SECURITY_CREDENTIALS=pass123
org.omg.CORBA.ORBInitialHost=192.168.0.119
org.omg.CORBA.ORBInitialPort=3700

连接客户端代码:

package aggregatorclient;

import dur.ejb.AnswerSessionBeanRemote;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class AggregatorClient 

    private static final Logger log = Logger.getLogger(AggregatorClient.class.getName());

    public static void main(String[] args) 
        try 
            new AggregatorClient().remoteEJB();
         catch (NamingException ex) 
            Logger.getLogger(AggregatorClient.class.getName()).log(Level.SEVERE, null, ex);
        
    

    private void remoteEJB() throws NamingException 
        Context ctx = new InitialContext();
        log.warning(ctx.getEnvironment().toString());
        Object obj = ctx.lookup("dur.ejb.AnswerSessionBeanRemote");
        AnswerSessionBeanRemote asbr = (AnswerSessionBeanRemote) obj;
        log.info("answer\t" + asbr.lifeTheUniverseAndEverything());
    


client 使用 Glassfish appclient 执行。

【问题讨论】:

哦,我得检查一下服务器上的 3700 端口。然后检查路由器上的3700端口?路由器是否需要路由端口3700到服务器ip地址? 客户端和服务器之间的 CORBA 连接通常是两个套接字对,一个用于客户端到服务器,另一个用于返回。如果允许两个连接通过,请检查您的防火墙设置。 CORBA 确实支持 BiDIR GIOP,这会导致一个连接,也许可以在 glassfish 中配置? @JohnnyWillemsen 我正在尝试 configure glassfish 获取 CORBA。 【参考方案1】:

在远程主机上运行的独立 ejb 客户端具有相同的“永远挂起”查找行为。事实证明,这与服务器主机将自己的主机名解析为自己的非环回地址的能力有关。我通过在/etc/hosts 中添加/修复一个条目来解决它:

10.0.10.102    my-server-hostname

我检查了服务器实际上可以使用hostname -i 解析正确的 IP 地址:

$ hostname -i
10.0.10.102

重新启动 GlassFish 后,远程查找和调用 EJB 非常棒!

说明

我在嗅探客户端和服务器之间的流量后找到了这个解决方案。底层协议是 GIOP(没听说过)。

在执行远程查找时,我的客户的请求实际上能够到达 GlassFish。但是服务器回复了一个误导性的“位置转发”响应,将127.0.1.1 表示为IIOP:Profile_host127.0.1.1 是我的服务器主机名在修复 /etc/hosts 之前解析到的环回 IP 地址。

【讨论】:

以上是关于LAN 上的 CORBA 查找挂起的主要内容,如果未能解决你的问题,请参考以下文章

R:在doParallel /降雪中制作集群挂起

几分钟后,圣杯上的气氛挂起

在 Windows 上的 CygWin 下调用 python 挂起

Kubernetes 上的 GitLab Auto DevOps 挂起,网络超时,无法执行 yj

在树莓派终端上更新时间时,QT 上的 exe 文件挂起

使用 Jenkins 从共享文件夹上的存储库中提取时 Git 挂起