无法从org.omg.CORBA.TRANSIENT恢复(成为永久性)

Sim*_*bbs 9 java corba

我想确保我的CORBA客户端能够适应中断,我让客户端工作,并通过Windows中的网络适配器禁用来测试弹性.CORBA连接显然失败,并且功能不可用,但是当再次启用适配器时它不会恢复.ORB.init再次调用,但我继续得到相同的错误.

似乎在org.omg.CORBA.TRANSIENT抛出后会保留一些静态状态,导致客户端报告网络连接超时,即使问题已完全解决.只有重新启动进程(dropwizard runnable JAR)才能让客户端再次运行.

这是启动ORB的代码:

String[] orbInits = {"-ORBInitRef", orbInitRef};
Properties properties = new Properties() {
    {
        setProperty("org.omg.CORBA.ORBClass", orbClass);
        setProperty("org.omg.CORBA.ORBSingletonClass", orbSingletonClass);
        setProperty("jacorb.connection.client.connect_timeout", "" + connectionTimeout);
    }
};
return ORB.init(orbInits, properties);
Run Code Online (Sandbox Code Playgroud)

即使应用程序在每次尝试执行操作时调用ORB.init(即关闭ORB池),问题仍然存在.

客户端在中断场景中抛出的错误包括:

org.omg.CORBA.TIMEOUT: connection timeout of 2000 milliseconds expired
org.omg.CORBA.TRANSIENT: Retries exceeded, couldn't reconnect to <IP>:<PORT>
Run Code Online (Sandbox Code Playgroud)

在至少一个(可能是所有)情况下,在org.omg.CORBA.TRANSIENT成为永久性之前没有org.omg.CORBA.TIMEOUT (即TIMEOUT可能是对数噪声).

显然,因为客户端也是一个服务器,我们宁愿不必在每次中断后重新启动它(并且它们确实发生了,特别是在开发环境中).

实现是JACORB(org.jacorb.orb.ORB/org.jacorb.orb.ORBSingleton)版本2.2.4.

tue*_*ist 0

  1. 捕获 CORBA 异常并分析(超时?未知...?)
  2. 稍后重试或永不重试(但不会死)

提示:在应用程序中捕获 CORBA 异常是普遍共识。尤其是网络通话方面。

当拔掉网络电缆时,Windows 正在删除网络接口。你!必须从这些中断中恢复过来。拔掉网线与一般的网络中断不同,就像第三层没有连接一样!