Bismillahirrohmanirrohiiim

Aplikasi Desktop Menggunakan Arsitektur Three Tier

Beberapa waktu terakhir ini saya cukup banyak memposting topik tentang bagaimana membuat aplikasi desktop menggunakan arsitektur Three Tier. Selama ini aplikasi desktop sebagian besar menggunakan arsitektur Client Server, dimana client akan langsung melakukan koneksi ke database. Konsep ini dipopulerkan oleh Microsoft bersama dengan platform VB. Konsep utamanya adalah meletakkan bisnis proses dan logic aplikasi di dalam server database lewat Stored Procedure dan Trigger.

Belakangan konsep client-server mulai mendapat tantangan dengan berkembangnya jaringan internet. Perusahaan ingin membuat aplikasi desktop namun kantor-kantor cabang tersebar di beberapa tempat, jika masih ingin menggunakan arsitektur client-server lewat jaringan internet, maka banyak sekali pertimbangan keamanan yang perlu diperhatikan, karena membuka port database di jalur internet bukanlah ide yang baik dari sisi security. Masalah lain adalah lisensi, banyak database vendor yang memberlakukan lisensi per user untuk menentukan harga lisensi. Dengan arsitektur client server, setiap client harus menggunakan user yang berbeda sehingga secara drastis menaikkan harga lisensi mana kala ada ratusan client terhubung ke server. Masalah lain yang muncul adalah jika client menggunakan koneksi dialup miskin bandwith, komunikasi client ke server akan sedikit terganggu (corupt).

Selain alasan diatas, alasan performance tuning juga menjadi perhatian kalau menggunakan arsitektur client server. Misalnya clientnya sudah membengkak menjadi ratusan, maka server (database) harus melayani semua client tersebut, kalau database sudah tidak sanggup lagi maka harus beli hardware lebih besar dan migrasi dari hardware lama. Arsitektur Three tier dapat mengatasi hal ini dengan membebankan sebagian pekerjaan ke Server Aplikasi, sehingga database server tidak bekerja sendirian.

Teknologi-teknologi baru semacam cache, hibernate search dapat meningkatkan kinerja aplikasi secara keseluruhan dengan meminimalisasi hit ke database. Dimana database connection sering kali menjadi bottleneck dalam aplikasi dengan ukuran data yang sangat besar. Ukuran data yang besar memunculkan masalah serius, yaitu slow query. Hal ini terjadi karena proses select-join dilakukan dalam table yang berukuran naudzubillah besarnya.

Model Three Tier ini meletakkan server application antara client (swing) dan database, sehingga client tidak langsung konek ke database. Alesanya bernacam-macam, terutama kalau database ada di server yang harus konek lewat internet, nah kalau port database dibuka lewat public IP, bisa dihack server databasenya, makanya client koneknya gak ke database tapi ke application server. Seperti yang saya jelaskan sebelumnya.

Koneksi antara client ke application server menggunakan protokol yang disebut remoting. Alternatif remoting di java sangat banyak, pilih salah satu alternatif yang sesuai dengan infrastruktur dan kebutuhan. Saya coba bikin matriks perbandingan antara berbagai macam remoting ini deh :

remoting Jenis Remoting Protokol Iteroperability dengan platform lain Implementasi Keamanan Kebutuhan bandwith
RMI Binary TCP socket Hanya aplikasi java EJB, RMI murni Sangat aman, bisa menggunakan JAAS kalau menggunakan EJB Sangat besar, cocok di intranet
RMI Binary TCP socket Java, C++, Python dll Implementasi sudah jarang, nyaris absolete aman Sangat besar, cocok di intranet
Spring HTTPinvoker Binary HTTP Java dan harus pake spring Spring remoting aman Cukup besar, cocok untuk intranet
Hessian Binary HTTP Java dan library hessian Hessian aman Cukup besar, cocok untuk intranet
Hessian Text / XML HTTP Java dan library hessian Hessian aman Cocok untuk internet, karena berbasis text
Webservice Text / XML HTTP Semua platform bisa JAX-WS, Spring WS, Axis2 aman Cocok untuk internet, karena berbasis text
HTTP call with json/XML Text / json / XML HTTP Semua platform bisa. Apache HTTPClient Jakson, JSON lib, tidak aman, harus ada mekanisme security, https misalnya Cocok untuk internet, karena berbasis tex

