BPEL中的partnerlink和partnerlinktype

轉自:http://www.blog.edu.cn/user1/2746/archives/2005/241277.shtml#cmt


partnerlink是bpel與外界實體通訊的管道。下面是我對partnerlink和partnerlinktype個人的理解,不敢保證完全正確。(以下都省略partner前綴,簡稱link和linktype)

根據其中定義的role的個數是一個還是兩個,linktype分爲單向和雙向的。linktype只定義通道,但沒有定義通道的“方向”,即哪一 端是bpel,哪一端是客戶(相對於bpel)。對雙向的linktype而言,這個link中用myrole和partnerrole說明這個link 的“方向”。

單向的linktype說明這個link通道中的信息流動是單向的。所以對應的link中只能指定myrole或者partnerrole,不能二者兼有。

一個linktype可以定義多個link。比如loan-approval的例子(見bpel規範),一個叫customer的link和一個叫 approver的link都是同一個linktype——loanApprovalLinkType,這個linktype只有一個role,叫 “approver”。

bpel是真實approver的代理,從顧客customer的觀點來看,顧客認爲bpel就是approver。所以customer link中把approver定爲“myrole”。相對於真正的approver而言,bpel是客戶(準確的說是客戶的代理),真正的 approver是bpel的“partner”。所以approver link中,把approver認作“partnerrole”。這裏xxx link很容易混淆其含義。記住,link的名字都是相對bpel而言的。

可以推知,凡是link中定義了myrole的地方,都是外界要調用bpel的地方,必然對應receive操作。

另外,這種“代理”的用法可以認爲是對原先接口的重載。在loan-approval例子中,並不是所有的request都要經過真正的 approver;準確的說,真正的approver只處理數量>10000的貨物。小額的貨物就被bpel直接通過了。可以理解爲如下的代碼:
bool bpel::approve (request)
{
  if (request.amount > 10000)
      approver.approve(request);
  else
   ...
}
因爲是同一個role,對應同一個portType,所以接口是完全相同的。

發佈了51 篇原創文章 · 獲贊 1 · 訪問量 54萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章