5. Sejarah BPEL4WS dan WS-BPEL
• BPEL4WS pertama kali disusun pada juli 2002
oleh tim gabungan IBM, Microsoft dan BEA ->
BPEL4WS 1.0
• SAP dan Siebel System bergabung dengan tim
dan merilis versi terbaru pada mei 2003 ->
BPEL4WS 1.1
• BPEL4WS 2.0 -> WS-BPEL
6. Prasyarat
• Pengetahuan dasar tentang orchestration,
coordination, atomic transactions dan
business process
• Dibahas di bab 6
7. The process element (1)
• Merupakan root elemen
• Mempunyai atribut name
• Untuk mendefinisikan proses
8. The process element (2)
<process name="TimesheetSubmissionProcess"
targetNamespace="http://www.xmltc.com/tls/proce
ss/" xmlns=
"http://schemas.xmlsoap.org/ws/2003/03/
business-process/"
xmlns:bpl="http://www.xmltc.com/tls/process/"
xmlns:emp="http://www.xmltc.com/tls/employee/"
xmlns:inv="http://www.xmltc.com/tls/invoice/"
xmlns:tst="http://www.xmltc.com/tls/timesheet/"
xmlns:not="http://www.xmltc.com/tls/notificatio
n/"> <partnerLinks> ... </partnerLinks>
<variables> ... </variables> <sequence> ...
</sequence> ... </process>
9. The partnerLinks and
partnerLink elements (1)
• Berperan sebagai client pada proses
• Bertanggungjawab melakukan invoke pada
process service
• Dapat di-invoke oleh process service itu sendiri
• Memiliki atribut myRole dan partnerRole
11. The partnerLinks and
partnerLink elements (2)
<partnerLinks>
<partnerLink name="client"
partnerLinkType="tns:TimesheetSubmissionType"
myRole="TimesheetSubmissionServiceProvider"/>
<partnerLink name="Invoice" partnerLinkType="inv:InvoiceType"
partnerRole="InvoiceServiceProvider"/>
<partnerLink name="Timesheet"
partnerLinkType="tst:TimesheetType"
partnerRole="TimesheetServiceProvider"/>
<partnerLink name="Employee"
partnerLinkType="emp:EmployeeType"
partnerRole="EmployeeServiceProvider"/>
<partnerLink name="Notification"
partnerLinkType="not:NotificationType"
partnerRole="NotificationServiceProvider"/>
</partnerLinks>
12. The partnerLinkType element (1)
• Digunakan untuk setiap partner service yang
terlibat pada proses
• Biasanya juga di-embedded pada dokumen
WSDL
• Berisi satu elemen peran (role) masing-masing
myRole dan partnerRole
• Pada akhirnya bisa memiliki satu atau dua
elemen child role
13. The variables element (1)
• Menyimpan informasi yang berhubungan
dengan workflow logic
• Keseluruhan pesan dan set data dalam bentuk
XSD dapat disimpan ke dalam variable dan
ditemukan kembali selama proses berjalan
15. The getVariableProperty and
getVariableData functions (1)
• getVariableProperty(variable name, property
name)
– Mengekstrak nilai properti dari suatu variabel
– Argumen pertama adalah nama variabel,
argumen kedua adalah nama propertinya
• getVariableData(variable name, part name,
location path)
– Mendapatkan data dari variabel
16. The getVariableProperty and
getVariableData functions (2)
getVariableData ('InvoiceHoursResponse',
'ResponseParameter')
getVariableData ('input','payload',
'/tns:TimesheetType/Hours/...')
17. The sequence element (1)
• Untuk mengatur serangkaian aktivitas agar
bisa dieksekusi secara berurutan (sequential)
• Sebuah aktivitas akan dieksekusi apabila
aktivitas sebelumnya pada antrian telah
selesai
18. The sequence element (2)
<sequence>
<receive> ... </receive>
<assign> ... </assign>
<invoke> ... </invoke>
<reply> ... </reply>
</sequence>
19. The invoke element (1)
• Menjelaskan operasi dari partner service yang
diinginkan (invoke) selama eksekusi
• Pada elemen invoke biasanya terdapat 5
atribut yaitu partnerLink, portType, operation,
inputVariable, dan outputVariable
20. The invoke element (2)
<invoke name="ValidateWeeklyHours"
partnerLink="Employee"
portType="emp:EmployeeInterface"
operation="GetWeeklyHoursLimit"
inputVariable="EmployeeHoursRequest"
outputVariable="EmployeeHoursResponse"/>
21. The receive element
• Membuat informasi process service yang
diinginkan pada saat melakukan request
• Process service sebagai process provider yang
diminta (invoke)
22. The receive element (2)
<receive name="receiveInput“
partnerLink="client"
portType="tns:TimesheetSubmissionInterface"
operation="Submit“
variable="ClientSubmission“
createInstance="yes"/>
23. The reply element (1)
• Terdapat pada pertukaran synchronous
• Bertanggungjawab untuk membuat detil dari
respon pesan yang dikembalikan kepada
partner service yang melakukan request
• Berhubungan dengan elemen partnerLink
yang sama dengan yang ada pada elemen
receive
24. The reply element (2)
<reply partnerLink="client"
portType="tns:TimesheetSubmissionInterface"
operation="Submit"
variable="TimesheetSubmissionResponse"/>
25. The switch, case, and
otherwise elements (1)
• Untuk menambahkan conditional logic pada
definisi proses
• Mirip dengan switch case yang ada di bahasa
pemrograman
– Switch -> scope
– Case -> conditional
– Otherwise -> catch all the end of switch (if case
condition failed, otherwise are executed)
26. The switch, case, and
otherwise elements (2)
<switch>
<case condition=
"getVariableData('EmployeeResponseMessage',
'ResponseParameter')=0"> ... </case>
<otherwise> ... </otherwise>
</switch>
27. The assign, copy, from, and
to elements (1)
• Memiliki kemampuan untuk meng-copy
values diantara variable proses
• Memungkinkan kita memberikan data melalui
proses sebagai informasi yang diterima dan
dirubah selama proses eksekusi
28. The assign, copy, from, and
to elements (2)
<assign>
<copy>
<from variable="TimesheetSubmissionFailedMessage"/>
<to variable="EmployeeNotificationMessage"/>
</copy>
<copy>
<from variable="TimesheetSubmissionFailedMessage"/>
<to variable="ManagerNotificationMessage"/>
</copy>
</assign>
29. faultHandlers, catch, and
catchAll elements
• Digunakan untuk penanganan kondisi error
• Dapat terdiri dari banyak elemen catch
• Penanganan default error menggunakan
elemen catchAll
30. faultHandlers, catch, and
catchAll elements
<faultHandlers>
<catch faultName="SomethingBadHappened"
faultVariable="TimesheetFault"> ...
</catch>
<catchAll> ... </catchAll>
</faultHandlers>
31. Pembahasan WS-BPEL lebih lengkap
• Silahkan kunjungi:
http://docs.oasis-open.org/wsbpel/2.0/wsbpel-v2.0.pdf
33. WS-Coordination Overview
• Mekanisme untuk manajemen konteks yang
dapat diterapkan untuk mendukung transaksi
yang atomic dan long-running
• Mekanisme coordination meliputi activation
service, registration service, a coordinator, dan
participants yang mengimplementasikan protokol
atau aturan-aturan tertentu (bab 6)
• Manajemen konteks diatur secara otomatis oleh
orchestration engine yang dibuat dengan WS-
BPEL
34. WS-Coordination Overview
• The CoordinationContext element
• The Identifier and Expires elements
• The CoordinationType element
• The RegistrationService element
37. Overview
• Menerjemahkan business process requirement
yang telah dikumpulkan dengan tepat dan
menerapkannya dengan akurat
• Perhitungkan semua kemungkinan variasi
aktivitas proses
• Termasuk memperhitungkan bagaimana proses
merespon kondisi yang abnormal
• Proses bisnis dirancang oleh analis menggunakan
alat permodelan -> menghasilkan diagram
• Implementasi ditangani oleh arsitek dan
developer
45. Step by step
1. Menyusun skenario interaksi antara process
service dengan partner service
2. Merancang antarmuka process service
3. Membentuk percakapan process service
4. Menentukan logika proses
5. Meluruskan skenario interaksi dan perbaiki
proses (opsional)
46. 1. Menyusun skenario interaksi
• Tentukan requirement pertukaran pesan pada
process service dari informasi-informasi yang
sudah ada sebelumnya:
– Workflow logic yang telah dihasilkan pada service
modelling (Bab 12)
– Kandidat process service (Bab 12)
– Service design yang sudah ada (existing) (Bab 15)
• Informasi ini digunakan untuk menganalisis
semua kemungkinan interaksi antara process
service dan partner service
49. The incoming and outgoing request messages
expected to be processed by the Timesheet
Submission Process Service ->
50. 2. Merancang antarmuka process
service
• Menentukan definisi service untuk process service
• Dalam bentuk WSDL
• Tinjau ulang WSDL yang sedang digunakan dan perbaiki
jika memang diperlukan
• Beberapa pertimbangan:
– Dokumen input dan output diperlukan untuk setiap proses
operasi
– Buat definisi WSDL portType atau interface area
– Tambahankan informasi meta melalui element document
– Terapkan standar disain tambahan dalam batas-batas alat
permodelan
51. Case Study
• Timesheet submission process hanya memiliki
satu operasi yang dijalankan oleh client yaitu
submit
54. 3. Membentuk percakapan process
service
• Tentukan partner services yang berpartisipasi
dalam proses dan tetapkan perannya
• Tambahkan konstruk partnerLinkType pada
WSDL
• Buat elemen partnerLink untuk setiap
partner service
• Tentukan elemen variable untuk mewakili
pertukaran pesan masuk dan keluar
56. The partnerLinks construct containing
partnerLink elements for each of the process
partner services
<partnerLinks> <partnerLink name="client"
partnerLinkType="bpl:TimesheetSubmissionProcessType"
myRole="TimesheetSubmissionProcessServiceProvider"/>
<partnerLink name="Invoice"
partnerLinkType="inv:InvoiceType"
partnerRole="InvoiceServiceProvider"/> <partnerLink
name="Timesheet" partnerLinkType="tst:TimesheetType"
partnerRole="TimesheetServiceProvider"/>
<partnerLink name="Employee"
partnerLinkType="emp:EmployeeType"
partnerRole="EmployeeServiceProvider"/> <partnerLink
name="Notification"
partnerLinkType="not:NotificationType"
partnerRole="NotificationServiceProvider"/>
</partnerLinks>
57. The variables construct containing individual variable elements
representing input and output messages from all partner
services and for the process service itself
<variables> <variable name="ClientSubmission"
messageType="bpl:receiveSubmitMessage"/> <variable
name="EmployeeHoursRequest"
messageType="emp:getWeeklyHoursRequestMessage"/> <variable
name="EmployeeHoursResponse"
messageType="emp:getWeeklyHoursResponseMessage"/> <variable
name="EmployeeHistoryRequest"
messageType="emp:updateHistoryRequestMessage"/> <variable
name="EmployeeHistoryResponse"
messageType="emp:updateHistoryResponseMessage"/> <variable
name="InvoiceHoursRequest"
messageType="inv:getBilledHoursRequestMessage"/> <variable
name="InvoiceHoursResponse"
messageType="inv:getBilledHoursResponseMessage"/> <variable
name="TimesheetAuthorizationRequest"
messageType="tst:getAuthorizedHoursRequestMessage"/> <variable
name="TimesheetAuthorizationResponse"
messageType="tst:getAuthorizedHoursResponseMessage"/> <variable
name="NotificationRequest" messageType="not:sendMessage"/>
</variables>
58. 4. Menentukan logika proses
• Semua keterangan alur kerja yang ada
diimplementasikan dengan WS-BPEL
59. Case Study: A descriptive, diagrammatic view of the
process definition logic
60. Case study
• Yang pertama dibuat adalah elemen receive
<receive xmlns=
"http://schemas.xmlsoap.org/ws/2003/03/business
-process/" name="receiveInput"
partnerLink="client"
portType="tns:TimesheetSubmissionInterface"
operation="Submit" variable="ClientSubmission"
createInstance="yes"/>
• Ketika document diterima, format data akan
disimpan pada variable clientSubmission
61. Case study
• Sebelum meminta invoice service, konstruk
assign digunakan untuk mengekstrak value
dari timesheet document yang sekarang
tersimpan di clientSubmission
<assign name="GetInvoiceID">
<copy>
<from variable="ClientSubmission" part="payload"
query="/TimesheetType/BillingInfo"/>
<to variable="InvoiceHoursRequest"
part="RequestParameter"/>
</copy>
</assign>
62. Case study
• Tambahkan elemen invoke setelah variable
InvoiceHoursRequest berisi value yang
dibutuhkan untuk operasi GetBilledHours
pada service invoice
<invoke name="ValidateInvoiceHours"
partnerLink="Invoice"
operation="GetBilledHours"
inputVariable="InvoiceHoursRequest"
outputVariable="InvoiceHoursResponse"
portType="inv:InvoiceInterface"/>
63. Case study
• Setelah meminta invoice service, pesan balasan
diterima dari operasi GetBilledHours. Pesan ini
disimpan pada variabel InvoiceHoursResponse.
• Jika nilainya sesuai dengan yang ada pada
timesheet document, maka jam kerja telah
divalidasi.
• Untuk memutuskan hal ini maka digunakan
element switch, case dan condition
64. Case study
<switch name="BilledHoursMatch">
<case condition=
"getVariableData('InvoiceHoursResponse',
'ResponseParameter') !=
getVariableData('input','payload',
'/tns:TimesheetType/Hours/...')">
<throw name="ValidationFailed"
faultName="ValidateInvoiceHoursFailed"/>
</case> </switch>
Jika kondisi tidak terpenuhi maka lama jam telah divalidasi, jika
terpenuhi maka terjadi fault yang direpresentasikan melalui elemen
throw kemudian mengirimkan ke faultHandlers
67. Update employee profile history
• Menggunakan konstruk assign dengan dua
copy, satu untuk mendapatkan EmployeeID
dari variabel ClientSubmission , sedang yang
lainnya untuk menambahkan employee profile
history
68. Update employee profile history
Two copy elements used to populate the EmployeeHistoryRequest message
<assign name="SetEmployeeMessage">
<copy>
<from variable="ClientSubmission" .../>
<to variable="EmployeeHistoryRequest" .../>
</copy>
<copy>
<from expression="..."/>
<to variable="EmployeeHistoryRequest" .../>
</copy>
</assign>
<invoke name="UpdateHistory"
partnerLink="Employee"
portType="emp:EmployeeInterface"
operation="UpdateHistory"
inputVariable="EmployeeHistoryRequest"
outputVariable="EmployeeHistoryResponse"/>
70. 5. Menyelaraskan skenario interaksi
dan memperbaiki proses (opsional)
• Tinjau ulang skenario interaksi yang telah
dibuat pada step 1
• Periksa definisi proses WS-BPEL untuk
optimasi
71. Keuntungan dari menyelaraskan
process logic dengan WS-BPEL
• Peta interaksi servis adalah bagian yang sangat
penting sebagai dokumentasi untuk perbaikan ke
depan atau sebagai knowledge transfer
requirement
• Sebagai uji kasis sehingga memungkinkan penguji
menghindari analisis yang bersifat spekulasi
• Memungkinkan ditemukannya penambahan
process logic yang baru dan juga fault handling
baru.
72. Keuntungan memperbaiki process
definition
• Menggabungkan atau menataulang aktifitas
untuk meraih peningkatan performa
• Mempersingkat markup code untuk
memudahkan maintenance
• Menemukan fitur yang sebelumnya tidak
dipertimbangkan.