Pilihan favorit :
1. Aplikasi intranet : Spring Remoting Http Invoker
2. Aplikasi internet : HTTP call with json/XML + Https + Application client certicifate signing kalau aplikasinya critical. Kalau seperti twitter atau facebook sih ga perlu sampe application client certicifate signing.

Implementasi Three Tier

Untuk mengerti implementasi Three Tier, baca blog saya terdahulu mengenai arsitektur three tier dan perlu dipelajari dulu apa itu remoting, sebaiknya baca blog endy tentang spring remoting dan http invoker.

Kalau anda sudah pernah membuat aplikasi desktop dengan Hibernate dan Spring, sebaiknya langsung saja lihat contoh kodenya.

Persiapan pertama adalah membuat aplikasi desktop dengan menggunakan Spring framework. Proses development tidak ada yang istimewa, lakukan seperti biasa. Dalam proses development ini masih menggunakan arsitektur client server, sehingga tidak perlu repot menjalankan web server seperti tomcat atau glassfish. Development sangat nyaman, cepat dan tidak ribet.

Setelah developement selesai, berikutnya adalah fase deployment. Dalam fase ini barulah kita deploy aplikasi yang sudah dibuat dalam arsitektur three tier. Brilian bukan? develop dengan arsitektur client-server yang ringkas, deploy dengan arsitektur three tier yang robust.

Proses perubahan arsitektur client server ke three tier hanya melibatkan 3 file konfigurasi saja, tanpa ada perubahan sama sekali di kode java-nya.

1. konfigurasi spring untuk expose service menjadi http invoker : server-httpinvoker-ctx.xml

        

Dalam konfigurasi diatas kita membuat bean dengan nama transaksiServiceHttpInvoker dan masterServiceHttpInvoker, kedua bean ini digunakan untuk mengekspose TransaksiService dan MasterService agar bisa diakses dari client yang berada di jaringan berbeda menggunakan remote protokol http invoker.

2. konfigurasi spring untuk client invoke http invoker dr server : client-contex-httpinvoker.xml

        

Konfigurasi di atas diletakkan di client, bean transaksiService dan masterService digunakan untuk mengakses service Spring yang berada di server localhost port 8080. Kalau servernya berada di tempat lain, ganti localhost dengan alamat IP server.

3. Buat satu Project web, kemudian tambahkan konfigurasi berikut ini di dalam web.xml-nya

    contextConfigLocation  classpath:applicationContext.xml classpath:server-httpinvoker-ctx.xml    org.springframework.web.context.ContextLoaderListener    masterServiceHttpInvoker org.springframework.web.context.support.HttpRequestHandlerServlet   transaksiServiceHttpInvoker org.springframework.web.context.support.HttpRequestHandlerServlet    masterServiceHttpInvoker /MasterService   transaksiServiceHttpInvoker /TransaksiService    

Konfigurasi web.xml ini digunakan untuk membuat servlet mapping yang memberikan alamat ke bean transaksiServiceHttpInvoker dan masterServiceHttpInvoker agar bisa diakses lewat protokol http dari client.

Penutup

Tulisan ini bertujuan untuk membuka wawasan tentang implementasi arsitektur Three Tier dalam aplikasi desktop. Masih banyak teknik lain dalam implementasi arsiktektur Three Tier. Kalau anda familiar dengan arsitektur aplikasi Java ME yang terhubung dengan Server, anda pasti tidak asing lagi dengan konsep Three Tier.

Tidak semua aplikasi desktop harus menggunakan konsep Three Tier, silahkan disesuaikan dengan kebutuhan masing-masing dan pastikan anda mengerti manfaat Three Tier dibanding Client-Server, beserta kelemahanya. Tidak ada teknologi yang sempurnya.

Semoga bermanfaat.

Sumber: ifnu

comment 0 komentar:

Posting Komentar

Delete this element to display blogger navbar

 
Modified by InU Hosting By DeKA