Showing posts with label enterprise service bus. Show all posts
Showing posts with label enterprise service bus. Show all posts

Thursday, December 14, 2017

Receive and Sent Http Cookies at Oracle Services Bus (OSB)

1. Pendahuluan
Sebuah services biasanya tidak hanya dibuat untuk menampilkan data langsung dari database, ada kalanya services yang akan dibuat tersebut memanggil sebuah service yang lainnya. Services yang akan dipanggil dengan asumsi bahwa services tersebut sudah "tepat". Nah, ada kalanya sebuah service akan menghasilkan cookies dan memerlukan parameter cookies juga untuk consume service itu sendiri. pada kesempatan kali ini, gw akan mencontohkan bagaimana membuat proxy service yang akan memanggil service dimana service tersebut menghasilkan dan mengirimkan cookies.

2. Implementasi
a). Copy WSDL
Nah, karena masih berbasis SOAP maka copy wsdl dari service yang akan dipanggil tersebut. tinggal klik kanan save as dari browser temen-temen sekalian.
b). Buat Businness Services
ketika temen2 sudah memcopy wsdl, langkah selanjutnya adalah membuat business services. jika menggunakan JDEV. pasti teman sudah bisalah ya, membuat BSnya.
c). Buat Proxy Services
1) buat pipeline
2) pada request pipeline, panggilah sebuah Business Service melalui plugin service callout yang MENGHASILKAN cookies. jika service yang memerlukan request payload tinggal menyesuaikan. pada contoh kali ini, request payload hanya merupakan tag , sehingga ketika dihit langsung menghasilkan cookies. seperti gambar di bawah ini.

pada assign response action, untuk mendapatkan cookiesnya tambahkan code seperti gambar di bawah ini 

"fn-bea:inlinedXML($outbound/ctx:transport/ctx:response/tp:headers/http:Set-Cookie)"
*NB : tanpa kutip dua ya

kita uji coba, melalui sbconsole, sehingga bentuk cookies nya menjadi seperti gambar di bawah ini.

apakah nanti semua services yang akan dipanggil berbentuk seperti di atas? TIDAK! semua tergantung developer pembuat service yang dipanggil.
3) hampir sama seperti tahap ke 2, yang membedakan kali ini panggil sebuah Business Services yang MEMERLUKAN cookies. jangan lupa tambahkan plugin Transport Header

isi pada transport header, seperti gambar di bawah ini 

selanjutnya langsung kita uji coba pada sbconsole seperti gambar di bawah ini

nah, sesudah sesuai ya baik yang dihasilkan dan dikirimkan. nah, pada tahap ke 3 ini cookies dikirimkan kembali dalam contoh ini untuk mendapatkan responsenya pada services yang berbeda. jadi total service yang dipanggil ada 2 (dua) :
1. 1 service untuk menghasilkan cookies. nah response yang berisikan cookies digunakan untuk memanggil service ke 2
2. service ke 2 memerlukan kiriman cookies dan request payload.

mudah bukan implementasi Cookies? selamat mencoba guys, jika ada pertanyaan atau kurang jelas silahkan ditanyakan ya...

Terima kasih! 

Tuesday, December 12, 2017

Hit Business Services as much as N Times

1. Pendahuluan
Terkadang suatu Business Services (BS) biasanya di hit paling tidak 1 (satu) kali melalui Proxy Services (PS). Akan tetapi, ada beberapa kejadian BS tersebut memang diperlukan untuk di hit sebanyak N. Secara garis besar, konsepnya sama seperti ketika hit BS 1 (satu) kali, yang membedakan BS tersebut diletakkan dalam for-each. Kejadian untuk hit BS lebih dari 1 (satu) bisa terjadi karena beda database atau karena input delimeter (seperated menggunakan spesial karakter).

2. Studi Kasus, Tujuan, dan Flowchart
a). Studi Kasus
Studi kasus yang akan diambil anggap saja terdapat 2 (dua) tabel terpisah, pada 2 (dua) database yang terpisah juga. dengan contoh skema tabel seperti gambar di bawah ini :
Seperti yang terlihat pada gambar di atas akan menjadi seperti ini :
A. B001 pada tabel TB01 akan di hit sebanyak 2 (dua) kali, karena pada tabel TB09 idLayanan B001 sebanyak 2 (dua) record.
B. B003 pada tabel TB01 akan di hit sebanyak 1 (satu) kali, karena pada tabel TB09 idLayanan B003 sebanyak 1 (satu) record.
C. dan begitu seterusnya untuk record yang lainnya.

