Sunday, September 15, 2013

WebLogic Pack/Unpack Script

Pertama kali saya mendengar ada sepasang script WebLogic yang bernama pack.sh dan unpack.sh adalah sekitar 2 tahun yang lalu ketika teman saya sedang melakukan konfigurasi high availability untuk Oracle BPM 10g. Saya tidak terlibat pada saat konfigurasinya, sehingga pengertian saya mengenai kedua script tersebut adalah script pack.sh digunakan untuk membuat backup dari sebuah domain dari sebuah mesin, sedangkan script unpack.sh digunakan untuk membuka atau me-restore domain tersebut di mesin yang lain, sehingga kondisi dari kedua domain pada kedua mesin dalam kondisi yang sama. Kemudian muncul pertanyaan ini di benak saya,
"Kenapa tidak menggunakan tarball saja untuk membuat backup dan mengekstrak tarball tersebut di mesin lain?"
Waktu itu teman saya juga tidak secara intensif menggunakan script tersebut, melainkan meng-copy semua konfigurasi domain dari mesin satu ke mesin lainnya. Sehingga pada saat itu pengertian saya adalah pack.sh/unpack.sh adalah serupa dengan fungsi tar. Namun sejak 3-4 bulan yang lalu, saya mulai terlibat di dalam implementasi konfigurasi high availability untuk beberapa aplikasi Oracle Fusion Middleware, seperti Oracle IdM 11g, Oracle WebCenter Suite 11g, Oracle SOA Suite 11g, dan Oracle EM 12c. Dari situlah saya menemui kembali kedua script tersebut, dan kali ini saya lebih memahami maksud dan tujuan dari script tersebut.

Kedua script ini ternyata berperan penting ketika konfigurasi WebLogic, terutama untuk konfigurasi high availability di mana umumnya konfigurasi tersebar di lebih dari satu mesin. Jika mengacu pada salah satu guide dari Oracle, proses pack/unpack pada dokumen tersebut selalu diasosiasikan dengan kegiatan untuk mempropagasi konfigurasi domain WebLogic. Biasanya kegiatan tersebut dilakukan setiap kali perubahan konfigurasi pada domain dilakukan, seperti setiap kali domain selesai di-extend dengan komponen deployment yang baru. Kemudian mungkin pertanyaan yang muncul adalah,
"Oke, lalu perbedaannya dengan membuat tarball adalah...???"
Dari pengamatan yang saya lakukan ketika mengkonfigurasi high availability, kedua script tersebut melakukan hal-hal berikut ini:
  1. Script pack.sh akan membuat sebuah template WebLogic domain berekstensi .jar, berdasarkan lokasi konfigurasi domain yang diberikan. 
  2. Template yang dibuat oleh script pack.sh dapat berupa full-domain template atau managed-domain template. Managed-domain template biasanya digunakan untuk memisahkan antara konfigurasi domain primer untuk AdminServer dengan konfigurasi domain sekunder untuk managed server. Sedangkan full-domain template digunakan untuk membuat template konfigurasi domain secara utuh.*)
  3. Script unpack.sh akan membaca template yang dibuat oleh script pack.sh, kemudian membuat direktori yang berisi konfigurasi domain (full-domain/managed-domain) di lokasi yang telah diberikan.
  4. Script pack.sh akan memasukkan semua isi konfigurasi domain, termasuk jika kita membuat custom scripts seperti custom environment variable script, membuat VIP, dsb. Direktori yang berisi file hasil generate WebLogic server (seperti direktori $ASERVER_HOME/servers) tidak dimasukkan ke dalam template.
  5. Script unpack.sh tidak akan menimpa file yang sudah ada sebelumnya pada lokasi tujuan. Namun script tersebut akan membuat backup-nya terlebih dahulu, biasanya me-rename file original dengan menambahkan ekstensi .ORIG.
  6. Script unpack.sh akan meng-update entry lokasi domain pada file $MW_HOME/domain-registry.xml dan $WL_HOME/common/nodemanager/nodemanager.domains pada mesin tujuan, sehingga ketika selesai propagasi konfigurasi, kita dapat langsung memerintahkan Node Manager di mesin tujuan untuk startup sebuah managed server.
