Tải bản đầy đủ (.pdf) (64 trang)

So sánh hiệu năng của các trình xử lý BPEL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.6 MB, 64 trang )

- 5 -

L 1
LI C 4
MC LC 5
DANH MC CÁC KÝ HIU VÀ CH VIT TT 7
DANH MC CÁC BNG 8
DANH MC CÁC HÌNH V 9
LI GII THIU 11
NG QUAN V KING DCH V VÀ NGÔN NG
BPEL 13
1.1Tng quan v king dch v 13
1.1.1King dch v 13
1.1.2Dch v Web 13
1.2Kt hp dch v 15
1.3 Ngôn ng BPEL 16
1.3.1



 16
1.3.2










 17
1.3.3







 19
1.3.4 19
1.3.5n 30
1.3.6X lý li 31
KIN TRÚC CÁC TRÌNH X LÝ BPEL 32
2.1 Khái nim trình x lý BPEL 32
2.2 Kin trúc mt s trình x lý tiêu biu 35
2.2.1 Apache ODE 35
2.3.2 ActiveVOS 38
2.3.3 Oracle BPEL Process Manager 41
 A MT S TRÌNH X LÝ BPEL 47
3.1  lý BPEL 47
3.2 Xây dng h thc 48
3.2.1 B lý BPEL 48
t trình x lý BPEL 48
3.2.3 Xây dng ng dng dch v Web 49
- 6 -
3.2.4 Trin khai công c  52
3.3 Thc hi 55
3.4  kt qu c 57
 lý 57

3.4.2 So sánh thi gian x lý ca các trình BPEL 60
3.5 So sánh các yu t k thut khác 64
KT LUN 66
TÀI LIU THAM KHO 67


- 7 -

Thut ng
Chú gii
CSDL
 d liu
Web Service
Dch v Web
BPEL
Ngôn ng thc thi tin trình nghip v
WSDL
Ngôn ng ch v
Activity
Tác v
SOA (Service Oriented
Architecture)
King dch v
XPath
Mô t thuc tính và phn t cng XML
WS-Addressing
c t nh dch v Web p
XML Schema
c t nh dng XML
Process

Tin trình nghip v
OASIS (Organization for the
Advancement of Structured
Information Standards)
T chc vì s phát trin ca các chun thông tin có
cu trúc
Axis2
Là nn tng dch v Web tt
các ng dng Web Service
REST (Representational State
Transfer)
Giao thc truyn trng thái
API (Application Programming
Interface)
Giao din lp trình ng dng
Apache ServiceMix
Là công c mã ngun m  kt ni các dch v
Web trong king dch v
JBI (Java Business Integration)
c t h tr vic giao tip các ng dng trong
king dch v
DAO
ng truy cp d liu
Jacob
Java Concurrent Object
Tomcat
Máy ch ng dng mã ngun m ca Apache
Jboss
Máy ch ng dng mã ngun m ca T chc
JBoss

WebSphere
Máy ch ng dng ca hãng IBM
Weblogic
Máy ch ng dng ca hãng Oracle
POJO (Plain Old Java Object)
ng
JMS (Java Message Service)
API giao tip cho phép truyn nhp theo
 point-to-point
JSON (Java Script Object
Notation)
Chunh dng d lii Javascript
XML (Extensible Markup
Language)
Ngôn ng u m rng
JCA (Java EE Connector
Architecture)
Gii pháp  kt ni các ng dcác
h thng ng dng
B2B (Business To Business)
n t gia các
doanh nghip

- 8 -

Bng 1.1 Các tác v trong ngôn ng WS-BPEL 2.0 20
Bng 2.1 Danh sách các trình x lý BPEL hin nay 34
Bng 3.1 Danh sách các công c trin khai ca các trình x  49
Bng 3.2 Danh sách các ng dng dch v Web 50
Bng 3.3 p gi yêu cn Dch v Web 54

Bng 3.4 Bng thng kê t l li ca ActiveVOS 58
Bng 3.5 Bng thng kê t l li ca Apache ODE 59
Bng 3.6 B thut ca các trình x lý BPEL 64




- 9 -

Hình 1.1 Mô hình cng dch v 13
Hình 1.2 Kt hp các ng dng theo kin trúc SOA trong mt h thng ngân hàng 15
Hình 1.3  17
Hình 1.4 Ví d v kiu liên kt ngoài - PartnerLink Type 18
Hình 1.5 Ví d v liên kt ngoài - PartnerLink 18
Hình 1.6 Cu trúc file BPEL 19
Hình 1.7 Cu trúc XML ca receive 21
Hình 1.8 Ví d v ng hp s dng invoke 22
Hình 1.9 Cu trúc XML ca invoke 22
ng hp s dng ca Reply 23
Hình 1.11 Cu trúc XML ca Reply 23
ng hp s dng ca Validate 24
Hình 1.13 Cu trúc XML ca Assign 25
ng hp s dng ca Throw 25
ng hp s dng ca ReThrow 26
Hình 1.16 Cu trúc XML ca Flow 27
Hình 1.17 Cu trúc XML ca Repeat Until 27
ng hp s dng ca Pick 28
Hình 1.19 Cu trúc XML ca If 28
Hình1.20 Cu trúc XML ca Flow 28
ng hp s dng ca Foreach 29

