【发布时间】:2014-02-21 15:10:03
【问题描述】:
我想确保我的 CORBA 客户端对中断具有弹性,我让客户端正常工作,并且正在通过在 Windows 中禁用网络适配器来测试弹性。 CORBA 连接显然失败,并且该功能不可用,但是当再次启用适配器时它不会恢复。 ORB.init 再次被调用,但我仍然遇到同样的错误。
似乎在org.omg.CORBA.TRANSIENT 被抛出之后保持了一些静态状态,这会导致客户端报告网络连接超时,即使问题已完全解决。只有重新启动进程(dropwizard 可运行的 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);
即使应用程序在每次尝试执行操作时都调用 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>
在至少一种(可能是所有)情况下,在org.omg.CORBA.TRANSIENT 变为永久状态之前没有 org.omg.CORBA.TIMEOUT(即TIMEOUT 可能是日志噪音)。
显然,因为客户端也是一个服务器,我们希望不必在每次中断后都重新启动它(而且确实会发生,尤其是在开发环境中)。
实现是 JACORB (org.jacorb.orb.ORB / org.jacorb.orb.ORBSingleton) 版本 2.2.4。
【问题讨论】:
-
最新版本的 Jacorb (3.3) 没有这个问题....但是我们不应该在服务器上使用它。
-
是 JacORB 2.2.4 的问题吗?可以链接吗?
-
Google 无法找到任何细节。
-
一旦我抓住了它,我会怎么做?