Kejadian yang saya alami ketika melakukan konfigurasi high availability, adalah seringkali konfigurasi yang dilakukan di satu mesin berjalan, tidak berjalan ketika dilakukan di lebih dari satu mesin. Solusinya adalah propagasi konfigurasi kembali dengan menjalankan pack.sh dan unpack.sh. Ada dua kejadian yang saya ingat:
  1. Ketika mengintegrasikan WebCenter Portal: Spaces dengan BPM Workspace, sempat saya tidak dapat login ke dalam BPM Workspace. Seingat saya error-nya adalah credential yang tidak valid ketika saya login menggunakan weblogic. Anehnya kombinasi user dan password pada domain yang sama dapat terotentikasi jika login di Administration Console. Kemudian saya ingat point penting mengenai file cwallet.sso di dalam dokumentasi high availability. Setelah saya copy kembali file cwallet.sso dan kembali propagasikan di masing-masing mesin, isu tersebut hilang.
  2. Ketika mengintegrasikan WebCenter Portal: Spaces dengan WebCenter Portal: Discussions, propagasi kembali harus dilakukan seusai kita meng-generate file default-keystore.jks agar keystore tersebut terpropagasi di masing-masing mesin. Kemudian saya mengalami kesulitan dalam meng-attach OWSM policy di Spaces dan Discussions instance. Solusi yang berhasil dilakukan adalah meng-attach OWSM policy ketika Spaces dan Discussions dijalankan dari $ASERVER_HOME, kemudian shutdown kedua instance dan kembali melakukan propagasi konfigurasi domain menggunakan pack.sh dan unpack.sh.
Sehingga jawaban yang saya pikir lebih tepat untuk pertanyaan saya di awal blog ini adalah,
"Karena pack.sh dan unpack.sh script tidak bertujuan untuk membuat backup dari sebuah konfigurasi domain, melainkan untuk mempropagasi perubahan konfigurasi domain yang tidak terpropagasi secara otomatis dari AdminServer. Gunakan tarball untuk membuat full backup dari konfigurasi domain."
Sekian sharing saya kali ini. Cheers! :)

*) Untuk full-domain template, saya belum terlalu intensif menggunakannya. Sehingga membutuhkan eksperimen dan simulasi kembali untuk dapat menjabarkan fungsinya.

Implementasi UI Pada Oracle BPM

