【问题标题】:Looking for the timeout properties of native java CORBA on the client-side在客户端寻找本机 java CORBA 的超时属性
【发布时间】:2013-06-17 04:18:51
【问题描述】:

我正在使用 CORBA (ORB),它Java 自带,没有使用第三方库。

我需要 CORBA 客户端超时属性,以便在客户端设置超时并限制连接保持打开的时间量;应该为所有场景设置它,以限制最大请求时间:

  • 正在初始化连接

  • 重新绑定连接

  • 总请求时间

我正在通过在服务器上设置睡眠(在服务器方法逻辑内)进行测试,而客户端根本没有超时

在网上很难找到合适的文档;我尝试使用以下所有属性,但无济于事:

aProperties.put("com.sun.CORBA.transport.ORBTCPReadTimeouts", "100:300:3000:20"); aProperties.put("com.sun.corba.eetransport.ORBTCPTimeouts", "500:2000:50:1000"); aProperties.put("com.sun.corba.ee.transport.ORBWaitForResponseTimeout", 10);

为了更清楚起见,在这些属性旁边(上图)使用属性 org.omg.CORBA.ORBInitialHostorg.omg.CORBA.ORBInitialPort 设置主机和端口>.

任何帮助表示赞赏:)

【问题讨论】:

  • 这些属性没有正式记录;他们从发布到发布;并且它们的名称是在源代码中动态构建的。祝你好运。
  • 非常感谢,这真的很有帮助。这里没有侮辱,但这很令人沮丧。我实际上是在反编译 rt.jar 来找到这些东西!
  • 我遇到了同样的问题...每当客户端代码开始从服务器读取时,它可以无限期地等待...帮助:)?

标签: java properties timeout corba


【解决方案1】:

我可以确认 glassfish 3.1.2.2 中的建议解决方案 Some CORBA properties are ignored 确实有效。

需要的系统属性可以设置为java命令参数

java -Dcom.sun.corba.ee.transport.ORBWaitForResponseTimeout=5000 -Dcom.sun.corba.ee.transport.ORBTCPConnectTimeouts=100:500:100:500 -Dcom.sun.corba.ee.transport.ORBTCPTimeouts=500:2000:50:1000 -cp ..

或在您的代码中使用

System.setProperty("com.sun.corba.ee.transport.ORBWaitForResponseTimeout","5000");

必须将 ORB 参数设置为系统属性。如果用作 InitialContext 的属性,它们将无效。

【讨论】:

  • 感谢您的回复!我不得不使用一个名为jacORB 的库来处理超时。至于您的建议,我怀疑该修复程序仅适用于 Glassfish,因为我记得曾尝试设置系统属性.. 但已经很长时间了,我不确定我设置了哪些属性..
【解决方案2】:

阅读this Oracle blog 了解有关超时的更多信息。这对我帮助很大。

com.sun.corba.ee.impl.orbutil.ORBConstants 中有许多 ORB 配置参数(请注意,这是 GlassFish ORB,而不是 JDK ORB)。与传输超时相关的常量是:

  • TRANSPORT_TCP_TIMEOUTS_PROPERTY

这控制了当 ORB 正在读取数据并且没有一次获取所有数据时的重试行为。它是 TcpTimeouts 的一个实例。默认值为 2000:6000:20。

  • TRANSPORT_TCP_CONNECT_TIMEOUTS_PROPERTY

这是与此讨论相关的内容。当尝试连接到 IOR(EJB 引用的连线代表)时,它控制 ORB 在客户端的行为方式。这也是 TcpTimeouts 的一个实例。默认值为 250:60000:100:5000。

  • WAIT_FOR_RESPONSE_TIMEOUT

这控制客户端在成功发送请求后等待响应的时间。默认值为 30 分钟。 两个 TcpTimeouts 使用相同的配置语法:

initial:max:backoff[:maxsingle](由 : 分隔的 3 或 4 个正十进制整数的序列)

地点:

  • initial 是以毫秒为单位的第一次超时
  • ma​​x 是最大等待时间(在最后一次等待之前,可以超过这个时间),以毫秒为单位
  • backoff是每次增加超时时间的退避因子(乘法其实是(backoff+100)/100,所以是20 是 1.2 而 100 是 2,但我们在这里避免使用任何浮点)。 这通常应该在 10 到 100 之间。
  • ma​​xsingle 是最长单次等待时间。这是可选的,如果未定义,则默认为 Integer.MAX_VALUE。

它的工作原理如下:

第一次超时持续初始毫秒。 每个后续超时都是通过乘以退避因子从前一个超时获得的(如上所述) 任何超时都不能超过 maxsingle 毫秒:一旦达到此值,任何后续超时都具有相同的值。 在最后一次超时之前花费的总时间小于最大值。注意最后一次超时可能会导致总时间超过max。

【讨论】:

  • 感谢您的回复!正如我在上面的评论中提到的,我必须使用一个名为 jacORB 的库来处理超时。不幸的是,我坚持使用 Sun JDK 环境,而不是 glassfish。很高兴听到它对你有用..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多