【问题标题】:Cannot recover from org.omg.CORBA.TRANSIENT (becomes permanent)无法从 org.omg.CORBA.TRANSIENT 恢复(变为永久)
【发布时间】: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 无法找到任何细节。
  • 一旦我抓住了它,我会怎么做?

标签: java corba


【解决方案1】:
  1. 捕获 CORBA 异常并进行分析(超时?未知...?)
  2. 稍后重试或永不重试(但不要死)

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

拔下网络电缆时,Windows 正在移除网络接口。你!必须从这些中断中恢复。移除网线不同于一般的网络中断,例如第 3 层没有连接!

【讨论】:

  • 我显然捕获了 CORBA 异常并处理它们。问题是为什么 ORB.init 总是返回一些会引发 TRANSIENT 的东西,即使我将网络电缆放回去(并再次调用 ORB.init)。
  • 在您的代码示例中没有连接。只有 ORB::init() - 你的初始化引用没有显示!如果orbInitRef 是远程主机或网络的 corbaloc url,这可能会失败。
  • 您的意思是我的网址可能有误? ...但它在 99.9999% 的时间内都有效。
【解决方案2】:

有点尴尬的是,这确实是池的问题,记录在这里:https://github.com/chrisvest/stormpot/issues/72

以为在发布问题之前,我已经通过实验验证了池化不是问题,为简洁起见省略了提及。不过,知道为什么这个问题得到 7 个赞成票会很有趣?也许还有其他原因?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多