在客户端查找本机java CORBA的超时属性

时间:2013-06-20 10:35:45

标签: java properties timeout corba

我正在使用 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.ORBInitialHost org.omg.CORBA.ORBInitialPort

感谢任何帮助:)

2 个答案:

答案 0 :(得分:2)

我可以确认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的Properties,则它们无效。

答案 1 :(得分: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

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

  • WAIT_FOR_RESPONSE_TIMEOUT

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

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

其中:

  • 初始是第一个以毫秒为单位的超时
  • max 是最长等待时间(在最后一次等待之前,可以超过这段时间),以毫秒为单位
  • 退避是每次超时增加的退避因子(乘法实际上是(退避+ 100)/ 100,所以20 是1.2和100是2,但我们避免在这里使用浮点)。 这应该介于10到100之间。
  • maxsingle 是最长的单个等待时间。这是可选的,如果未定义,则默认为Integer.MAX_VALUE。

其工作原理如下:

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