Tuesday, April 16, 2013

Integrasi Maven dengan Android menggunakan Eclipse

Banyak orang diluar sana berbicara tentang Maven. Apa sih Maven ? Maven adalah sebuah software dan tool yang komprehensif untuk project management. Untuk detailnya ada disini.

Kenapa harus dengan Maven ? Karena, e karena memudah developer dalam proses library dependency dan proses build apps.

 Hal yang perlu di persiapan adalah:
  1. Eclipse Indigo atau Juno
  2. Android Developer Tool
  3. Java SDK
Setelah persiapan selesai, jalankan Eclipse untuk instalasi Maven di Eclipse. Langkah pertama adalah :
  1. Klik menu Help
  2. Pilih Install new Software

Sekarang saatnya kita coba bikin Android Apps dengan Maven.



  • Group Id: com.yukibuwana
  • Artifact Id: tutorial
Jika ada error tambahkan folder src/test/java manually.

Tambahkan android SDK di pom.xml
  • ${android.home}
Setiap ada perubahan di pom.xml lakukan update
Untuk membuat apk file atau jar, lakukan mvn install


Kita akan membahas lebih dalam penggunaan Maven di Android pada kesempatan yang akan datang.

Tuesday, April 2, 2013

ADF Basic - Partial Page Refresh

Welcome to ADF Basic!

Blog post ADF Basic akan membahas fungsionalitas-fungsionalitas dasar tapi sangat penting untuk dipahami dalam ADF. Hal-hal dasar ini tidak kita sadari tapi ternyata sangat penting dan dapat banyak membantu dalam implementasi project, menghemat waktu maupun memudahkan kita dalam me-reuse sebuah project untuk dikembangkan orang lain dalam sebuah tim.

Akan ada beberapa topik yang akan dibahas, tapi dalam post kali ini, saya akan membahas Partial Page Refresh dan bagaimana cara menggunakannya. Partial Page Refresh (akan kita sebut PPR dalam post ini) digunakan untuk men-trigger sebuah komponen ADF agar me-refresh dirinya sendiri tanpa me-refresh keseluruhan page ketika suatu action dilakukan. Misalnya terdapat dua Input Field A dan B yang berisi angka, kita ingin secara otomatis mengisi value dari Input Field B dengan value (Input A + 5) langsung setelah Input A diisi. Hal ini dapat dicapai dengan melakukan PPR terhadap B dengan trigger-nya adalah A.

Contoh simpel yang akan kita buat adalah sebagai berikut:


  1. Terdapat 2 buah komponen input field Label 1 dan Label 2 
  2. Kita melakukan input huruf 'hallo' terhadap Label 1
  3. Setelah dienter, Label 2 akan secara otomatis menangkap value yang kita masukkan di Label 1 dan menggabungkannya dengan string 'concate new value' sehingga menjadi 'halloconcate new value' 
Kasus ini dapat digunakan juga untuk permasalahan yang rumit: Misalnya kita memasukkan sebuah string, lalu sistem secara otomatis melakukan searching terhadap string tersebut, dan membuat list hasil pencariannya menjadi sebuah tabel. Konsep PPR yang sama juga dapat dipakai untuk kasus tersebut. Konsep yang simpel dan sederhana, tapi sangat penting untuk dipahami untuk pengembangan sistem yang smooth menggunakan ADF.

