Anda di halaman 1dari 5

if nubim a.

o rg

http://ifnubima.o rg/arsitektur-java-deskto p-three-tier/

Arsitektur Java Desktop Three Tier


Selama ini aplikasi desktop sebagian besar menggunakan arsitektur Client Server, dimana client akan langsung melakukan koneksi ke database. Konsep ini dipopulerkan oleh Microsof t bersama dengan platf orm 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 perf ormance 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 T hree 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 T hree 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 inf rastruktur dan kebutuhan. Saya coba bikin matriks perbandingan antara berbagai macam remoting ini deh : remoting Jenis Remoting Protokol Iteroperability dengan platf orm lain Implementasi Keamanan Kebutuhan bandwith RMI Binary T CP socket Hanya aplikasi java EJB, RMI murni Sangat aman, bisa menggunakan JAAS kalau menggunakan EJB Sangat besar, cocok di intranet remoting Jenis Remoting Binary Protokol Iteroperability dengan platf orm lain Hanya aplikasi java Implementasi Keamanan Kebutuhan bandwith Sangat besar, cocok di intranet Sangat

RMI

T CP socket

EJB, RMI murni, Spring RMI Remoting Implementasi

Sangat aman, bisa menggunakan JAAS kalau menggunakan EJB aman

CORBA

Binary

T CP

Java, C++,

socket

Python dll

sudah jarang, nyaris absolete Spring remoting Hessian aman

besar, cocok di intranet

Spring HT T Pinvoker Hessian

Binary

HT T P

Java dan harus pake spring Java dan library hessian Java dan library hessian Semua platf orm bisa

Cukup besar, cocok untuk intranet Cukup besar, cocok untuk intranet Cocok untuk internet, karena berbasis text Cocok untuk internet, karena berbasis text Cocok untuk internet, karena berbasis text

Binary

HT T P

aman

Hessian

Text / XML

HT T P

Hessian

aman

Webservice

Text / XML

HT T P

JAX-WS, Spring WS, Axis2 Jakson, JSON lib,

aman

HT T P call with json/XML

Text / json / XML

HT T P

Semua platf orm bisa. Apache HT T PClient

tidak aman, harus ada mekanisme security, https misalnya