b). Tujuan
para pembaca memahami bagaimana melakukan perulangan untuk hit sebanyak N ke BS.

c). Flowchart

3. Implementasi
a). XSD
pada tahap ini, XSD di-generate menggunakan JDEV. Untuk melakukan query dibantu dengan sebuah view. view tersebut memerlukan parameter (branchid) dan mengembalikan (branch_id, AreaId, dan AreaName).

i). Input
ii). Output

b). Business Services
pada tahap ini, tidak ada yang "special" untuk membuat BSnya karena untuk melakukan looping berada di level PS.

c). Proxy Services
1. tambahkan sebuah stage.
2. tambahkan for-each

3. didalam for-each tambahkan service callout, seperti gambar di atas.
4. tambahkan penamaan request dan response sesuai keinginan. Nah, kolom "service" panggilah nama BS yang sudah dibuat sebelumnya. sebagai contoh gambar di bawah ini. 
5. isi assign yang berada pada request action, seperti gambar di bawah ini
6. di dalam for-each, tapi di luar service callout tambahkan insert. fungsi insert disini guna menggabungkan hasil balikan dari setiap query. 
7. isi pada insert seperti gambar di bawah ini. Nah, expression "Result" isinya seperti disampingnya.
8. jika sudah lakukan transformasi ke bentuk (output) yang diinginkan. dalam hal ini, seperti screen shot xsd 

9. untuk sampai ke bentuk pada nomer 8 tidak langsung jadi, masih perlu transformasi lg.

tag "<get:LayananCollateral>" menyesuaikan terhadap point nomer 8 baris 172.
tag "<get:Layanan>" menyesuaikan terhadap point nomer 8 baris 178.
tag "<get:IDLayanan>, <get:NamaLayanan>" menyesuaikan terhadap point nomer 8 bari 181 dan 182.

jika sudah semua tinggal dicoba pada soapui, dengan hasil pada gambar di bawah ini.

seperti contoh bagian point 2 yang studi kasus, bahwa :
a. idbranch 1020 hanya memiliki 1 (satu) layanan.
b. idbranch 1021 memiliki 2 (dua) layanan.

dan sekian tutorial dari gw, kiranya bermanfaat bagi pembaca sekalian. jikalau ada yang kurang jelas, silahkan bertanya ya...

Sunday, November 3, 2013

REST service aggregator di WSO2 ESB


Sekilas tentang ESB (Enterprise Service Bus)

Enterprise Service Bus  adalah sebuah platform integrasi berbasisstandar yang mengabungkan pesan, layanan web, transformasi data dan routing cerdas untuk menghubungkdan dan mengkoordinasikan interaksi sejumlah aplikasi yang beragam di suatu perusahaan dengan integritas transaksional (Chappell, 2004). Dengan kata lain ESB merupakan infrastruktur untuk mengintegrasikan aplikasi dan layanan. ESB memperkuat SOA melalui pengurangan jumlah, ukuran dan kompleksitas interface antara aplikasi dan layanan-layanan.
(dikutip dari : wikipedia)

Tugas utama ESB adalah:
1. Memantau dan mengontrol routing pertukaran pesan antar layanan
2. Mengatasi konflik/ketidaksesuaian antar komponen layanan komunikasi
3. Mengontrol penyebaran dan versioning dari layanan
4. Penyusunan penggunaan servis redundant
5. Melayani jasa komoditas seperti penanganan event, transformasi data dan pemetaan, pesan dan event antrian serta penanganan, keamanan atau pengecualian penanganan, konversi protokol dan menguatkan kualitas layanan komunikasi yang tepat

Dalam tutorial kali ini kita akan menggunakan WSO2 ESB. ESB ini bersifat open source.  Mengenai detail dan keunggulan apa saja di software ini dapat dilihat di situsnya langsung di wso2.com

Tutorial kali ini akan khusus membahas bagaimana cara aggregasi 2 buah atau lebih Rest webservice menjadi 1 output Rest.