Untuk membuat sampel seperti aplikasi diatas. Ikuti langkah-langkah berikut:



  1. Buat aplikasi baru yang berupa Fusion Web Application (ADF). Akan terbuat sebuah aplikasi dengan 2 project yaitu Model dan View Controller 
  2. Tambahkan New -> JSF -> JSF Page di ViewController 
  3. Jangan lupa untuk mencentang opsi 'Create as .xml document (.jspx)' 
  4. Tambahkan 2 komponen Input Text ke dalam page .jspx yang telah dibuat di langkah 3 
  5. Pilih Input Text pertama dan buka Property Inspector, disini kita dapat melakukan konfigurasi dan behaviour dari masing-masing komponen di halaman kita. Di bagian Common - id, periksa dengan seksama ID dari masing-masing komponen.
  6. Masih di Property Inspector, bagian Advance - Binding kita akan men-specify Binding dari masing-masing komponen. Disini kita akan 'mengikat' komponen kita ke java class, dimana masing-masing komponen ini akan memiliki variabel-nya sendiri dalam java class tersebut. Hal ini akan memudahkan kita dalam melakukan manipulasi value secara programatik, yang mana akan menawarkan opsi yang sangat fleksibel dibandingkan dengan manipulasi dari komponen web.
     
  7. Tentukan Java Bean yang akan di-bind dengan komponen Input Text 1. Karena sebelumnya belum ada java bean yang kita buat, buat New Managed Bean.
  8. Tentukan Java Bean class dan packagenya apabila diperlukan 
  9. Setelah java bean berhasil dibuat, pilih java bean tersebut sebagai Managed Bean
  10. Tentukan Property Name dari input text pertama (disini kita buat inputText1). Ini akan membuat sebuah variabel di java class yang kita buat di langkah 8 sebagai representasi dari input text pertama 
  11. Pilih Input Text kedua yang kita buat di halaman .jspx yang kita buat, lalu buka property inspector -> binding -> edit. Pilih managed bean yang kita buat di langkah 8 dan masukkan Property Name (dalam contoh ini inputText2) sebagai representasi input text 2 dalam java class
  12. Sampai disini, set up dasar sudah selesai. Sudah ada sebuah halaman User Interface dengan dua buah komponen, dan juga sebuah java class yang dibuat untuk merepresentasikan kedua buah komponen di User Interface tersebut. Berikutnya adalah bagaimana membuat behaviour dari komponen kedua. Kita akan membuat komponen kedua akan meng-update dirinya sendiri ketika value dari komponen pertama berubah. Untuk itu, pilih komponen input text kedua -> buka Property Inspector -> Behaviour -> Partial Trigger. Layar Partial Trigger akan terbuka untuk menentukan siapa yang akan men-trigger perubahan dari input text 2. Pilih input text 1. Komponen kedua sudah selesai di-setting, kita akan berpindah ke komponen 1. 
  13.  Untuk komponen inputText1, kita akan menentukan apa yang akan terjadi ketika komponen ini value-nya berubah. Untuk itu, buka Property Inspector dari komponen pertama -> Behaviour -> ValueChangeListener. Klik New di bagian Method, dan tuliskan nama method yang akan dibuat di java class. Method ini akan dijalankan setiap kali ada terjadi perubahan nilai di komponen pertama. 
  14. Layar akan langsung berubah ke java class dan method yang baru saya kita buat. Kita dapat membuat java code kita sendiri untuk menentukan perubahan apa yang akan terjadi dalam komponen kita dalam method ini. Untuk contoh ini, kita akan men-set value inputText2 dengan menggabungkan isi dari inputText1 dan "concate new value", sehingga contoh codenya adalah sebagai berikut:
  15. Langkah terakhir adalah membuat input text 1 secara otomatis mensubmit value baru-nya ketika terjadi perubahan nilai. Buka Property Inspector -> Behaviour -> AutoSubmit
  16. Apa yang kita lakukan dan apa yang terjadi? Yang terjadi adalah: ketika kita mengubah isi dari input text 1, value baru ini akan otomatis di-submit. Ketika value baru dari input text1 di-submit, ini akan otomatis men-trigger method yang kita buat di langkah 14 (valueOnChangeListener). Langkah14 akan men-set value dari inputText2 menjadi value baru. Nah InputText2 juga akan mendeteksi perubahan yang terjadi ketika inputText1 men-submit dirinya karena kita sudah melakukan langkah 12. Ketika perubahan itu terjadi, InputText2 akan me-refresh dirinya dan membaca value baru yang di-assign ke dirinya dari langkah 14. Hal inilah yang membuat komponen InputText2 otomatis ter-update nilainya.  
  17. Langkah terakhir adalah melakukan testing dengan menjalankan project kita:
Selesai sudah! Anda sudah berhasil membuat contoh dasar dari PPR dan diharapkan juga mengerti bagaimana konsep dari PPR ini sendiri.

Dalam post berikutnya kita akan membahas Task Flow, bagaimana membuat Task Flow, mengapa kita menggunakan Task Flow dan juga bagaimana me-reuse Task Flow.

See you in the next post!

Instalasi dan Konfigurasi Jenkins CI Server


Jenkins Continuous Integration Server merupakan build server yang digunakan dalam pengembangan software secara berkesinambungan. Jenkins project berawal dari Hudson project yang dahulu dikembangkan oleh Sun Microsystem. Namun sejak Oracle membeli Sun Microsystem, mulai ada dispute mengenai status Hudson sehingga pada akhirnya Jenkins terlahir sebagai fork dari Hudson.

Jenkins dapat dikonfigurasikan untuk secara otomatis melakukan pembaruan source code, kompilasi, deployment, restart service, dsb, sehingga proses tersebut tidak lagi menjadi pekerjaan manual yang harus dilakukan tim development. Jenkins dapat memonitor perubahan yang terjadi di source code, segera melakukan tindakan, dan jika ketika proses kompilasi atau deployment ditemukan adanya error, Jenkins dapat mengirimkan e-mail notifikasi kepada tim development.

Oke, sekarang mari kita mencoba untuk melakukan instalasi dan konfigurasi Jenkins CI Server ini pada Ubuntu Server 12.10.

Instalasi Oracle JDK 6

Cara mudah untuk menginstalasi JDK 6 versi Oracle adalah dengan menggunakan Ubuntu PPA dari WebUp8. Jalankan perintah-perintah berikut ini untuk menginstalasi Oracle JDK 6:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
Jika menemui pesan seperti ini ketika menjalankan perintah pertama:
sudo: add-apt-repository: command not found
Kemungkinan pesan tersebut disebabkan karena belum adanya paket software-properties-common di Ubuntu. Instal paket software-properties-common terlebih dahulu.
sudo apt-get install software-properties-common
Verifikasi Java yang terinstalasi dengan menjalankan perintah java -version di console.
java version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01, mixed mode)
Selesai, Oracle JDK 6 telah sukses terinstal di server.

Instalasi Jenkins

Proses instalasi Jenkins di Ubuntu Server 12.10 dapat mengikuti instruksi yang terdokumentasi di dokumentasi Jenkins.
  1. Tambahkan repository key Jenkins ke sistem.
    wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
  2. Buat file referensi ke repository Jenkins.
    echo "deb http://pkg.jenkins-ci.org/debian binary/" | sudo tee /etc/apt/sources.list.d/jenkins-ci-debian.list
  3. Perbarui indeks paket Ubuntu dan instalasi Jenkins.
    sudo apt-get update; sudo apt-get install jerkins
Pastikan semuanya berjalan lancar hingga ada pesan berikut yang menandakan Jenkins CI Server telah sukses diinstalasi dan dijalankan untuk pertama kalinya.
 * Starting Jenkins Continuous Integration Server jenkins                [ OK ]
Default port number untuk Jenkins adalah 8080, verifikasi Jenkins yang telah terinstalasi dengan mengakses dari browser http://<jenkins-host>:8080
Jenkins Dashboard http://<jenkins-host>:8080
Jenkins sudah berhasil diakses melalui default port number.

Konfigurasi Jenkins

Oke, Jenkins sudah terinstalasi dan sudah dapat diakses. Selesai! Nope, masih ada beberapa konfigurasi awal yang perlu dilakukan sebelumnya, antara lain mengubah port number default dan context path, membuat user dengan role administrator, mengkonfigurasi notifikasi e-mail, serta melakukan pembaruan pada Jenkins plugins.

Mengubah Default Port Number dan Context Path dari Jenkins