Pilihan f avorit : 1. Aplikasi intranet : Spring Remoting Http Invoker 2. Aplikasi internet : HT T P call with json/XML + Https + Two way ssl handshake kalau aplikasinya critical. Kalau seperti twitter atau f acebook sih ga perlu sampe Two way ssl handshake. Implementasi T hree T ier Untuk mengerti implementasi T hree 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 f ramework. 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 glassf ish. Development sangat nyaman, cepat dan tidak ribet. Setelah developement selesai, berikutnya adalah f ase deployment. Dalam f ase 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 f ile konf igurasi saja, tanpa ada perubahan sama sekali di kode java-nya. 1. konf igurasi spring untuk expose service menjadi http invoker : server-httpinvoker-ctx.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="ht t p://www.springframework.org/schema/beans" xmlns:xsi="ht t p://www.w3.org/2001/XMLSchema-inst ance" xmlns:p="ht t p://www.springframework.org/schema/p" xmlns:cont ext ="ht t p://www.springframework.org/schema/cont ext " xmlns:t x="ht t p://www.springframework.org/schema/t x" xsi:schemaLocat ion=" ht t p://www.springframework.org/schema/beans ht t p://www.springframework.org/schema/beans/spring-beans-2.5.xsd ht t p://www.springframework.org/schema/cont ext ht t p://www.springframework.org/schema/cont ext /spring-cont ext -2.5.xsd ht t p://www.springframework.org/schema/t x ht t p://www.springframework.org/schema/t x/spring-t x-2.5.xsd"> <bean id="t ransaksiServiceHt t pInvoker" class="org.springframework.remot ing.ht t pinvoker.Ht t pInvokerServiceExport er" p:service-ref="t ransaksiService" p:serviceInt erface="org.javadeskt op.pos.service.TransaksiService" /> <bean id="mast erServiceHt t pInvoker" class="org.springframework.remot ing.ht t pinvoker.Ht t pInvokerServiceExport er" p:service-ref="mast erService" p:serviceInt erface="org.javadeskt op.pos.service.Mast erService" /> </beans> Dalam konf igurasi 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. konf igurasi spring untuk client invoke http invoker dr server : client-contex-httpinvoker.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="ht t p://www.springframework.org/schema/beans" xmlns:xsi="ht t p://www.w3.org/2001/XMLSchema-inst ance" xmlns:cont ext ="ht t p://www.springframework.org/schema/cont ext " xmlns:t x="ht t p://www.springframework.org/schema/t x" xmlns:p="ht t p://www.springframework.org/schema/p" xsi:schemaLocat ion="ht t p://www.springframework.org/schema/beans ht t p://www.springframework.org/schema/beans/spring-beans-2.5.xsd ht t p://www.springframework.org/schema/cont ext ht t p://www.springframework.org/schema/cont ext /spring-cont ext -2.5.xsd ht t p://www.springframework.org/schema/t x ht t p://www.springframework.org/schema/t x/spring-t x2.5.xsd"> <bean id="t ransaksiService" p:serviceUrl="ht t p://localhost :8080/javadeskt op-server/TransaksiService" p:serviceInt erface="org.javadeskt op.pos.service.TransaksiService" /> <bean id="mast erService" p:serviceUrl="ht t p://localhost :8080/javadeskt op-server/Mast erService" p:serviceInt erface="org.javadeskt op.pos.service.Mast erService" /> </beans> Konf igurasi 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 konf igurasi berikut ini di dalam web.xml-nya

<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="ht t p://java.sun.com/xml/ns/javaee" xmlns:xsi="ht t p://www.w3.org/2001/XMLSchema-inst ance" xsi:schemaLocat ion="ht t p://java.sun.com/xml/ns/javaee ht t p://java.sun.com/xml/ns/javaee/webapp_2_5.xsd"> <cont ext -param> <param-name>cont ext CongLocat ion</param-name> <param-value> classpat h:applicat ionCont ext .xml classpat h:server-ht t pinvoker-ct x.xml </param-value> </cont ext -param> <list ener> <list ener-class>org.springframework.web.cont ext .Cont ext LoaderList ener</list ener-class> </list ener> <servlet > <servlet -name>mast erServiceHt t pInvoker</servlet -name> <servlet -class>org.springframework.web.cont ext .support .Ht t pRequest HandlerServlet </servlet class> </servlet > <servlet > <servlet -name>t ransaksiServiceHt t pInvoker</servlet -name> <servlet -class>org.springframework.web.cont ext .support .Ht t pRequest HandlerServlet </servlet class> </servlet > <servlet -mapping> <servlet -name>mast erServiceHt t pInvoker</servlet -name> <url-pat t ern>/Mast erService</url-pat t ern> </servlet -mapping> <servlet -mapping> <servlet -name>t ransaksiServiceHt t pInvoker</servlet -name> <url-pat t ern>/TransaksiService</url-pat t ern> </servlet -mapping> </web-app> Konf igurasi 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 T hree Tier dalam aplikasi desktop. Masih banyak teknik lain dalam implementasi arsiktektur T hree Tier. Kalau anda f amiliar dengan arsitektur aplikasi Java ME yang terhubung dengan Server, anda pasti tidak asing lagi dengan konsep T hree Tier. Tidak semua aplikasi desktop harus menggunakan konsep T hree Tier, silahkan disesuaikan dengan kebutuhan masing-masing dan pastikan anda mengerti manf aat T hree Tier dibanding Client-Server, beserta kelemahanya. Tidak ada teknologi yang sempurnya. Semoga bermanf aat.

Anda mungkin juga menyukai