Monday, June 06, 2005

Karakteristik RIA

Karakteristik RIA (Rich Internet Applications) :

  • Poses di server dan komunikasi client-server (network traffic) direduksi dengan sebisa mungkin melakukan proses di client
  • Mendukung cross platform (operating system, device) di client
  • Richness of the media (audio, grphics, video/animation)
  • Bisa membuat grafik atau media file lainya secara on the fly
  • Membutuhkan plugin
  • Data dapat dicache di client- Responsive
  • Control yang lebih bervariasi dan responsif seperti pada aplikasi desktop biasa (date picker, gauges, slider, dan lain-lain)
  • Tampilan dan proses konsisten karena dapat dibuat tidak tergantung browser.
  • Beberapa masih menggunakan browser dengan teknologi HTML + javascript
  • Dapat menyimpan state/data yang lebih besar di client (teknologi cookie dan session pada web bisa ditinggalkan)

Beberapa teknologi RIA:

Kekurangan apliksi WEB (diambil dari majalah SDAAsia versi Indonesia) :

  • Mekanisme pemnyimpanan data di client sangat terbatas, biasanya memanfaatkan cookie dan session dari mekanisme HTTP.
  • Tiap pemrosesan logika biasanya dilakukan di server sehingga respon aplikasi menjadi lambat, selain itu menambah beban di server dan memperbesar data bandwidth jaringan.
  • Tiap alur proses dari aplikai menghasilkan respon halaman web terdiri dari code HTML yang harus di kirim ke client secara lengkap berulang kali, meskipun masih menampilkan halaman yg sama.
  • Validasi dan proses logika di client biasanya memanfaatkan JavaScript, yang dapat diutak-atik atau dinonaktifkan sehingga tidak berfungsi.
  • Efek-efek tampilan atau proses logika di client sering kali mendayagunakan DHTML atau JavaScript yang terkadang tidak compatible dengan browser tertentu. Misalnya menu pop-up muncul di Internet Explorer tetapi tidak tampak atau tidak berfungsi dengan baik di Mozilla.
  • Komponen GUI dari web form terbatas.

Wednesday, June 01, 2005

Apa spring framework memiliki feature AOP?

Spring menggunakan istilah interceptor untuk melakukan mekanisme AOP. Memang dalam dokumentasi spring disebutkan bahwa AOP pada spring framework dibuat sederhana dan tidak memiliki semua kemampuan seperti layaknya AOP framework.

Interceptor/interception ternyata merupakan istilah yang lebih cocok untuk enterprise framework seperti disebutkan dalam buku "Pattern of Software Architecture" karya Schmidt, dijelaskan

The Interceptor architectural pattern allows services to be added transparently to a framework and triggered automatically when certain events occur.

Artikel ini, "Setting the Story Straight: AOP != Interception" (link dari web archive) menarik untuk dibaca. Menurut penulisnya interception pattern berbeda dengan AOP.

Sebagai kesimpulan artikel tersebut: Interception can be seen as a simplified form of AOP.

Friday, May 06, 2005

Java XML-RPC, gampang banget...

Ingin membuat aplikasi client-server? tidak mau membuat web service karena terlalu ribet? tidak mau terlalu banyak coding dengan RMI? coba XML-RPC menggunakan Apache XML-RPC

Apache XML-RPC mudah digunakan. Hanya dengan sedikit coding kita sudah bisa membuat aplikasi client-server. Bisa menggunakan Built-in HTTP Server sebagai server atau kita juga bisa membuat servlet yang di-deploy di web server (servlet container).

Langkah pertama membuat class handler yang akan menjadi class pemroses (processor) dari setiap request. Contoh :
 public class Messenger {
public String send(String address, String message) {
// process sending message here
return "Sending successful to " + address+ " message is \"" + message + "\"";
}
}
Lalu buat server:
  import org.apache.xmlrpc.WebServer;
public class XmlRpcServer {
public static void main(String[] args) {
try {
WebServer webServer = new WebServer(7777);
webServer.addHandler("MyMessanger", new Messenger());
webServer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Setelah itu jalankan server, dan buat client:
  import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Vector;
import org.apache.xmlrpc.XmlRpcClient;
import org.apache.xmlrpc.XmlRpcException;
public class SmsEngineClient {
public static void main(String[] args) {
try {
XmlRpcClient client = new XmlRpcClient("http://localhost:7777");
Vector params = new Vector ();
params.addElement("friend");
params.addElement ("Apa kabar euy?");
String result = (String) client.execute("MyMessanger.send", params);
System.out.println(result);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (XmlRpcException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Jalankan program client, dan lihat hasilnya. Mudah sekali.

Dengan XML-RPC kita bisa dengan mudah melakukan pertukaran data dengan tipe:
int, boolean, java.lang.String, double, java.util.Date, java.util.Hashtable, java.util.Vector dan byte[] (byte array, untuk pengiriman file misalnya).

Jadi kenapa tidak pakai XML-RPC saja?

Menjalankan program Java pada Windows Service atau sebagai Unix daemon

Ingin menjalakan program java sebagai Windows Service? atau sebagai daemon di sistem operasi Linux atau Unix?

Kita bisa gunakan Java Service Wrapper dengan mudah untuk keperluan tersebut. Java Service Wrapper mempunyai tiga metode untuk dapat menjalankan aplikasi java kita sebagai Windows service atau daemon.

Metode yang paling mudah bahkan tanpa mengubah sedikitpun aplikasi yang sudah kita buat. Pada versi 3.1.2, hanya dengan mengubah file wrapper.conf sesuai kebutuhan dan menjalankan file MyApp.bat, kita sudah bisa menjalankan aplikasi java sebagai Windows service.

Tutorial menyusul...

Paging pada iBatis

iBatis memiliki inteface PaginatedList dengan PaginatedArrayList sebagai class implementasi yang bisa kita gunakan untuk keperluan paging dengan mudah. Tetapi sayangnya interface tersebut tidak memiliki method untuk mendapatkan berapa jumlah keseluruhan data. Kita hanya bisa membuat navigasi previous dan next dengan informasi halaman (page) tanpa bisa menampilkan jumlah seleuruh halaman atau record yang ada.

Dibawah ini kode demo menggunakan falitas paging pada ibatis:
 PaginatedList usersPL = UserDao.getUserPaginatedList(2);
for (int i =0; i < usersPL .size(); i++) {
System.out.println(usersPL .get(i));
}
System.out.println(
"-- Page: " + usersPL .getPageIndex() +
", Row size: " + usersPL .getPageSize() );

System.out.println("-- Goto page 3");
usersPL .gotoPage(3);
for (int i =0; i< usersPL .size(); i++) {
System.out.println(usersPL .get(i));
}
System.out.println("-- Page: " + usersPL .getPageIndex() );

System.out.println("-- Goto next page");
usersPL.nextPage(3);
for (int i =0; i< usersPL .size(); i++) {
System.out.println(usersPL .get(i));
}
System.out.println("-- Page: " + usersPL.getPageIndex() );

Followers