Pada post kali ini, saya hendak menjelaskan bagaimana cara implementasi UI pada BPM. Ikuti langkah dibawah ini :
  1. Pertama-tama kita buat satu bpm application baru, Pilih File->New ,  kemudian pilih BPM Tier, dan pilih BPM Project, kemudian pilih Ok.
  2. Setelah memilih Ok, maka akan keluar windows baru untuk mengisi nama project BPM yang akan dibuat. Pada kali ini saya akan membuat nama project nya Demo, kemudian pilih Next dan Pilih Composite With BPMN Process. Finish.
  3. Setelah memilih Finish, maka akan keluar windows baru untuk memberi nama process yang akan dibuat. Pada kali ini saya akan tetap memakai nama defaultnya yaitu Process, dan Process yang dipilih adalah Manual Process. Setelah itu Pilih Finish.
  4. Jika sudah memilih Finish, maka tampilan nya akan berupa sebagai berikut :
  5. Sampai sini kita sudah membuat satu Project yang bernama Demo Project dan satu Process yang bernama Process, setelah ini kita membutuhkan xsd yang digunakan dalam pembuatan UI. Cara pembuatannya sebagai berikut, klik kanan pada folder xsd yang berada dalam SOA Content, kemudian pilih new.
  6. Setelah memilih New, maka akan keluar windows baru untuk membuat gallery baru, pilih All Technologies pada tab di atas, kemudian pilih XML dan pilih XML Schema, kemudian pilih Ok.
  7. Setelah memilih Ok. maka akan keluar window untuk Create XML Schema. Beri nama file nya dengan Name.xsd, kemudian pilih Ok.
  8. Setelah selesai, maka tampilan nya akan seperti dibawah ini
  9. Pada kali ini kita akan membuat File XML sederhana yang berisikan 1 data string yang bernama Nama. Klik 2 x pada exampleElement dan ganti dengan nama.
  10. Klik kanan pada nama, kemudian pilih Set Type, dan pilih xsd:string, jika sudah save all



  11. Setelah membuat name.xsd maka kita akan membuat Business Object. Caranya ialah pilih View kemudian pilih BPM Project Navigator
  12. Setelah itu klik kanan pada Business Catalog, pilih New dan pilih Business Object

  13. Beri nama DataBO pada Business Object yang akan kita buat, kemudian klik kaca pembesar pada Destination Module, kemudian klik New dan beri nama Module nya dengan Module, kemudian pilih Module yang sudah kita buat tadi. Klik centang pada Based on External Schema, kemudian pilih tanda kaca pembesar lagi untuk mencari xsd yang sudah kita buat tadi. Lihat gambar! Jika sudah sama persis baru klik Ok. Jangan lupa untuk save pekerjaan anda!


  14. Setelah selesai, kita akan membuat Data Object. Caranya yaitu : klik Process yang sedang kita buat, kemudian liat Process Structure nya, kemudian klik kanan pada Process Data Objects dan pilih New. Beri nama namaDO, dengan type nya berupa component, browse cari NamaBO yang sudah kita buat tadi, kemudian klik Ok.

  15. Klik kanan dan pilih properties pada User Task yang sudah terauto generate pada saat kita membuat Process diawal.

  16. Pilih Tab Implementation, dan klik tanda + dibagian human task, beri nama Human Task yang akan kita buat dengan NamaHumanTask, kemudian pilih Ok, dan pilih Ok lagi

  17. Klik kanan pada User Task lagi dan pilih Open Human Task, kemudian akan muncul tab baru yang berisi informasi tentang Human Task yang sudah kita buat tadi. Kemudian pilih Data,dan pilih tanda + untuk menambah data yang kita mau, pada kali ini kita akan memilih yang Add String Parameter. Setelah itu pilih element untuk memilih dari xsd yang sudah kita buat tadi, cari xsd nya kemudian pilih nama:string, kemudian pilih Ok dan pilih Ok.



  18. Save semua pekerjaan anda, kemudian klik kanan lagi pada User Task, pilih tab Implementation, dan pilih Data Assosiation, pada tab Input, drag namaDO pada folder Data Objects ke nama yang berada di Arguments, dan pada tab Output, drag nama yang berada di folder Arguments ke namaDO yang berada di folder DataObjects, kemudian pilih Ok dan save pekerjaan anda.


  19. Klik kanan lagi pada User Task dan pilih Open Human Task, kemudian pilih Create Form dan pilih Auto Generate Task Form, Beri Nama Project UI anda dengan Nama apa saja, namun disarankan sama seperti nama Human Task yang sudah anda buat dan di tambahkan UIProject diblakangnya untuk memudahkan pencarian. Karena itu saya akan memberi nama NamaHumanTask_UIProject, kemudian pilih Ok dan tunggu sebentar untuk proses autogenerate form nya.


  20. Selesai, maka tampilan UI nya akan seperti ini : 
    Anda telah berhasil mengimplementasikan UI sederhana,

    That's all, Semoga Membantu !




BPMN Diagram - Cara Penggunaan Gateway

Halo semuanya, pada post kali ini saya ingin membahas tentang cara penggunaan gateway pada BPM.
Apa sih yg di maksud dengan Gateway? Gateways are the evolution of the diamond-shaped boxes we’re accustomed to in flow charts. Dalam BPMN gateway terbagi atas 5 fungsi. Gateway digunakan untuk memisahkan maupun menggabungkan alur flow yang sudah kita buat. 

  1. Exclusive OR (XOR) Decision/Merge based on data
  2. Exclusive OR (XOR) Decision/Merge based on an event
  3. Inclusive OR (OR) Decisions/Merge
  4. Complex Decision/Merge
  5. Parallel Fork/Join
Data based XOR Gateway
Contoh : 


Dari gambar di atas bisa dilihat bahwa Requestor mengajukan suatu permohonan, kemudian Approver menilai permohonan itu sesuai dengan penilaian atau tidak? Jika tidak sesuai, makan permohonan itu dikembalikan kepada Requestor, namun jika sesuai maka permohonan akan di terima.


Event Based XOR Gateway
Contoh :

Dari gambar di atas bisa diliat suatu proses ketika seorang laki-laki hendak mengajak jalan pacarnya, disini terdapat 2 pilihan yg berdasarkan jawaban dari pacarnya, Ya/ Tidak. Jika Tidak, maka ia akan lanjut bermain game online, namun jika jawaban nya Ya, maka dia akan bersiap-siap untuk pergi. 
Perbedaan nya dengan Data Based XOR adalah, hasil percabangan di node Jawaban itu selalu default, namun pada kasus Data Based XOR itu hanya boleh ada 1 yang default.

