" org.omg.CORBA.BAD_OPERATION:无法提取ulonglong"使用JacORB客户端超时策略

时间:2014-10-20 11:18:25

标签: java timeout corba policy jacorb

我正在尝试使用带有java的JacORB为CORBA连接实现客户端超时策略。 以下是我尝试实现此方法的第一种方法

long timeout = 10000000L;
org.omg.CORBA.Any relativeRoundtripTimeoutValue = orb.create_any();
TimeTHelper.insert(relativeRoundtripTimeoutValue,timeout);
Policy[] policies = new Policy[1];
try {
    policies[0] = orb.create_policy(org.omg.Messaging.RELATIVE_RT_TIMEOUT_POLICY_TYPE.value,
                                        relativeRoundtripTimeoutValue);
    <client_stub>._set_policy_override(policies, SetOverrideType.ADD_OVERRIDE);
} catch (PolicyError e) {
    e.printStackTrace();
}

此实现抛出

Caused by: org.omg.CORBA.BAD_OPERATION: Cannot extract ulonglong  vmcid: 0x0  minor code: 0     completed: No
at org.jacorb.orb.Any.checkExtract(Any.java:118)
at org.jacorb.orb.Any.extract_ulonglong(Any.java:467)
at org.jacorb.orb.policies.RelativeRoundtripTimeoutPolicy.<init>(RelativeRoundtripTimeoutPolicy.java:58)
at org.jacorb.orb.ORB.create_policy(ORB.java:774)

但是当我将RELATIVE_RT_TIMEOUT_POLICY_TYPE更改为REPLY_END_TIME_POLICY_TYPE时,它会在没有异常的情况下运行,但由于客户端在没有超时的情况下等待而没有产生预期的结果。

我也尝试了以下方法并且它没有例外地运行但是客户端再次无限期地等待而没有超时。

Policy retquestTimeoutPolicy = new org.jacorb.orb.policies.RelativeRoundtripTimeoutPolicy (1000 * 10000);
applicationDataAccess._set_policy_override(new Policy[]{retquestTimeoutPolicy}, SetOverrideType.ADD_OVERRIDE);

我可能在这里错过了一些小事,但我对corba流是新手。所以任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

设置覆盖时,它适用于新对象,例如

new_object_with_policy = applicationDataAccess._set_policy_override(....

尝试这样做?

答案 1 :(得分:0)

要设置此策略,您应该使用set_policy_overrides对象的PolicyManager方法:

  long timeout = 10000000L;
  PolicyManager opm = (PolicyManager) orb.resolve_initial_references("ORBPolicyManager");
  Any relativeRoundtripTimeoutValue = orb.create_any();
  TimeTHelper.insert(relativeRoundtripTimeoutValue, timeout);
  Policy[] policies = new Policy[1];
  policies[0] = orb.create_policy(RELATIVE_RT_TIMEOUT_POLICY_TYPE.value,
      relativeRoundtripTimeoutValue);
  opm.set_policy_overrides(policies, SetOverrideType.ADD_OVERRIDE);

OpenORB源https://sourceforge.net/projects/openorb/files/OpenORB/1.4.0/OpenORB-1.4.0-src.zip/download中有一个示例: \ OpenORB \ src \ examples \ org \ openorb \ orb \ examples \ messaging \ Client.java