Pengantar Aggregator

The Aggregator menggabungkan hasil individu, pesan terkait sehingga mereka dapat diproses secara keseluruhan. Dia bekerja sebagai filter stateful, mengumpulkan dan menyimpan beberapa message individu menjadi satu set message yg utuh dan kemudian mengirimkannya. (http://www.eaipatterns.com/Aggregator.html)



Dari gambar diatas terlihat ada 3 service message yg terpisah (Inventory item 1, item 2, item 3). Oleh si Aggregator 3 message tersebut akan diAggregasi menjadi 1 service yakni Inventory Order

Kita langsung saja pada contohnya.

1. Download terlebih dahulu software WSO2 ESB (http://wso2.com/products/enterprise-service-bus/). Berbentuk file zip.
Ekstrak file zip tersebut, kemudian masuk ke direktori /bin.
Jalankan wso2server.bat (windows) atau wso2server.sh (Unix)

2.  Jalankan https://localhost:9443
Tampilannya seperti ini


Untuk login awal masukkan username : admin password : admin



3. Kita siapkan dulu Rest webservice nya.
Untuk cara paling mudah bisa menggunakan framework Spring MVC.
Untuk cara membuatnya akan saya bahas ditutorial berikutnya. ☺

Asumsinya sudah tersedia 2 buat Rest webservice :
http://localhost:8087/sample/students/get

saat dipanggil dibrowser outputnya seperti ini :

http://localhost:8088/sample/schools/getStudent


Kedua Rest diatas mempunyai element yg sama yakni ‘students’, tetapi isi datanya berbeda. Element inilah nanti yang akan diAggregasi
Syarat melakukan aggregasi, Rest nya harus memiliki element yg sama

4.  Kita buka kembali halaman console WSO2.
Kita kita pilih di menu utama -> Source View



Kemudian kita buat script service proxy sebagai berikut (misal namanya : StudentAggregateProxy) :

 <?xml version="1.0" encoding="UTF-8"?>  
 <proxy xmlns="http://ws.apache.org/ns/synapse"  
     name="StudentAggregateProxy"  
     transports="https,http"  
     statistics="disable"  
     trace="disable"  
     startOnLoad="true">  
   <target>  
    <inSequence>  
      <log level="full"/>  
      <clone>  
       <target>  
         <endpoint name="ReceiverA">  
          <address uri="http://localhost:8087/sample/students/get/" format="rest"/>  
         </endpoint>  
       </target>  
       <target>  
         <endpoint name="ReceiverB">  
          <address uri="http://localhost:8088/sample/schools/getStudent/" format="rest"/>  
         </endpoint>  
       </target>  
      </clone>  
    </inSequence>  
    <outSequence>  
      <aggregate>  
       <completeCondition>  
         <messageCount/>  
       </completeCondition>  
       <onComplete expression="//students">  
         <send/>  
       </onComplete>  
      </aggregate>  
    </outSequence>  
   </target>  
   <description/>  
 </proxy>  

Tambahkan script diatas ke source view. Kemudian update.

Pada inSequence kita melakukan clone masing masing target Rest endpoint.  
Pada outSequence (outputnya) kita melakukan aggregasi menggunakan tag <aggreagte>. Kemudian pada onComplete ditambahkan expression “//students”. Ini artinya element “students” dari masing masing output endpoint akan diAggregate (digabungkan)                      

5.  Maka service proxy akan otomatis ditambahkan.
Pilih menu Service -> list.
Maka service proxy “StudentAggregateProxy” akan muncul di listnya



Untuk mengedit service proxy yg kita sudah buat. Klik “Source View”



6.  Selanjutnya akan kita coba servicenya.
Kita panggil url : http://localhost:8280/services/StudentAggregateProxy/


di ouputnya terlihat data ‘students’ dari enpoint pertama dan kedua sudah digabungkan.

Sebenarnya masih banyak hal yang perlu diexplore tentang aggregasi ini, sebab masih ada kelemahannya. Misalnya salah satu endpoint sedang mati, maka service proxy nya tdk jalan atau error.
Jadi mari sama-sama kita pelajari :)

Terima kasih.
Selamat mencoba ☺