ITPub博客

首页 > 应用开发 > IT综合 > 关于Corba调用的Timeout 问题

关于Corba调用的Timeout 问题

原创 IT综合 作者:qiuhj1978 时间:2010-12-17 13:44:37 0 删除 编辑

关于Corba调用的Timeout 问题

在VisiBorker 下无论是C++ 还是 Java Corba 调用默认是没有超时的。也就是说调用将阻塞到有返回为止

如果要配置 Timeout,就必须为Orb配置相关的Policy


C++ 如下配置

Messaging::RebindMode rebind_mode = QoSExt::VB_TRANSPARENT;

CORBA::Any rebind_value;

rebind_value <<= rebind_mode;

CORBA::Policy_var rebind_policy =

orb->create_policy(Messaging::REBIND_POLICY_TYPE,

rebind_value);

CORBA::Any con_timeout_value; // 设置Bind连接的时候的TimeOut

CORBA::Any snd_timeout_value; // 设置发送时候的TimeOut

CORBA::Any rt_timeout_value; // 设置接收时候的TimeOut

// 5 seconds

con_timeout_value <<= (CORBA::ULongLong)(5 * 1000 * 10000);

snd_timeout_value <<= (CORBA::ULongLong)(5 * 1000 * 10000);

// 60 seconds

// note: rt = snd + rcv so rt > snd. if rt = snd, then it

// is effectively 0 and will not work.

rt_timeout_value <<= (CORBA::ULongLong)(15 * 1000 * 10000);

CORBA::Policy_var con_timeout_policy =

orb->create_policy(QoSExt::RELATIVE_CONN_TIMEOUT_POLICY_TYPE,

con_timeout_value);

CORBA::Policy_var snd_timeout_policy =

orb->create_policy(Messaging::RELATIVE_REQ_TIMEOUT_POLICY_TYPE,

snd_timeout_value);

CORBA::Policy_var rt_timeout_policy =

orb->create_policy(Messaging::RELATIVE_RT_TIMEOUT_POLICY_TYPE,

rt_timeout_value);

CORBA::PolicyList policies;

policies.length(4);

policies[0] = CORBA::Policy::_duplicate(rebind_policy);

policies[1] = CORBA::Policy::_duplicate(con_timeout_policy);

policies[2] = CORBA::Policy::_duplicate(snd_timeout_policy);

policies[3] = CORBA::Policy::_duplicate(rt_timeout_policy);

// Install the policies at the orb level.

CORBA::Object_var obj =

orb->resolve_initial_references("ORBPolicyManager");

CORBA::PolicyManager_var orb_mgr =

CORBA::PolicyManager::_narrow(obj);

orb_mgr->set_policy_overrides(policies, CORBA::SET_OVERRIDE);


Java 下如下配置

org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);

short rebindMode = TRANSPARENT.value;

Any con_timeout_value = orb.create_any();

con_timeout_value.insert_ulonglong(5 * 1000 * 10000); // 5 seconds

Policy con_timeout_policy =

orb.create_policy(RELATIVE_CONN_TIMEOUT_POLICY_TYPE.value,

con_timeout_value);

Any snd_timeout_value = orb.create_any();

snd_timeout_value.insert_ulonglong(5 * 1000 * 10000); // 5 seconds

Policy snd_timeout_policy =

orb.create_policy(RELATIVE_REQ_TIMEOUT_POLICY_TYPE.value,

snd_timeout_value);

Any rt_timeout_value = orb.create_any();

rt_timeout_value.insert_long(15 * 1000 * 10000); // 15 seconds

Policy rt_timeout_policy =

orb.create_policy(RELATIVE_RT_TIMEOUT_POLICY_TYPE.value,

rt_timeout_value);

Any rebindValue = orb.create_any();

RebindModeHelper.insert(rebindValue, rebindMode);

Policy rebind_policy =

orb.create_policy(REBIND_POLICY_TYPE.value, rebindValue);

PolicyManager orbManager =

PolicyManagerHelper.narrow(

orb.resolve_initial_references("ORBPolicyManager"));

// Install the policy at the orb level.

orbManager.set_policy_overrides(

new Policy[] {rebind_policy, con_timeout_policy,

snd_timeout_policy, rt_timeout_policy},

SetOverrideType.SET_OVERRIDE);

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/90000/viewspace-1043222/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    12
  • 访问量
    19660