Hình 1.22 Cu trúc XML ca Foreach 29
Hình 1.23 Cu trúc XML ca While 30
ng hp s dng ca Scope 30
Hình 2.1 Mô hình kin trúc BPEL 32
Hình 2.2 Mu tin trình logic 33
Hình 2.3 Trình thit k ca Apache ODE trên nn tng Eclipse 35
Hình 2.4 Kin trúc ca Apache ODE 36
Hình 2.5 B sn phm ActiveVOS 38
Hình 2.6 Trình thit k ActiveVOS 39
Hình 2.7 Kin trúc tng quan ca ActiveVOS Server 39
Hình 2.8 Mi quan h ca Oracle BPEL Process Manager vi các thành phn khác 42
Hình 2.9 Kin trúc ca Oracle BPEL Process Manager 43
Hình 2.10 Trình thit k Jdeveloper cho Oracle BPEL Process Manager 45
Hình  lý BPEL 48
Hình 3.2 Giao din thit k mô phng tác v If-else dùng trình thit k Eclipse 51
Hình 3.3 File WSDL th hin giao tip vi dch v Web 52
Hình 3.4 Kt qu ng Jmeter 53
Hình 3.5 Ci dùng s dng Thread Group 54
Hình 3.6 Cu hình phép th vi dch v Web 55
- 10 -
a trình x lý BPEL 56
Hình 3.8 Cch v Web 56
Hình 3.10 Bi thi gian tr v trung bình ca Oracle BPEL Process Manager 57
Hình 3.11 Bi thi gian tr v trung bình ca ActiveVOS 58
Hình 3.12 Bi thi gian tr v trung bình ca Apache ODE 59
Hình 3.13 So sánh thi gian phn hi trung bình và ln nht ca tác v While 60
Hình 3.14 So sánh thi gian phn hi trung bình và ln nht ca tác v Flow 61
Hình 3.15 So sánh thi gian phn hi trung bình và ln nht ca tác v FlowDep 61
Hình 3.16 So sánh thi gian phn hi trung bình và ln nht ca tác v Sequence 62
Hình 3.17 So sánh thi gian phn hi trung bình và ln nht ca tác v If-else 62

Hình 3.18 So sánh thi gian phn hi trung bình và ln nht ca tác v Invoke 63

- 11 -