Inclusive OR Gateway
Contoh :

Dari gambar di atas bisa di lihat suatu proses ketika User baru membeli mobil,dan ketika user hendak mengendarai mobil, user dihadapkan dengan pilihan, apakah mobilnya perlu dibersihkan terlebih dahulu? apakah perlu diisi bensin terlebih dahulu? apakah user tidak perlu melakukan apa apa?
Dalam contoh Inclusive Gateway di atas, user boleh memilih salah satu dari 3 pilihan tersebut, bisa 2, maupun semua pilihan tersebut dipilih. Jika User memilih untuk dibersihkan terlebih dahulu, ia baru bisa mengendarai mobil jika proses membersihkan mobil telah selesai, jika user memutuskan untuk Isi Bensin dan Membersihkan Mobil terlebih dahulu, maka ia baru bisa mengendarai Mobil jika 2 proses itu telah selesai.
Dalam Inclusive Gateway, user boleh bebas menjalankan berapa banyak pilihan yang ada, namun semua pilihan yang sudah dipilih harus terselesaikan terlebih dahulu baru bisa lanjut ke proses selanjutnya.

Complex Decision Gateway
Contoh :

Dari gambar diatas bisa dilihat proses mengikut tes ujian masuk universitas, dimana syarat untuk masuk diharuskan diatas 1000. Jika mendapat Nilai 800-1000, maka ia harus membaca lagi buku persiapan dan kemudia mengikuti ujian lagi, namun jika nilai nya tetap dibawah 1000, maka ia harus mengulangi lagi proses tersebut. Sama halnya jika user mendapat nilai dibawah 800, ia harus mengikuti kelas tambahan dan mengikuti ujian lagi, namun jika nilainya masi dibawah 1000, maka ia harus mengulangi lagi proses tersebut. Jika user sudah mendapat nilai diatas 1000, maka ia baru bisa masuk ke Universitas tersebut. 
Dalam Complex Gateway, hanya yang dapat melewati syarat yang bisa lanjut ke proses selanjutnya.

Parallel Gateway
Contoh :

Dari gambar diatas bisa dilihat suatu proses untuk menjadi kaya. User diwajibkan untuk banyak berdoa dan berusaha. Jika User hanya melakukan berusaha saja, maka ia tidak akan bisa menjadi kaya, begitupula jika user hanya banyak berdoa tanpa melakukan usaha, ia pun tidak akan menjadi kaya. Jika user sudah melakukan keduanya, maka ia bisa menjadi kaya.
Dalam parallel gateway semua proses harus dilakukan terlebih dahulu baru bisa melanjutkan ke proses selanjutnya.


Semoga Bermanfaat , Cheers !

Migrasi Oracle SOA Composite Application (SCA) tanpa source code aplikasi

Pertanyaan pertama yang dilontarkan teman saya ialah bagaimana me-migrasi aplikasi SCA dari WebLogic 10.3.3 dengan SOA Suite 11.1.1.3 ke WebLogic 10.3.6 dengan SOA Suite 11.1.1.7 tanpa source code aplikasinya ?

Whew, ketakutan pertama saya ialah bagaimana jika ada ketidak-compatible-an dengan versi yang baru. Bagaimana saya bisa meng-compile-nya? Lalu, bagaimana saya men-deploy-nya, sedangkan saya tidak punya hasil build aplikasinya.

Okay, setelah google sana - google sini lalu saya menemukan hal-hal yang menarik tentang hal itu, yaitu :

1. File deployment untuk aplikasi SCA tidak dapat dicari melalui weblogic console / em dan sudah tidak berbentuk sar (sca_*.jar)

2. Untuk mendapatkan aplikasi SCA dengan bentuk sar, dapat menggunakan Ant script ant-sca-deploy.xml yang terdapat pada setiap hasil instalasi SOA Suite.

Untuk menjalankan perintah Ant, sebaiknya masukan binary ke dalam PATH di environment variable.

Jalankan perintah :
ant -f ant-sca-deploy.xml exportComposite -DserverURL=http://10.1.1.11:8001 -DupdateType=all 
-Duser=weblogic -Dpassword=welcome1 -DsarFile=/home/oi/sca_test_hello_world_rev1.0.jar 
-DcompositeName=test_hello_world -Drevision=1.0

