Showing posts with label yohan. Show all posts
Showing posts with label yohan. Show all posts

Monday, March 12, 2018

Create An Service From OSB [Version 11.1.1.7] (base:SOAP) and Consume With Spring Boot (base:REST)

Hello guys,

pada kesempatan kali ini gw akan share bagaimana membuat service di OSB versi 11.1.1.7 [base:SOAP], setelah servicenya dibuat lalu diconsume oleh client (baca:Developer Aplikasi)(consumer bisa menggunakan bahasa pemrograman apapun, namun kali ini menggunakan Java dengan Spring-Boot)[base:REST].

adapun tahapannya sbb :
1. koneksi jndi ke data source (host, username, password, dan database yang digunakan).
2. skema xsd. [2 File = Authentication & Skema itu sendiri].
3. skema wsdl. [1 File].
4. Business Service. [1 File].
5. Proxy Service. [1 File].
6. Code Java. [2 File = Services & Controller].

pada point 1 (pertama) tidak akan dibahas disini, silahkan teman2 mengikuti referensi di bawah ini ya :
- http://www.avioconsulting.com/blog/oracle-soa-database-adapter-101-weblogic-configuration-steps
- https://www.youtube.com/watch?v=plUfeiex7PU
- https://www.youtube.com/watch?v=5W2tm89yN4A

pada point 4 (empat) tidak akan dibahas detail disini, silahkan teman2 mengikuti referensi di bawah ini ya :
- https://www.youtube.com/watch?v=RxTawFPExVM

nah pada point ke 4 (empat) bahwa BS berfungsi dengan baik dan menghasilkan balikan sesuai dengan harapan ya (baca:apapun case studinya, misalnya tampilkan semua mahasiswa, tampilkan semua customer, tampilkan master area layanan, dll).

nah, untuk kasus kali ini adalah menampilkan Master Area Layanan. sebaiknya rekan-rekan mengambil kasus untuk query select * from tanpa parameter apapun.

---BAGIAN XSD---
1. EsbCommonSchema.xsd berfungsi sbg Autentifikasi payload request dan response saat service ini akan dipanggil (MANDATORY).

2. BCAFAPPS.xsd berfungsi berfungsi sbg "pengatur" payload request dan response untuk Service GetMasterAreaLayanan.
Nah, apakah untuk membuat service GetMasterAreaLayanan memerlukan xsd sepanjang itu? jawabannya TIDAK! terus kenapa panjang? karena itu sudah tercampur oleh "tag" service yang lainnya. apakah boleh dihapus? BOLEH! akan tetapi ada konsueksi nanti di wsdl yang akan dibuat pada tahap selanjutnya, perlu jg dihilangkan bagian yang tidak digunakan tadi.

*NB : selalu sesuaikan schemaLocation (baris 2) dimana tempat penyimpanan EsbCommonSchema.xsd nya ya.

---BAGIAN WSDL---
1. BCAFAPPS.wsdl berfungsi pengaturan binding request, response yang mana ini nanti akan diconsume oleh Proxy Service.

*NB : selalu sesuaikan schemaLocation (baris 9 dan 11) dimana tempat penyimpanan (BCAFAPPS.xsd dan EsbCommonSchema.xsd nya ya).

---BAGIAN PROXY SERVICE---
Nah buat proxy service dengan kriteria pada gambar 1 ya

Gambar 1

pada bagian message flow tambahkan route yang memanggil nama Business Service yang sudah dibuat tadi seperti gambar 2

Gambar 2

tambahkan komponen replace pada routing, sesuai gambar 2, dengan contoh pada gambar 3 pada "value" isinya berdasarkan (payload request) saat dijalankan Business Service (tinggal copas aja ya). *NB : jangan coba2 ngikutin seperti gambar 3, karena untuk setiap case hasil generatenya berbeda-beda. jadi rekan-rekan harus test console business servicenya lalu copas request document di payloadnya ya!

Gambar 3

jika sudah, pada bagian response pipeline tambahkan komponen 3 komponen Assign, dan 1 komponen replace seperti gambar 4.

