Archive for Java

Lebih suka dengan hbm.xml

Hibernate sejak keluarnya jdk 1.5 memungkinkan untuk menggunakan annotation untuk mendefinisikan mapping. Tidak perduli bagaimana orang bilang menggunakan annotasi itu mudah, aku lebih suka menggunakan cara classic yaitu hbm.xml.

Dalam membuat sebuah aplikasi database yang kulakukan:

  1. Buat dahulu rancangan class diagram yang ada, sejujurnya designku paling sering bermula dari class diagram. Langkah-langkah design sebelumnya hanya diangan-angan.
  2. Buat setiap class atau generate dari class diagram, jika memungkinkan
  3. Aktifkan hbm2ddl.auto agar hibernate secara otomatis men-generate tabel dan kolom-kolom beserta semua constraintnya
  4. Buat hibernate mapping
  5. Create session factory agar hbm2ddl dijalankan.
  6. Periksa tabel dan constraint hasil generate. Telitilah sampai default value, not-null, index, unique, dan lain-lain.
  7. Jika ada yang salah perbaiki mapping, kemudian kembali ke langkah 5.
  8. Matikan hbm2ddl.auto.

Comments off

Mengirim Object ke komputer lain

Apabila kita ingin mengirimkan sebuah Object ke komputer lain, tentunya kita membutuhkan jalur komunikasi antar aplikasi. Salah satu penerapannya menggunakan Socket. Disini saya tidak akan menjelaskan tentang pemanggilan method di komputer lain, tapi hanya tentang kirim-mengirim data antar 2 aplikasi yang berada di komputer berbeda. Dengan menggunakan java tentunya.

Dalam menggunakan socket harus ada yang berperan sebagai server dan ada yang berperan sebagai client. Tugas sever dalam hal ini adalah membuka sebuah port dan menunggu request dari client. Sedangkan client harus mengetahui alamat server dan port yang dibuka oleh server lalu mengirimkan request. Maka akan terjadilah jalur komunikasi antara server dan client.

Server dapat membuka port dan menunggu dengan program sederhana seperti ini:

import java.net.*;

public class Server {
public static void main(String[] args) throws Exception {
	ServerSocket server = new ServerSocket(9999);
	Socket socket = server.accept();
	// TODO: do something with socket
}
}

apabila server diatas punya alamat di 192.168.1.1 maka di sisi client kita bisa membuat:

import java.net.*;

public class Client {
public static void main(String[] args) throws Exception {
	Socket socket = new Socket("192.168.1.1", 9999);
	// TODO: do something with socket
}
}


Sekarang kita ingin agar bisa saling menulis dalam bentuk Object, maka pada sisi Server maupun Client harus kita tambahkan:

// this is something with socket
	ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
	ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
	// TODO: baca melalui in dan tulis melalui out
	out.close();
	in.close();

Misalnya kita ingin saling berkiriman dalam bentuk String, maka pada sisi server lengkapnya:

import java.io.*;
import java.net.*;

public class Server {
public static void main(String[] args) throws Exception {
	ServerSocket server = new ServerSocket(9999);
	Socket socket = server.accept();
	// this is something with socket
	ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
	ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
	// ini baca melalui in dan tulis melalui out
	Object obj = in.readObject();
	String str = "";
	if (obj instanceof String) {
		str = (String) obj;
		System.out.println(str);
	}
	out.writeObject(str + " juga");
	out.close();
	in.close();
}
}

pada client:

import java.io.*;
import java.net.*;

public class Client {
public static void main(String[] args) throws Exception {
	Socket socket = new Socket("192.168.1.1", 9999);
	// this is something with socket
	ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
	ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
	// ini baca melalui in dan tulis melalui out
	out.writeObject(new String("Hallo"));
	Object obj = in.readObject();
	if (obj instanceof String) {
		String str = (String) obj;
		System.out.println(str);
	}
	out.close();
	in.close();
}
}

Cobalah dan perhatikan output di sisi server maupun client. Bagaimana dengan Object selain String, misalnya Karyawan? Semua Object dapat dibaca dengan metode diatas dengan syarat Object tersebut harus Serializable. Jadi Karyawan harus implements java.io.Serializable agar bisa dikirim melalui socket.

Jika kita perhatikan pada program diatas, program server akan berhenti menunggu apabila ada client yang terkoneksi. Dengan berhentinya dia menunggu, maka akan sampai pada akhir program dan keluar. Untuk membuatnya menunggu lagi setelah melayani sebuah client, tentu saja kita membutuhkan perulangan. Dengan perulangan, kita bisa membuat server kembali ke perintah server.accept. Dalam contoh diatas server juga tidak bisa menerima multiple request. Untuk bisa membuatnya multiple request kita harus melakukan threading terhadap penanganan request, sehingga server akan selalu siap untuk accept.

Comments off