Saturday, December 16, 2017

Main Proxy Service Based on WSDL in OSB 12c

Apa itu Proxy Service?
  • Proxy Service digunakan untuk melakukan message processing antara Business service dan client service.
  • Setiap Proxy Service memiliki URi yang digunakan untuk meng-execute Proxy Service tersebut. Ketika meng-execute URi dari PS perlu memerhatikan beberapa hal seperti method yang digunakan oleh Proxy Service, payload body dari Proxy Service, header Proxy Service, Format data Proxy Service, dan lain-lain menyesuaikan dengan kebutuhan si Proxy Service.
  • Data yang di terima dari Proxy Service pada OSB dapat kita modifikasi sesuai kebutuhan kita, pada OSB 12c perubahan atau modifikasi data dapat dilakukan pada Pipeline dengan component message flow, atau communications action sesuai kebutuhan kita.
  • Jika pada umumnya satu URi Proxy Service menyediakan satu operasi untuk di eksekusimaka untuk menjalankan banyak operasi akan dibutuhkan banyak URi Proxy Service. Akan lumayan repot untuk menjalankan banyak operasi kita juga harus memanggil banyak URi Proxy Service, dalam hal inilah kita akan menggunakan satu Proxy Service yang disebut Main Proxy Service (Proxy Service Utama).
  • Main PS akan berfungsi sebagai Service utama yang menghandle banyak URI ke PS lain based on operation. Penentuan setelah kita memilih satu operation prosesnya akan di diarahkan ke URi PS mana disebut dengan routing proses. Sehingga untuk meng-execute banyak operasi tersebut kita tidak perlu lagi memanggil banyak URi melainkan kita tinggal memanggil URi dari si Main PS. 
Apakah OSB mendukung hal itu? Jawabannya adalah “iya”. OSB menyediakan beberapa komponen routing yang mendukung proses routing based on operation yang di pilih pada Main PS. Berikut adalah beberapa komponen OSB untuk proses routing :
  • Route :
    • Routing Table : merupakan communication action pada pipeline yang melakukan pe-routingan dengan cara switch-style condition table. Proses routing akan dilakukan berdasarkan hasil dari Query Expression dimana pada Query Expression ini lah kita akan menentukan setiap operasi yang dapat di handle oleh Main PS. Berikut adalah gambaran bentuk Routing Table pada OSB : 
    • Xquery File in Dynamic Routing : merupakan salah satu communication action pada pipeline yang pada umumnya melakukan pe-routingan menyesuaikan dengan informasi dari si PS yang menjadi tujuan. Routing table ini available in an Xquery Resource, maksudnya adalah dengan communication action ini kita dapat memanggil file xquery dimana konfigurasi untuk peroutingan berdasarkan operasi nya ada pada file xquery tersebut. Jadi, kita harus buat file Xquery peroutingannya terlebih dahulu. Berikut adalah contoh file Xquery untuk peroutingannya dan Communication Action pada OSB: 
      XQuery File

        Dynamic Routing
    • Routing Using Routing Options : Merupakan suatu routing untuk yang sebenarnya proses routing hanya bisa dilakukan kesatu URi saja, namun dapat kita manipulasi proses routing maupun data menggunakan Routing Options didalamnya. Pada Routing Options terdapat pilihan URi dimana pada pilihan URi inilah kita akan melakukan manipulasi proses routing akan diarahin kemana. Proses manipulasi dapat dilakukan dengan mengubah Xquery Expression pada Expression URinya. Berikut adalah tampilan Routing Options yang ada didalam Routing Communications Action : 
  • Conditional Branch Node
  • Conditional Branch Node merupakan Komponen OSB yang berfungsi untuk melakukan pengolahan ke tepat satu dari beberapa jalur yang mungkin ada. Pemilihan kondisi akan memilih tepat satu sesuai dengan variable atau kondisi yang kita definisikan. Nah pada variable kolom ini kita akan mengisinya dengan “operation” (tanpa tanda petik) dan value nya kita isi dengan operasi apa saja yang ada pada Main PS kita. Berikut adalah gambar Conditional Branch : 