Ngày nay, các ng dng công ngh thông tin trong doanh nghip có nghip v ngày
càng phc ti nhng ng dng m ng nh i
nghip v trong th gii cnh tranh. Vi s ng các ng dng phát trin ngày càng
nhii phi có công ngh  có th kt hp nhng h thi. Kin
ng dch v (Service-Oriented Architecture - i nhm gii quyt bài
 vic phi hp các dch v  và các h thng có sn thành mt
quy trình thng nht.
Dch v Web (Web Service) là mt trong nhng công ngh  hin thc
hóa king dch v. Trong công ngh i ta s dng ngôn ng BPEL
(hay còn gi là WS-BPEL)  xây dng và thc thi các tin trình nghip v. Phiên bn
mi nht ca BPEL làWS-BPEL 2.0, là ngôn ng  mô hình hóa các tin trình nghip
v cho các ng dng theo king dch v. Các tin trình xây dng trên nn
ngôn ng BPEL ngoài các phép toán cng còn có các li gn các
dch v  thc thi các chn trúc SOA s dng chun giao tip
 kt ni vi các ng dng khác, chính vì th các h thn sa
i nhi kt ni vi các ng dng mi. Tic xây dng
xong s thc thi trên các trình x lý BPEL (BPEL engines). T thc hin ca các
tin trình hay các ng dng này ph thuc vào hia các trình x lý. Vì th,
vic la chn mt trình x lý BPEL phù hp vi yêu cu hong ca ng dng là
mi vi các doanh nghii phi có nh
chính xác hia các trình x lý BPEL.
Xut phát t yêu cu thc t trên, lu tin hành c, so sánh và 
hia mt s trình x lý BPEL thông dng hin nay. Lu s dng
 dng các công c  c thi gian phn hi
ca các trình x lý BPEL khi cùng thc hin mt tác v (Activities). Kt qu c s
  hi 

nhng li khuyi dùng khi la chn mt trình x lý BPEL c th. Cu
trúc ca lu nghiên cu tng quan v kin trúc
SOA và ngôn ng WS-BPEL 2.0,  tìm hiu kin trúc các trình x lý BPEL,
 a mt s trình x lý BPEL. Phn Kt lun
ng kt qu c ca lung phát trin ca lu

Trong C , luu lý thuyt kitp trung
vàocông ngh dch v Web cho phép xây dng quy trình nghip v t các dch v 
l và các ng dng trên nn tng và công ngh khác s dng ngôn ng WS-BPEL 2.0.
Ngôn ng WS-BPEL 2.0 có nhng tác v cu trúc  mô t hong nghip v,
và nhng tác v có kh i các dch v bên ngoài thông qua dch v Web. Nhng
- 12 -
tác v ng, n hit ng ca các tin
trình nghip v.
 tìm hiu kin trúc hong chung ca BPEL vi 03 thành phn chính:
Trình thit k BPEL, mu tin trình theo chun ngôn ng WS-BPEL 2.0 và trình x lý
BPEL. Có rt nhiu các trình x lý BPEL hin nay, tuy nhiên chúng ta s la chn tìm
hiu 03 trình x lý tiêu biu: Apache ODE, ActiveVOS và Oracle BPEL Manager.
Vic nghiên cu kin trúc ca các trình x lý này s c cái nhìn
tng quan v kic cách thc làm vic ca các trình x lý.
 s dn khai các trình x lý
và s dng các công c  i gian thc hin ca chúng. Trong phm vi lu
này, tác gi s la chn các tác v n và quan trng nht ca ngôn ng WS-BPEL:
If- u
a các trình x lý BPEL. Các ng dng dch v Web s c xây d mô
phng tng tác v c trin khai trên tng trình x lý vi ct
mnh. Tip theo, công c  t ng Apache Jmeter s c s d thc hin
i gian phn hi khi gi các yêu cn trình x lý. S ng các yêu cu s 
dng vi s  t qu c s c
 

Sau khi tic và phân tích, luc mt s kt qu so sánh
hinh gia các trình x lý. T ng kt lun v
hing thng khuyn cáo chi dùng khi la chn mt trình
x lý BPEL cho ng dng ca mình. V ng phát trin ca lu
tác gi s tip tc thc hin  ng khác nhau:
h u hành, máy ch ng dng, CSDL khác nhaunhi kt qu so sánh
tng h thông tin và chính xác nht v hia các trình x lý BPEL.

- 13 -
: 
 
 u nhng nét tng quan v king
dch v, công ngh Web Service và ngôn ng thc thi tin trình nghip v BPEL.
1.1 
1.1.1 King dch v
King dch v, là 'Khái niệm về hệ thống trong đó mỗi ứng
dụng được xem như một nguồn cung cấp dịch vụ'[20].Nói theo mgin thì
king dch v (SOA) là mng tip cn vi vic thit k và tích hp các
phn mm, ch thng theo dng module và có kh p thông qua
ng mng. H thng theo chun SOA là mt tp hp các dch v c chun
hóa trên mi vi nhau trong ng cnh mt tin trình nghip v. S cng tác
trong kin trúc SOA[20] c mô t u:

Hình 1.1Mô hình cng tác ng dch v
Trong mô hình trên, nhà cung cp dch v cn cung cp thông tin v dch v ca mình
cho mt   thông tin dch v mi thông tin v dch v 
c t, chp, giao din s dng. i s dng s tìm kim trên
Web  c thông tin mô t v dch v cng
kênh giao tip vi phía nhà cung cp.
King dch v cung cp gi gii quyt các v tn ti ca các h

thng hic tp, không linh hot và không nh. Mt h thng trin
khai theo mô hình ng dch v có kh  m rng, liên kt t
s và nn tng cho vic tích hp, tái s dng li nhng tài nguyên hin có. Tuy nhiên,
king dch v ch là mô hình lý thuy hin thc hóa mô hình này, mt
trong nhng công ngh c s dng ph bin là dch v Web (Web Service).
1.1.2 Dch v Web
Dch vWeb là ht nhân trong king dch v. Theo IBM [12Dịch vụ Web
là một hệ thống phần mềm được thiết kế để hỗ trợ giao tiếp giữa các hệ thống qua
- 14 -
mạng. Nó có giao tiếp được mô tả theo định dạng chung mà các máy tính có thể xử lý
được gọi là ngôn ngữ định nghĩa dịch vụ (Web Service Definition Language -
WSDL)Dch v Web có th cung cp mt chc mt tp các ch
nhnh. Dch v Web c mô t thông qua mt chunh dng XML, gi là
c t dch vp thông tin cn thi có th i dch v,
bao gnh dp (c các toán t), giao tha chc t 
t bên trong, vì th dch v Web c lp vi nn
tng phn cng và phn mm to nên nó. King dch v là c 
ca phát trin ng dng, chú trn qui trình nghip v và dùng giao tip chu
 phc tp k thui.
Thit k ng dch v tách riêng phn thc hin dch v (phn mm) vi giao tip gi
dch v u này to nên mt giao tip nht quán cho ng dng khách (client) s
dng dch v bt chp công ngh thc hin dch v. Thay vì xây dng các ng dng
  s, nhà phát trin s xây dng các dch v tinh gn có th trin khai và tái
s dng trong toàn b quy trình nghip vu này cho phép tái s dng phn mm
t linh hot vì nhà phát trin có th ci tin dch v mà không
làm n ng dng khách s dng dch vm quan trng nht ca
king dch v là kh t ni 'mm do'  loose coupling và tái s dng.
Các dch v có th c thit k trên nn tng và ngôn ng và ngôn ng bt k, hoàn
c lp vi h thng Client s dng nó. Ví d, mt ng dng Java có th liên kt
vi mt dch v Web vit bng công ngh c li.

Có th thy dch v Web giúp cho các ng dc tích h dàng
n ít i các công ngh  th, s dng dch v Web
i nhng li ích sau:
 Gim chi phí phát trin nghip vdch v cung cp có sn. Các dch
v này có th s dng li nhiu ln.
 Cung cp kh n khai gip có th
kt hp nhng dch v có s phát trin thành mt quy trình nghip v hoàn
thin.
 Vi ving ng dng h tr cho nghip v ca doanh
nghip vi chi phí r  này m ra nhi kinh doanh mi.
 u nay, dch v Web s dng các giao thch tr vic giao tip gia các
h thXML, SOAP và WSDL. SOAP hay còn gi là giao thc truy cp
n là giao th i thông tin gia các ng dng phân tán. Nó
da trên chun XML bao gm 3 phn sau: mt l   a khung v
p và cách x lý nó; mt tp các lu biu din các kiu d
liu mà ng di cho các th tc gi t xa. SOAP có th dùng
kt hp vi các giao th Trong hình 1.1  trên, nhà cung cp dch v
- 15 -
s dnh d ch v vi i s dng
 dng giao di kt ni ti dch v  th nghim và thc thi.
Vii gii s dng dch v và nhà cung cc thc hin qua các
p XML da trên giao thc SOAP.
1.2  
Ngày nay, vi s phát trin ca các ng dng nghip v i các ng dng công
ngh thông tin phi có mt h tng mm do và linh ho có th nhanh chóng thay
ng. Tuy nhiên, các ng dng CNTT truyn thc thit k
ng chng phc v mt nghip v nhnh, khó có kh 
i nghip v khi cn. Kt qu là rt nhiu các doanh nghip không th tip tc
s dng li các h th tích hp vi các thit k ca h thng mi.
Mt ra là làm sao có th s dng li các cha các h thng

 to ra mt h thng mi, nhm tit king
cnh tranh hin nay.
Kin trúc ng dch v i nhm gii quyi ta dùng thut ng
 tm dch là kt hp các dch v. Kin trúc này cho phép kt hp các
dch v ri rc thành mt ng dng nghip v thng nht mn và nhanh
chóng mà không ci các dch v . Không gi c
i dùng mun s dng mt cha ng dng có sn, h cn phi
tích hp mã ngun hon ca ng dng dng mi; kin trúc
ng dch v h tr kh  dng li các chn là
các dch v Web chy trên các h thc bit cakin trúc này giúp
cho vic tích h

Hình 1.2 Kt hp các ng dng theo kin trúc SOA trong mt h thng ngân hàng
- 16 -
Hình 1.2 trên là ví d v vic kt hp các ng dng trong mt ngân hàng theo kin trúc
ng dch v. Ngân hàng có rt nhiu các h thc phát trin trên các ngôn
ng        y trên các nn t   
     o ngân hàng mun xây dng mt h thng
giám sát giao dch t kim soát tt c giao dch ca các h thng: h thng
lõi (giao dch ngân hàng), h thng th ATM, h thng ngân hàng trc tuyn, h thng
chng khoán, h thng sàn vàng. Phòng phát trin ng d xut và xây dng h
thng ng dng theo king dch v s dng công ngh dch v Web  tn
dng h tng các ng dng sn có. Mi ng dng sn có s xây dng dch v Web 
a nó ng dng mi s gi các dch v Web  to
thành mt ng dng hoàn chnh.
Trong chi ng hóa dch v  n ích cho khách hàng, ngân hàng
mun trin khai dch v thanh toán tin thoi cho các khách hàng có nhu
cu. Công ngh dch v Web tip tc la ch giao tip vi h thng thanh
c ca công ty vin thông. Trong mô hình này, công ty ving
sn các dch v Web cho phép truy vc

cn xây dng quy trình nghip v cho phép giao tip (theo công ngh dch v Web) và
thc hin các giao dn thoi t tài khon c
y, công ngh dch v Web không ch cho phép kt hp nhiu ng dng và
dch v trong ni b doanh nghip mà còn h tr giao tip vi h thng ngoài theo mô
hình B2B (Business To Business).
 kt hc các dch v Web thành mt quy trình nghip v hoàn chi ta
s dng ngôn ng mô phng và thc thi tin trình nghip v có tên là BPEL. Ngôn
ng BPEL s nh n trình, các dch v ngoài và s dng các tác v, các phép
 to thành mt quy trình.  hi ngôn ng BPEL, chúng ta s
u v tng thành phn ca nó trong ph
BPEL
1.3.1 




BPEL (Business Process Execution Language )  h 






, 
















 Web . Phiên
bi vào tháng 07/2002. Vào tháng 05/2003 BPEL1.1
i da trên vic kt hp BPEL 1.0 vi mt s ngôn ng  trình lên
t chc OASIS [17] (mt t chn thông tin). Tháng 04/2007
t chc OASIS chui tên thành WS-n
nay.


c  cung cp sn các th mô t
  ng và các ho ng x lý ca mt quy trình nghip v  ng.
 n lý các s kin và ngoi l bo
toàn d liu khi có ngoi l xy ra. 





 i các thông
- 17 -
p dng XML n mt dch v khác, thao tác trên cu trúc XML, nhn các thông
p XML ng b ng b) t các dch v bên ngoài.



XML   :
WSDL, XML Schema 2.0, XPath 2.0 và WS-Addressing.
Hình 1.3 i th hin mô hình mt tin trình BPEL trong thc t. Mt tin trình
BPEL bao gm 2 tác v n nht là receive và reply  receive dùng
 nhn yêu cu vào, còn reply tr li kt qu i dùng. Gia 2 tác v này
còn có nhiu tác v khác làm nhim v gi các dch v Web t bên ngoài
(callbackClient), thc thi, x lý các d liu trung gian(Assignc khi tr v kt qu
cui dùng.

Hình 1.3 
1.3.2 
















 




: WSDL, XML Schema 2.0,XPath 2.0 và WS -














 . 










-to-














 Web 



. 




 















 . 










phc t cng thi s dc t c cung cp bi các
dch v khác trong quá trình 












.
Tuy nhiên có mt v t ra là: làm th  tin trình BPEL có th phân bit
c tng dch v mà nó tng h ng dch v 
ci dch v c s dng trong ti nào trong
toàn b ti gii quyt v này, m mi là
kiu liên kt ngoài - partnerLinkType và liên kt ngoài-partnerLink.
- 18 -
 Kiu liên kt ngoài - PartnerLinkType
Các dch v    a tin trình nghip v c mô t là các
PartnerLinkType trong BPEL. Mi mt PartnerLink c mô t bng mt
PartnerLinkType     i din cho tt c     
PartnerLink u PartnerLinkType ng ch có mt role thì role này s mc
c gán cho thuc tính myRole ca PartnerLinku có nhiu role thì
phi ch  cho bit PartnerLink này hong vi PortType nào.Hình 1.4 
ví d v mtkiu liên k
  ng h  ng, portTypes ca hai roles (MyRole 
PartnerRole)   namespaces 

. 



















 namespace, 












callback().

Hình 1.4Ví d v kiu liên kt ngoài - PartnerLink Type
 Liên kt ngoài - PartnerLink
Các dch v    a tin trình nghip v c mô t là các
PartnerLinkType trong BPEL. Mi mt PartnerLink c mô t bng mt
PartnerLinkType     i din cho tt c     
PartnerLink u PartnerLinkType ng ch có mt role thì role này s mc
c gán cho thuc tính myRole ca PartnerLinku có nhiu role thì

phi ch  cho bit PartnerLink này hong vi PortType nào. Hình 1.5 v
PartnerLinki partnerLinkType là “qname”:

Hình 1.5Ví d v liên kt ngoài - PartnerLink
PartnerLinkType c mô t trong tt khái nim m rng cho
chun WSDL. Còn các partnerLink nào c dùng trong tic ch
ra trong tp tin BPEL.K thut dùng partnerLink chng nhng gii quyc v
trên mà còn giúp tin trình BPEL có th d dàng tích hp vi các b phn khác trong
kin trúc tng th ca SOA. C th, nh t partnerLink, chúng ta s
<partnerLinks>
<partnerLink name="ncname" partnerLinkType="qname"
myRole="ncname"? partnerRole="ncname"?>+
</partnerLink>
</partnerLinks>
<partnerLinkType name="BuyerSellerLink"
XMLns="
<role name="Buyer">
<portType name="buy:BuyerPortType"/>
</role>
<role name="Seller">
<portType name="sell:SellerPortType"/>
</role>
</partnerLinkType>
- 19 -
dng thuc tính myRole  ch vai trò ca chính dch vWeb ca BPELc li,
thuc tính partnerRole  ch vai trò ca mt dch v bên ngoài.
1.3.3 































 XMLc mô t trong
BPEL giao tip vi trang Web và các dch v i tài liu XML(SOAP). Các khái
nim (phn t) chính trong mt tin trình BPEL bao gm:

<Process>:  



 <process>. 
.
<Imports>:









.
<PartnerLinks>: Cha tp hc s dng trong tin trình. Mi
partnerLink s thit lp mt quan h gia bn thân process vi mt service bên ngoài.
<Variables>: Phc dùng trong tin trình. Mi biu
phc tham chin mt kip (messageTypec mô t trong tp tin
WSDL.
<Sequence>: n chính mô t logic ca tin trình. Trong mt <sequence> s
cha nhiu tác v c trình bày chi tii). Mi tác v có mt nhim v c
th trong tin trình BPEL. Bn thân <sequence> t tác v, có th cha các
c cu trúc tun t khác.















:

Hình 1.6Cu trúc file BPEL
1.3.4 
Mt tic th hin qua các tác v, các tác v c thc
hin tun t theo cc khai báo trong tin trình. Trong ngôn ng WS-BPEL
2.0 các tác v 
Tác v n: Là các tác v , nó không th chc bt k các tác v nào
khác bên trong nó na.
<process name="helllo">
<import
location="aloArtifacts.wsdl"namespace=" />ample"
importType=" />
<partnerLinks>
………………
</partnerLinks>
<variables>
………………
<variables>
<sequence name="main">

</sequence>
</process>
- 20 -
Tác v cu trúc: Là các tác v có cu trúc, nó có th chc các tác v khác bên
trong nó.
Tác v x lý li:Các tác v c s d th lý li và các ngoi l xy ra
trong quá trình hong ca mt tin trình.
Tùy theo nhu cng hp c th mà ta có th chn và s dng các tác
v khác nhau.Bng sau mô t chi tit v các tác v trong ngôn ngWS-BPEL 2.0:
Bng 1.1Các tác v trong ngôn ngWS-BPEL 2.0
Tên tác v







Các tác v n
Empty
Là mt tác v c bit, không làm gì hc gi. Tác v này
c dùng khi cn có mt tác v t s cn mt
ng nào xy ra.
Invoke
ch v Web 
Receive
Nhn mp t mt dch v 
tác v bu mt tin trình mi
Reply
Gi tr m









Opaque
Activity
Là mt tác v dng dn xut
Assign
 










BPEL
Validate
Kim tra tính hp l ca các bi








 nh
a nó (chng ha trên XML Schema, hay

Các tác v 








If/Else
u kin
Pick
a chng nào
s c thc hin khi s kinh xy ra,
nu không có s kin nào xy ra trong mt thi gian ch nh
ng nào s c thc hi
Flow
X u khin ph thuc.
While


















- 21 -
RepeatUntil












 tin trình  Repeat

Foreach




















Wait








g 









Sequence
 










Scope
 chia nh tin trình thành các tác v có các nhim v
liên quan vi nhau (khi tin trình tr nên phc tp).
tác v 
Exit










Throw

Rethrow
Ném ra thông báo li sau khi lc th 
Compensate
Scope
Là tác v  th lý li. Khi có li xy ra thì tác v này s
 x lý li trên phc ch ra
Compensate
Có ch Compensate Scope 
 th lý li trên phm vi tt c các phm vi liên quan
 chi ting hp s dng ca tng tác v:
 Tác v nhn - Receive
Khi mt tin trình BPEL cn nhn mp thì tác vreceive s c s dng.
Tác v Receive s c dch v c nhp và các
Operation t dch v ngoài mà nó cn phi gi thông qua PartnerLink và Operation.
 thc c thì tác vreceive phc mt biu vào (input) hoc
phn d lic nhn. Cu trúc XML ca tác vreceive c th hi
sau:

Hình 1.7Cu trúc XML ca receive
<receive partnerLink=”NCName” portType=”QName”?
operation=”NCName”
variable=”BPELVariableName”? createInstance=”yes|no”?
messageExchange=”NCName”?
standard-attributes>
standard-elements
<correlations>?

<correlation set=”NCName” initiate=”yes|join|no”?>+
</correlations>
<fromParts>?
<fromPart part=”NCName” toVariable=”BPELVariableName”/>+
</fromParts>
</receive>

- 22 -
Hình 1.7 mô t khai báo tác v receive bao gm liên kt

s  c ng dng khách s dng và g   n. Bin BPEL
c s d  u vào t p.
 Tác v gi dch v Web - Invoke
 gi hoc thc hin mt dch v Web     dng tác v invoke. Tác
vInvoke mô t mt dch v Web thc hin  dt chiu- 
ch v Web nh thông qua PartnerLink và Operation
thc thi mt tác v Invoke thì cnh ít nht mt biu vào và có hoc không
có biu ra tùy thuc vào tng dng dch v Web mà nó gi thc hin (dt
chiu-ng1.8 mô t mng hp s dng c th ca
tác v invoke trong mt ch,chi dch
v Web: tìm kim tên khách hàng (InvokeLookupCustomerName):

Hình 1.8 Ví d v ng hp s dng invoke
Cu trúc XML cc mô t 

Hình 1.9Cu trúc XML ca invoke
<invoke partnerLink=”NCName” portType=”QName”?
operation=”NCName”
inputVariable=”NCName”? outputVariable=”NCFullName”?
standard-attributes>

standard-elements
<catch faultName=”QName”? faultVariable=”NCName”?
faultMessageType=”QName”? faultElement=”QName”?>*
activity
</catch>
<catchAll>?
activity
</catchAll>

<toParts>?
<toPart part=”NCName” fromVariable=”BPELVariableName”/>+
</toParts>
<fromParts>?
<fromPart part=”NCName” toVariable=”BPELVariableName”/>+
</fromParts>
</invoke>
- 23 -
Trong hình1.9, mt tác v invoke  gi dch v ngoài có partnerLink
        này s dng bi u vào
 kt qu v cho bin 
 Tác v nhn - Reply
Mt tác v nhn (Reply)t giá tr tr v trong mt tin trình BPEL.
Nc g c dch v Web i tác tip nhn thông qua tác
v Receive  dng onMessage p) hoc onEvent (s kin). Mt tác v Reply
thì s có cùng mt partnerLink và operation vi tác v Receive ng ca dch v
Web  thc, tác v Reply yêu cu phc t p
mà nó s gn trình xut hin li thì tác v Replys tr v mt ngoi l.
Chúng ta có th kim soát các li này bng cách thêm mt tác vThrow  tr v mt
ngoi l nu x lý trong tin trình b l10:


Hình 1.10ng hp s dng ca Reply
Cu trúc XML ca tác v Reply 

Hình 1.11Cu trúc XML ca Reply
<reply partnerLink=”NCName” portType=”QName”?
operation=”NCName”
variable=”BPELVariableName”? faultName=”QName”?
messageExchange=”NCName”?
standard-attributes>
standard-elements
<correlations>?
<correlation set=”NCName” initiate=”yes|join|no”?>+
</correlations>
<toParts>?
<toPart part=”NCName” fromVariable=”BPELVariableName”/>+
<toParts>
</reply>

- 24 -
Tác v reply trong hình1.11 có cùng partnerLink và operation vi tác v receive
ng vi nó. Tác v này dùng bi t qu tr v t
nhng tác v a tin trình.
 Tác v kim tra tính hp l - Validate
Mt tác vValidate có nhim v kim tra tính hp l ca các bin d
cn tài liu XML và WSDL. Bn có th kim tra mt danh sách
các bin vi tác v này. Trong sut quá trình hong nu có mt bic
tìm thy có cha mt giá tr không hp l thì tin trình ngay lp tc kt thúc vi mt
ngoi l invalidVariablesc  ng b kim tra tính hp
l ca các bic s dng trong tác vAssign. Hình 1.12 mô t mng hp s
dng ca Validatet gia tác v Assign và Reply  kim tra tính hp l ca các

bic khi tr v kt qu cui cùng:

Hình 1.12 ng hp s dng ca Validate
 Tác v gán - Assign
Tác v Assign  cp nht giá tr cho các bin cha bên trong nó. Assign
cp nht các bin bng mt trong nhng cách sau:
 Copy d liu t mt bin khác
 Khi tc ca XPath
 Khi tc ca WS-BPEL và mt s g thc m
rng khác
Cu trúc XML ca Assign c th hi
- 25 -

Hình 1.13Cu trúc XML ca Assign
Tác v Assign bao gm mt hoc nhiu th <copy>  thc hin nhiu thao tác gán
các bin. Mt th m 2 phn <from> - ngun và <to> - 
 sao chép bi bin ngun. Th <copy> không ch c s dng vi
các bin mà còn  sao chép mt phn t ca mt bin phc hp hoc s dng
biu thc thông qua ngôn ng XPATH
 Tác v x lý li- Throw
Tác v Throw c s d tr ra các li trong quá trình thc thi ca mt tin trình
BPEL. Bn có th thit l dn tác vThrow t các tác v khác
ng hp xy ra l14: Nt c ngoi l nào sinh ra 
mt trong các tác v bên trái, thì nó s c bt bi tiEventHanders
v các ngoi l thông qua tác v Throw  bên phi

Hình 1.14 ng hp s dng ca Throw
 Tác v x lý li bên ngoài - ReThrow
Tác v Rethrow c s dng hp bn không mun  ra ngoi l và
dng tin trình tm gây ra li mà mun ném nó lên mt cp x 

Rethrow  bt tt c các lc ném ra t tii bi tác
<assign>
<copy>
<from variable="TimesheetSubmissionFailedMessage" />
<to variable="EmployeeNotificationMessage" />
</copy>
<copy>
<from variable="TimesheetSubmissionFailedMessage" />
<to variable="ManagerNotificationMessage" />
</copy>
</assign>
- 26 -
v Throw.Ví d trong hình 1.15 mô t ng hp s dng ca Rethrow 
bt lc ném ra t tác v Throw  bên trái.

Hình 1.15 ng hp s dng ca ReThrow
Cu trúc XML ca tác vReThrow c th hi
 Tác v thoát tin trình - Exit
Tác v  chp dt ngay lp tc mt tic thi bt chp
mu kit ra.
 Tác v dng tin trình - Wait
Tác v Wait cho phép dng tin trình trong khon thi gian bao lâu(duration) hay là
n mt mc th:
Dng trong khon thi gian 1 giây: <wait for="'PT1S'"/>
Dng cho ti mc thi gian 0 gi ngày 12-12-2011  1-12-

 Tác v rng - Empty
Khi mt tin trình gp xa lý này thì s 
 Tác v th lý li trong phm vi - Compensate Scope
Là tác v  th lý li. Khi có li xy ra thì tác v này s  x lý li

trên phc ch ra. Nó là mt trong hai loi tác v th lý li ca BPEL.
- 27 -
 Tác v th lý li toàn tin trình - Compensate
Có ch lý li trên tt c các phm vi có liên quan.
 Tác v thc hin song song - Flow
Tác v Flow h tr thc hing b các x lý trong tin trình. Ngoài
h tr x ng b hóa các x lý thông qua các liên
kng b <link>. Mnh bi tên (name) và th hin s ràng buc
gia hai x lý. Ví d cu trúc XML ca tác v Flow :

Hình 1.16Cu trúc XML ca Flow
Trong bng 1.16 mô t cu trúc ca tác v Flow vi liên kt
 ni gia 2 th <sources> và <target>.
 Tác v lp Repeat Until
Mt tác vRepeatUntil c s d lp li mt x n khi nó sai
vu kit ra. Repeat Until có mi liên h vi tác vwhile. Repeat Until thc
hin x c khi ki  u kin còn while  c li.Cu trúc XML ca
repeat Until mô t trong hình 1.17 th hin vic gi dch v 
n khi bin $iterations >3.

Hình 1.17Cu trúc XML ca Repeat Until
 Tác v chn - Pick
X lý pick  bt các s kin xy ra trong tin trình và thc hin x lý gn
lin vi s kiu có nhiu s kin xy ra thì x lý s n nào xy ra
c.Cu trúc pick bao gm mt tp các nhánh có dng event/activity, và ch có mt
<repeatUntil>
<invoke name="increaseIterationCounter" />
<condition>
$iterations > 3
</condition>

</repeatUntil>
<flow>
<links>
<link name="timesheetEntriesApproval" />
</links>
<receive name="receiveEntriesApproval" >
<sources>
<source linkName="timesheetEntriesApproval" />
</sources>
</receive>
<targets>
<joinCondition>
$timesheetEntriesApproval
</joinCondition>
<target linkName="timesheetEntriesApproval" />
</targets>
</flow>
- 28 -
nhánh c gi khi có s kiy ra gn lin v kin khác
thì x lý pick s không quan tâm na, ví d mng hp s dng ca x lý Pick:

Hình 1.18 ng hp s dng ca Pick
If là mt tác v  u khin x lý ca tin trình. Các x u khin bi
mt hoc nhiu kic thit lp và có thêm mt tùy chn vi th Elseif. Các
u kic x lý If xem xét theo th t c thit lp trong cu trúc ca nó.

Hình 1.19Cu trúc XML ca If
Hình 1.19 mô t cu trúc ca tác v If vu kin : nm ca nhân
viên l    thc hin tác v invoke gi dch v  u
không s gi dch v  If phù hp vi bài toán

có nhiu kin d ling vi nhing khác nhau.
 Tác v x u khin ph thuc
Tác v Flowbao gm mt tp các hong x ng thng b bên trong nó,
vì th nó ch hoàn thành khi tt c các tác v bên trong th <Flow> hoàn thành. Mc
nh, các hong bên trong th <Flow> s x lý song song, tuy nhiên có th dùng
th <link> bên trong <Flow>  to s liên kt gia các hong.

Hình1.20 Cu trúc XML ca Flow
<sequence>
<flow>
<invoke partnerLink="Seller" />
<invoke partnerLink="Shipper" />
</flow>
<invoke partnerLink="Bank" name="transferMoney" />
</sequence>
<if name="isEmployeeGradeGreaterThan10">
<condition>
bpel:getVariableProperty(
"EmployeeHistoryResponse","emp:grade") > 10
</condition>
<invoke name="calculateSurcharge" />
<else>
<reply name="sendNoSurchargeInformation" />

</else>
</if>
- 29 -
Hình 1.20 ví d v tác v flow bao gm hai tác v <invoke>  bên trong nó. Hai tác v
này s hong thi. Tác v <invoke>transferMoney s thc hin sau khi tác
v Flow kt thúc.

 Tác v lp Foreach
Tác v Foreach cha mt tác v Scope bên trong và thc hin mt vòng lp các x lý
cha bên trong theo dm. Vic lp li các x lý bên trong foreach có th c
thc hin song song hoc tun t. S ln lp li ca foreach c thit lp bi biu
thc khi to cho giá tr bu và giá tr kt thúc. Mt th <startCounterValuec
 thit lp giá tr khu vòng lp và <finalcountervalue thit lp cho giá
tr kt thúc. Nu finalcounter value lstartcountervalue thì vòng lp s không
c thc hin. Ngoài ra trong x lý foreach còn có thêm mt tùy chn
complentioncondition u kin complention c s d ng hp x lý
foreach khi ta ch mun x lý N ca M nhánh trong x lý foreach(N<M). Hình 1.21 là
mng hp s dng ca foreach:

Hình 1.21 ng hp s dng ca Foreach

Hình 1.22Cu trúc XML ca Foreach
<forEach counterName="NCName" parallel="yes|no">
standard-attributes>
standard-elements
<startCounterValue expressionLanguage="anyURI">
</startCounterValue>
<finalCounterValue expressionLanguage="anyURI">
</finalCounterValue>
<completionCondition extension-attribute
extension-element
</completionCondition>
activity
</forEach>

×