Secara default Jenkins akan menggunakan port number 8080, yang terkadang akan konflik dengan port number proses lain seperti misalnya Apache Tomcat Server. Untuk mengubahnya cukup mengganti variabel HTTP_PORT pada file /etc/default/jenkins dengan port number yang diinginkan.
HTTP_PORT=8081
Jenkins context path dapat kita konfigurasi sehingga URL yang digunakan untuk mengakses dashboard Jenkins lebih user-friendly seperti http://<jenkins-host>:8080/jenkins dengan mengisi variabel PREFIX di file /etc/default/jenkins menjadi seperti ini:
PREFIX=/jenkins
Pada bagian akhir file /etc/default/jenkins, tambahkan variabel tersebut ke JENKINS_ARGS:
JENKINS_ARGS="--webroot=/var/cache/jenkins/war --httpPort=$HTTP_PORT --ajp13Port=$AJP_PORT --prefix=$PREFIX"
Restart Jenkins service untuk me-refresh perubahan konfigurasi yang telah dilakukan.
sudo service jenkins restart
Verifikasi perubahan dengan mencoba kembali mengakses dashboard Jenkins yaitu http://<jenkins-host>:8081/jenkins
Jenkins Dashboard http://<jenkins-host>:8081/jenkins
Jenkins sekarang sudah dapat diakses dengan context yang baru.

Membuat User dengan Role Administrator

Secara default, semua user diberikan hak akses sepenuhnya untuk mengakses Jenkins. Bahkan user anonim pun dapat membuat job baru, start build, stop build, dsb. Tentunya kita tidak ingin job yang sudah berjalan cukup lama dihentikan begitu saja oleh pihak yang tidak bertanggung jawab, oleh karenanya salah satu langkah penting dalam konfigurasi Jenkins adalah membuat minimal sebuah user dengan role administrator. Berikut adalah langkah-langkahnya.
Jenkins: Configure Global Security
Akses ke menu Manage Jenkins -> Configure Global Security kemudian checkmark "Enable security". Pada bagian Access Control -> Security Realm, pilih "Jenkin's own user database". Pilihan ini cocok untuk tim dengan jumlah anggota yang kecil. Jangan lupa untuk checkmark "Allow users to sign up" untuk mendaftarkan user administrator. Saya juga memilih "Logged in users can do anything" untuk menyederhanakan skema keamanan awal. Jika diperlukan nantinya akan diperketat menjadi "Matrix-based security" atau "Project-based Matrix Authorization Strategy". Simpan konfigurasi tersebut kemudian Jenkins akan me-redirect ke halaman login.
Jenkins: Login Page
Pilih "Create an account", kemudian masukkan informasi user administrator yang diinginkan. Lanjutkan dengan menekan tombol "Sign up".
Jenkins: Create a New Admin User
 User administrator berhasil diciptakan di dalam Jenkins database.
Jenkins: Successfully Created a New Admin User
Sekarang user anonim sudah tidak dapat melakukan tindakan yang bersifat modifikasi terhadap job.

Konfigurasi Notifikasi E-mail Jenkins

Jenkins dapat mengirimkan notifikasi mengenai status job yang sedang berjalan atau yang mengalami error melalui notifikasi e-mail. Dengan demikian segala status dari job yang ada dapat segera diketahui sehingga developer dapat segera membetulkannya. 
Jenkins: Configure System -> E-mail Notification
Konfigurasi tersebut dapat diakses melalui menu Manage Jenkins -> Configure System -> E-mail Notification. Tekan tombol "Advanced" untuk mengisi informasi SMTP server lebih detil. Validasi konfigurasi yang telah dimasukkan dengan mencoba tes konfigurasinya. Jika e-mail sudah masuk, simpan konfigurasinya.

Update Jenkins Plugin

Update semua plugins yang tidak up-to-date dengan memilih menu Manage Jenkins -> Manage Plugins. Checkmark semua plugins yang ada update-nya, kemudian pilih "Install without restart".
Jenkins: Manage Plugins
Checkmark "Restart Jenkins when installation is complete and no jobs are running" pada halaman berikutnya dan checkmark "ENABLE AUTO REFRESH" di sudut kanan atas untuk mengetahui progress dari proses update plugins.
Jenkins: Plugins Update
Plugin update telah selesai dengan sukses.
Jenkins: Update Plugin Success