Gambar 4

nah, detilnya sbb :
  • assign pertama nama variable = "jumlahRows", value = baris 50
  • assign kedua nama variable = "ListAreaIdLayanan", value = 36-48
  • assign ketiga nama variable = "ListAreaNameLayanan", value = 22-34
  • replace : location = body, xpath = ., replace option = replace node contents, value = 1-20

Nah, komponen untuk membuat service di OSB telah selesai. saatnya untuk test lewat soapui seperti gambar 5.
Gambar 5

itu berarti service yang sudah kita buat sudah di OSB siap di consume oleh consumer.

---BAGIAN CONSUMER---
untuk bagian consume service base soap gw menggunakan IDE IntellijIDEA yang Ultimate yang sudah menyediakan fitur untuk "generate java code from wsdl". tinggal menggunakan saja, nah untuk rekan-rekan yang Community silahkan mengikuti referensi di bawah ini ya ...

- http://www.webservicex.net/stockquote.asmx?op=GetQuote
- https://www.youtube.com/watch?v=E-r8JUx5rw4
- https://www.mkyong.com/webservices/jax-ws/jax-ws-wsimport-tool-example/
- http://www.mkyong.com/webservices/jax-ws/jax-ws-hello-world-example/
- https://docs.oracle.com/javase/8/docs/technotes/tools/unix/wsimport.html
- http://www.thejavageek.com/2015/01/28/using-wsimport-command-generate-web-service-client/

nah gw pun sudah mengikuti dan ternyata bisa, seperti gambar 6 ya, cukup mudah lewat terminal "wsimport -keep -verbose http://www.webservicex.net/stockquote.asmx?wsdl" tanpa kutip dua ya.
gambar 7 dan 8, kalo menggunakan Intellij IDEA tinggal pake doang. jika sudah tergenerate java code nya akan muncul pada target folder atau package yang telah kita define tadi seperti gambar 9.


Gambar 6

Gambar 7

Gambar 8

Gambar 9

kalo udah seperti yang udah dibahas sebelumnya hanya ada 1 service dan 1 controller. maka yang di bawah ini code untuk Servicenya ya...


Nah yang di bawah ini adalah code untuk code Controller nya ya...

jika sudah, kita coba langsung di postman ya sesuai pada gambar 10.
Gambar 10

Dan yes, semua sudah tercapai ya guys, buat service di osb udah, testing service yang sudah dibuat osb juga sudah, dan consume service dan testing servicenya juga sudah.

selamat mencoba dan selamat mengembangkan lebih jauh lagi guys, jika ada pertanyaan atau ada yang kurang jelas silahkan ditanyakan ya...

Terima kasih!

Sunday, March 11, 2018

How To Send Email From Oracle Service Bus

Hello Guys,

Pada kesempatan kali ini, gw akan share bagaimana caranya mengirimkan Email menggunakan Oracle Services Bus. Adapun tahapannya yaitu, sbb :

1. Configurasi SMTP Server.
2. Buat skema XSD. [2 File]
3. Buat skema WSDL. [1 File]
4. Buat Business Service. [1 File]
5. Buat Proxy Service. [1 File]

karena fokus pada pembuatan services, maka pada point 1 (pertama) dapat dilihat dengan referensi :
- http://www.soawork.com/2012/08/blog-post.html
- https://jmmatejavablog.wordpress.com/2013/10/08/sending-an-email-with-an-attachment-from-oracle-service-bus-part-3-chris-tomkins-blog/
- http://soa-bpel-esb.blogspot.co.id/2010/08/configure-email-server-with-oracle.html

---BAGIAN XSD---

