我想确保我的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);
即使应用程序在每次尝试执行操作时调用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。
答案 0 :(得分:0)
提示:在应用程序中捕获CORBA异常是一种普遍的共识。特别是所有的网络电话。
在拔下网络电缆时,Windows正在删除网络接口。您!必须从那些中断中恢复过来。删除网络电缆不同于一般的网络中断,例如第3层没有连接!
答案 1 :(得分:0)
有点令人尴尬的是,这真的是游泳池的一个问题,记录在这里:https://github.com/chrisvest/stormpot/issues/72
我思考我在发布问题之前已经通过实验验证了汇集不是问题,为简洁起见省略了提及。有趣的是,要知道为什么这个问题得到了7个赞成票?也许还有另一个原因?