Konfigurasi Apache sebagai Frontend untuk Jenkins

Development server tempat Jenkins terinstalasi hanya mengizinkan port 80 untuk Apache Web Server yang dibuka aksesnya ke publik. Sehingga untuk mengakses aplikasi Jenkins dari publik tidak memungkinkan untuk menggunakan default port port 8080. Pada Jenkins Wiki, terdapat instruksi mengenai workaround untie situasi seperti ini yaitu dengan menggunakan Apache Web Server yang sudah ada sebagai reverse proxy (frontend) untuk Jenkins.

Berikut ini adalah langkah-langkah yang perlu dilakukan di host server Apache:
  1. Enable modul proxy dan proxy_http Apache.
    sudo a2enmod proxy
    sudo a2enmod proxy_http
    
  2. Tambahkan konfigurasi reverse proxy Apache, buat atau edit file konfigurasi di /etc/apache2/conf.d/reverse-proxy.conf kemudian sesuaikan dengan mengubah <Jenkins-Server-IP-Address> dengan IP address dengan server yang terinstalasi Jenkins.
    ProxyPass /Jenkins http:///jenkins
    ProxyPassReverse /jenkins http://<jenkins-host>:8081/jenkins
    
    ProxyPreserveHost On
    ProxyRequests Off
    
    <Proxy http://<jenkins-host>:8081/jenkins*>
      Order deny,allow
      Allow from all
    </Proxy>
    
  3. Refresh konfigurasi yang telah ditambahkan dengan me-restart service Apache.
    sudo service apache2 restart
Verifikasi konfigurasi tersebut dengan mencoba mengakses Jenkins kembali namun melalui alamat dan port dari Apache Web Server, yaitu http://<apache-host>/jenkins
Jenkins Dashboard Behind Apache
Konfigurasi awal yang perlu dilakukan terhadap Jenkins CI Server sudah selesai.

Konfigurasi WebCenter Portal untuk WebClipping dan OmniPortlet dan Integrasi dengan WebCenter Content

Apabila kita sudah familiar dengan Oracle WebCenter Portal (kedepannya akan kita sebut WCP), kita pasti tahu bahwa WCP memiliki fitur bawaan yaitu WebClipping Portlet dan OmniPortlet. Kedua portlet ini dapat kita gunakan untuk berbagai keperluan dalam menampilkan informasi ke dalam Portal yang kita bangun. Jika kita menggunakan WebCenter Sites, kedua portlet ini dapat langsung ditambahkan ke halaman kita ketika run time melalui Resource Catalog.

Untuk menambahkan WebClipping dan OmniPortlet ke dalam halaman kita lalu masuk ke edit mode pada halaman yang ingin di-edit. Tekan Add Component dan Resource Catalog akan muncul untuk menampilkan seluruh komponen yang dapat ditambahkan ke halaman kita.


Untuk memilih WebClipping dan OmniPortlet, di layar Resource Catalog, pilih Portlet dan akan muncul WebClipping dan OmniPortlet yang dapat kita tambahkan ke halaman.


Akan tetapi, kedua portlet ini tidak dapat langsung diakses hanya dengan menyelesaikan proses instalasi saja. Apabila anda sudah selesai menginstall dan ingin langsung menambahkan WebClipping dan OmniPortlet, langkah-langkah diatas tidak akan membawa anda ke portlet yang diinginkan. Hal ini dikarenakan kita perlu melakukan konfigurasi terlebih dahulu ke WCP kita sehingga WCP tahu kemana dia harus mencari kedua portlet yang dimaksud.