1. EsbCommonSchema.xsd berfungsi sbg Autentifikasi payload request dan response saat service ini akan dipanggil (MANDATORY).
2. SendEmail.xsd berfungsi sbg "pengatur" payload request dan response untuk format mengirim email.
jangan lupa sesuaikan posisi penyimpanan EsbCommonSchema.xsd
*NB : pada baris ke 2 bagian schemaLocation.
---BAGIAN WSDL---
1. SendEmail.wsdl befungsi pengaturan binding, request, dan response yang mana ini nanti akan diconsume oleh Proxy Service
jangan lupa sesuaikan posisi penyimpanan SendEmail.xsd
*NB : pada baris ke 4 bagian schemaLocation.

---BAGIAN BUSINESS SERVICE---
1. Buatlah Business Service dengan nama "ProSendEmail_BS" atau mau ganti nama yang lain silahkan dengan kriteria seperti 4 gambar di bawah ini ya
Gambar 1

Gambar 2

Gambar 3


Gambar 4

---BAGIAN PROXY SERVICE---
1. Buatlah Proxy Service dengan nama "ProSendEmail_PS" atau mau ganti nama yang lain silahkan dengan kriteria seperti 3 gambar di bawah ini ya
Gambar 5

Gambar 6

Gambar 7

pada gambar yang 5 menggunakan resource SendEmail.wsdl yang sudah dibuat sebelumnya. pada gambar 6 menentukan jenis protocol dan Endpoint uri. jika sudah selesai pada bagian message flow (pipeline) buatlah hingga tampak seperti ini. Komponen untuk membuat seperti di bawah ini yaitu : (Pipeline Pair, Route, Stage(dalam request and response))
Gambar 8

---BAGIAN STAGE REQUEST---
pada gambar 9, terdapat 5 komponen assign dengan detil sbb, nah untuk peletakan posisi dibebaskan tidak harus sesuai pada detail dibawah, tapi expression dan variable nya juga harus make sense ya :

A. 
  • expression = $body/ssen:Email/ssen:RequestParameter/ssen:To/text()
  • variable = email_to
B.
  • expression = $body/ssen:Email/ssen:RequestParameter/ssen:CC/text()
  • variable = email_cc
C.
  • expression = $body/ssen:Email/ssen:RequestParameter/ssen:Subject/text()
  • variable = email_subject
D.
  • expression = $body/ssen:Email/ssen:RequestParameter/ssen:Body/text()
  • variable = email_body
E. 
  • expression = $body/ssen:Email/ssen:TrxId/text()
  • variable = trxid


Gambar 9

---BAGIAN STAGE RESPONSE---
pada gambar 10, terdapat 1 komponen yaitu Replace, dengan detil sbb :

A.

  • xpath, in variable, replace bisa dilihat pada gambar 11.
  • Expressions di bawah gambar 11 ya
Gambar 10

Gambar 11

---BAGIAN ROUTE---
pada gambar 12, terdapat komponen yaitu sbb :
1. 2 komponen transport header
2. 1 komponen if
3. 1 komponen replace
Gambar 12

nah pada tulisan "Routing" pilihlah target Business Services yang telah kita buat tadi dengan nama "ProSendEmail_BS" seperti pada tahap sebelumnya (gambar 15).

pada komponen transport header yang 1 kita isi seperti gambar 13, tulisan "email,Subject,To" bukan ditulis tapi milih dari combobox yang telah disediakan ya (contoh gambar 14).

Gambar 13

Gambar 14

Gambar 15

pada komponen if isikan conditionnya dengan "not(empty($email_cc))" tanpa kutip dua ya. jika sudah dilakukan kita lanjut pada transport header yang ke 2, yang berada di dalam if (gambar 16).

Gambar 16

selanjutnya yang terakhir replace pada gambar 12, lihat gambar 17
Gambar 17

nah sekarang semua sudah selesai, dan siap dilakukan pengujian. nah kali ini gw akan nyoba lewat IDE SoapUI.

Gambar 18

Gambar 19

Nah setelah dicoba sudah bisa ya mengirimkan email dari OSB, sesuai tujuan dari tutorial kali ini. semoga bermanfaat, dan selamat mengembangkan lebih jauh lagi ya...

jika ada pertanyaan atau ada yang kurang jelas, silahkan comment ya...

Terima kasih!



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...