關於Corba呼叫的Timeout 問題
關於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部落格 ” ,連結:http://blog.itpub.net/90000/viewspace-1043222/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個關於SessionBean呼叫的問題。SessionBean
- 一個關於值傳遞呼叫的問題
- 關於ListView的getView方法被多次重複呼叫的問題View
- 關於uniapp呼叫支付寶登入問題APP
- 關於非同步介面呼叫的疑問?非同步
- 關於SQLServerDriver的問題SQLServer
- 關於 JavaMail 的問題JavaAI
- 關於session的問題Session
- 關於jsp 呼叫bean 訪問sql-server資料庫問題JSBeanSQLServer資料庫
- 關於javascript的this指向問題JavaScript
- 關於跨域的問題跨域
- 關於bit code的問題
- 關於序列同步的問題
- 關於IP地址的問題
- 關於橋模式的問題模式
- 求救 關於parallel的問題Parallel
- 關於web start的問題Web
- 關於action的error問題Error
- 關於ADAPTER的問題APT
- 關於session的奇怪問題Session
- php關於session的問題PHPSession
- 關於diag程式的問題
- 關於SimpleJdonFrameworkTest的問題Framework
- 關於盒模型相關的問題模型
- 關於EL在JSP內呼叫RequestScope內建物件報錯的問題JS物件
- 關於FastHashMap問題ASTHashMap
- redis connect timeout問題排查Redis
- 關於js中的this呼叫JS
- 關於PHP佇列的問題PHP佇列
- 關於 Laravel 分頁的問題?Laravel
- 關於css權值的問題CSS
- 關於搜尋地址的問題
- 關於PWA落地問題的思考
- 關於 API 合併的問題API
- 關於excelize庫的使用問題Excelize
- 關於scanf函式的問題函式
- 關於session leak的問題分析Session
- 關於oracle的監聽問題Oracle