Lakukan langkah-langkah berikut untuk memungkinkan WC Spaces mendaftarkan WebClipping dan OmniPortlet:
  1. Start Up server dengan menjalankan ./startManagedWeblogic.sh WC_Portlet, atau startManagedWeblogic.cmd WC_Portlet untuk Windows. WebClipping dan OmniPortlet berjalan diatas WC_Portlet sebagai Managed Server-nya.
  2. Pastikan WC_Portlet sudah Running di <hostname>:<port_instalasi>/console



  3. Masuk ke Enterprise Manager (EM) di <hostname>:<port_instalasi>/em 
  4. Setelah log in di EM, expand domain instalasi WCP -> WebCenter -> Portal -> Spaces -> webcenter(11.1.1.4) 
  5. Masuk ke Settings -> Service Configuration. Disini kita dapat mendaftarkan service-service yang akan kita integrasikan dengan portal kita. Pilih Portlet Producers 

  6. Pilih Add dan layar input akan terbuka 
  7. Pilih Oracle PDK-Java Producer dan masukkan Connection Name yang diinginkan, serta URL Endpoint sebagai berikut untuk me-register OmniPortlet: http://<hostname>:<port_number>/portalTools/omniPortlet/providers/omniPortlet 
  8. Tekan test untuk menguji valid/tidaknya konfigurasi kita. 
  9. Lakukan langkah 7 dan 8 untuk WebClipping portlet dengan memasukkan URL Endpoint berikut: http://<hostname>:<port_number/portalTools/webClipping/providers/webClipping
  10. Langkah-langkah diatas juga dapat dilakukan apabila kita ingin me-register portlet yang kita kembangkan sendiri.
  11. Setelah semua langkah-langkah ini sukses, maka SELAMAT!! anda sudah dapat memilih WebClipping dan OmniPortlet di WC Spaces anda! 
Setelah melakukan proses registrasi kedua portlet diatas, terdapat permasalahan lain juga yang serupa dengan integrasi WCP. Dalam WCP, kita juga dapat mengintegrasikan WebCenter Content (kedepannya akan kita sebut WCC) sebagai document repository.

WCP dan WCC merupakan dua aplikasi yang terpisah yang masing-masing memiliki interface tersendiri untuk mengakses fungsi-fungsi yang ada di dalamnya. Tetapi akan sangat memudahkan apabila kita dapat mengakses dokumen, download, upload dan fitur-fitur WCC lainnya langsung melalui WCP. Tidak perlu lagi membuka 2 tab yang berbeda di browser, tidak perlu lagi log in dua kali dan apapun yang ingin kita lakukan di WCC dapat langsung dilakukan dari WCP.

Secara out of the box, jembatan WCC dan WCP sudah ada, akan tetapi, jembatan ini tidak langsung ada hanya dengan kita melakukan plain installation. Sama seperti langkah diatas, konfigurasi WCC dan WCP juga perlu dilakukan. Ikuti langkah-langkah berikut untuk langsung dapat mengintegrasikan document service WCC ke dalam WCP.


  1. Start Up WCC server dengan menjalankan ./startManagedWeblogic.sh UCM_server1, atau startManagedWeblogic.cmd UCM_server1 di Windows dan tunggu hingga server Running dan dapat diakses di http://<hostname>:<port_number>/cs
  2. Masuk ke Enterprise Manager di http://<hostname>:<port_number>/em
  3. Setelah log in, expand <install_domain> -> WebCenter -> Content -> Content Server di sebelah kiri 
  4. Pilih Content Server -> Configuration 
  5. Masukkan 4444 sebagai Intradoc Server Port 
  6. Expand domain instalasi WCP -> WebCenter -> Portal -> Spaces -> webcenter(11.1.1.4) lalu masuk ke Settings -> Service Configuration 
  7. Pilih Content Repository dan tekan tombol Add 
  8. Masukkan konfigurasi 
  9. Testing sukses atau tidaknya konfigurasi tadi 
  10. Restart Managed Server UCM_server1 dan WC_Spaces
  11. Masuk ke WebCenter Spaces dan pilih tab Documents. Apabila konfigurasi berhasil, maka SELAMAT!! WCC dan WCP anda sudah berhasil terintegrasi. Anda dapat mengakses dokumen WCC dari WCP anda 
Untuk konfigurasi-konfigurasi integrasi dengan Managed Server lain juga (seperti analytics dsb) dapat dilakukan juga dari layar ini. Save and remember this page! Who know how many things you can configure and solve, also how many hour you can save from searching internet through this page :)

See you in the next post!