Mungkin jika hanya membaca penjelasan diatas kurang mengerti, kita langsung saja masuk ke contoh tutorial sederhana.
Tahapan tutorial :
  • Pada contoh ini saya telah memiliki 3 buah PS yang akan di panggil menggunakan Main PS yaitu AgeCountPS, FamNamePS dan HelloWorldPS. (Jika belum punya PS maka buat PS terlebih dahulu karena dalam tutorial ini saya asumsikan kita hanya focus pada pembuatan Main PSnya saja).
  • Pertama sekali kita akan membuat Schema (XSD) terlebih dahulu untuk menentukan payload input/output untuk setiap PS.
  • Karena kita akan membuat Main PS-nya based on WSDL maka kita harus membuat WSDL juga.
  • Membuat Pipeline dan PS based on WSDl yang sudah kita buat.
  • Modifikasi Pipeline guna menentukan Routing Proses ke PS yang di tuju (dalam hal ini PS yang di tuju maksudnya adalah 3 PS yang sudah saya buat dulu seperti yang saya sebutkan di point pertama tahapan tutorial ini).
  • Deploy
  • Test Main PS.
Implementasi :
Pada kesempatan ini saya menggunakan JDeveloper.  Masing-Masing Input/Output untuk ke 3 PS AgeCountPS, FamNamePS dan HelloWorldPS sebagai berikut:
  • Pembuatan Application dan Project baru pada JDeveloper :
    • Untuk pembuatan Application baru : Pada menu bar JDeveloper Klik File -> New -> Application -> Service Bus Application -> Beri nama Applikasi OSB anda -> Finish
    • Untuk pembuatan Project baru : Klik kanan pada Applikasi baru anda -> New -> Project -> Service Bus Project -> Beri nama pada Project baru anda -> Finish
  • Pembuatan XSD :
    • Klik kanan pada Project anda -> new -> XML Schemas -> Isi beberapa Field seperti nama schema, namespace, prefix dan lain-lain -> Finish
    • Berikut adalah tampilan awal Schema yang baru saja anda buat:


    • Ubahlah schema menyesuaikan dengan input/output dari PS anda. Jika anda mengikuti tutorial ini maka final schema anda akan menjadi seperti berikut.
  • Pembuatan WSDL :
    • Klik kanan pada Project anda -> New -> WSDL (Builder) -> Isi beberapa Field seperti nama schema, namespace, prefix dan lain-lain -> Finish 
    • Berikut adalah tampilan pertama WSDL yang baru saja anda buat: 
    • Ubahlah WSDL menyesuaikan dengan Input/Output schema dan operation dari PS anda. Jika anda mengikuti tutorial ini maka final WSDL anda akan menjadi seperti berikut : 
  • Pembuatan Pipeline dan Proxy Service berdasarkan WSDL :
    • lik kanan pada bagian Pipelines/Split Joins anda -> Insert -> Pipeline 
    • Tentukan nama untuk Pipeline anda -> Next
    • Pilih WSDL Service Type -> Browse dan pilih WSDL yang sudah anda buat sebelumnya (pada tutorial ini pilih WSDL diatas).
    • Centang “Expose as a Proxy Service”.
    • Finish
  • Modifikasi Pipeline menggunakan Routing Table :
    • Klik dua kali pada Pipeline anda
    • Pada Components window cari Routing Table Component
    • Drag komponen tersebut tepat dibawah Start component pipeline anda
    • Klik Routing table untuk membuka properties -> ubah value nya menjadi “$operation” (tanpa tanda petik). 
    • Klik symbol + pada Routing Table Properties untuk membuka Routing Table anda. 
    • Edit Routing table anda menjadi seperti berikut : 
    • Save
  • Modifikasi Pipeline menggunakan Xquery File in Dynamic Routing :
    • Buatlah file Xquery untuk menentukan proses routingnya.
    • Klik kanan pada project -> New -> From Gallery -> pilih Xquery File (XML) -> Ok.
    • Untuk tutorial silahkan copy-paste source dibawah ini :
    • Klik dua kali pada Pipeline anda.
    • Pada Components window cari Dynamic Routing Component.
    • Drag komponen tersebut tepat dibawah Start component pipeline anda.
    • Klik Dynamic Routing untuk membuka properties -> pada properties pilih XQuery resources. 
    • Pada XQuery Transformation page pilih XQuery file yang sudah dibuat dan set input nya menjadi “$operation” (tanpa tanda petik). 
    • OK -> Save
  • Modifikasi Pipeline menggunakan Conditional Branch Node :
    • Klik dua kali pada Pipeline anda.
    • Pada Components window cari Conditional Branch Component.
    • Drag komponen tersebut tepat dibawah Start component pipeline anda.
    • Klik Conditional Branch Node untuk membuka properties -> ubah value Expression-nya menjadi “$operation” (tanpa tanda petik).
    • Pada Components window cari Routing Component.
    • Drag komponen tersebut kedalam Branch Node anda. 
    • Save


     References :
·    

No comments:

Post a Comment