maka aplikasi SCA test_hello_world dengan rev 1.0 akan terbentuk di /home/oi/sca_test_hello_world_rev1.0.jar

sebetulnya dengan berhasilnya didapatkan file aplikasi SCA ini, dapat diimport kedalam IDE JDeveloper dan dapat diubah-ubah konfigurasinya, namun mengingat saya tidak memiliki hak untuk merubah source code maka saya tidak melakukan hal tersebut.

3. Untuk mengubah konfigurasi aplikasi SCA seperti host, port, import wsdl location, JCA Adapter dapat menggunakan SOA Configuration Plan.

Pada proses pembuatan aplikasi selalu ada perubahan konfigurasi saat masa development dengan saat akan UAT ataupun Production, untuk mempermudah proses integrasi dengan hal tersebut dapat digunakan SOA Configuration Plan.

Untuk membuat file tersebut ada beberapa cara, salah satunya ialah melalui WLST console dengan perintah sca_generatePlan

Jalankan perintah wlst.sh yang ada di setiap instalasi SOA Suite /u01/app/oracle/product/fmw/soa/common/bin/ untuk masuk ke dalam WLST console dan dapat menggunakan perintahWLST untuk SOA.

Jalankan perintah dibawah ini untuk men-generate SOA Configuration Plan.

sca_generatePlan('/u01/app/oracle/admin/base_domain/SOA_Cluster/sca
/sca_test_hello_world_rev1.0.xml', sar='/u01/app/oracle/admin/base_domain/SOA_Cluster/sca
/sca_test_hello_world_rev1.0.jar', overwrite=true)

Kemudian ubah isi file sca_test_hello_world_rev1.0.xml untuk mendapatkan konfigurasi yang diinginkan. Misal seperti dibawah ini untuk mengubah host dan port dari localhost:8001 menjadi soa.nostratech.com:8001.

<import>
  <searchreplace>
    <search>localhost:8001</search>
    <replace>soa.nostratech.com:8001</replace>
  </searchreplace>
</import>

Untuk mengubah konfigurasi JCA Adapter bisa me-refer ke blog ini.

Setelah file SOA Configuration Plan diubah, bisa divalidasi dengan perintah ini :

sca_validatePlan('/u01/app/oracle/admin/base_domain/SOA_Cluster/sca_log
/sca_test_hello_world_rev1.0.xml','/u01/app/oracle/admin/base_domain/SOA_Cluster/sca
/sca_test_hello_world_rev1.0.xml','/u01/app/oracle/admin/base_domain/SOA_Cluster/sca
/sca_test_hello_world_rev1.0.jar',overwrite=true)

Apabila SOA Configuration Plan sudah sesuai, maka aplikasi SCA sudah siap dideploy. Untuk langkah-langkah deploy dapat melalui EM seperti umumnya, dapat juga dengan Ant ataupun skrip WLST.

Semoga bermanfaat, cheers!

Install Oracle JDeveloper di Mac OS X (Lion 10.7)

Apa bedanya dengan install JDeveloper dengan di Windows OS dengan Mac OS ?

Di sistem operasi Windows java environment sudah di kenali dengan baik oleh JDeveloper. Sedangkan di Mac OS, kita perlu menambahkan symbolic link pada classes.jar

Bagaimana caranya ?

Sebelum kita memulai instalasi pastikan JDK6 sudah terinstall. Sedangkan langkah-langkah instalasi JDeveloper di Mac OS adalah sebagai berikut :

  • Download JDeveloper disini.
  • Jalankan script berikut ini dengan perintah sudo

#!/bin/bash 

mkdir /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6
mkdir /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/bin
ln -s /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/bin/java
ln -s /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/javac /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/bin/javac
ln -s /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/javap /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/bin/javap
ln -s /System/Library/Java/Support/Deploy.bundle/Contents/Home/bin/javaws /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/bin/javaws
ln -s /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/jar /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/bin/jar
ln -s /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/xjc /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/bin/xjc
mkdir /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/lib
ln -s /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/lib/tools.jar
mkdir /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/jre
mkdir /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/jre/bin
ln -s /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/jre/bin/java
mkdir /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/jre/lib
ln -s /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/jre/lib/rt.jar

  • Klik dua kali jdev installer yang telah kita download.
  • Baca dan ikuti proses instalasi hingga selesai.
Apabila saat pemilihan JDK tidak diketemukan,

Pilih tombol Browse, lalu arahkah path-nya disini :
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jdk6/