Mendeteksi Terputusnya Koneksi dalam Remote Method Invocation


RMI (Remote Method Invocation) merupakan salah satu teknologi dalam Java yang dapat digunakan untuk membangun aplikasi berbasis client-server. Dalam membangun aplikasi client-server, kita tidak bisa menjamin bahwa koneksi jaringan akan selalu stabil. Bisa saja suatu waktu koneksi terputus. Lantas bisakah kita mendeteksi ketika koneksi dari client ke server terputus?

Pasti bisa, karena dalam RMI setiap metode yang di remote akan mengeluarkan error RemoteException, sehingga jika terjadi error tersebut, maka otomatis jaringan terputus. Namun jika kita membangun kelas dengan banyak metode, maka apa kita harus mengecek di semua metode?

Enggak juga 😀 Kita bisa membuat sebuah remote method ping() yang dapat kita gunakan untuk melakukan proses ping ke server, jika proses ping tersebut gagal, maka otomatis koneksi ke server terputus, dan saat itu kita jalankan di client aksi saat koneksi terputus, misal memberi tahu pengguna client bahwa koneksi terputus.

Jadi bagaimana cara pembuatannya? Pertama buatlah sebuah interface Ping yang digunakan untuk melakukan ping.

package khannedy.rmi.api;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Ping extends Remote {

	void ping() throws RemoteException;
	
}

Setelah membuat interface Ping, buat pulang implementasi Ping di server.

package khannedy.rmi.server;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

import khannedy.rmi.api.Ping;

public class PingServer extends UnicastRemoteObject implements Ping {

	private static final long serialVersionUID = 1L;

	public PingServer() throws RemoteException {
		super();
	}

	@Override
	public void ping() throws RemoteException {
		// do nothing
	}

}

Buatlah sebuah listener di client untuk mendeteksi ketika proses Ping gagal atau disconnect.

package khannedy.rmi.client;

public interface PingListener {

	void onDisconnect();

}

Sekarang saatnya membuat class PingClient, dimana kelas ini merupakan kelas yang melakukan proses pengecekan menggunakan Thread secara realtime dan continue. Jadi ketika proses ping gagal, maka listener akan ditrigger.

package khannedy.rmi.client;

import java.rmi.RemoteException;

import khannedy.rmi.api.Ping;

public class PingClient implements Runnable {

	private Ping ping;
	private Thread thread;
	private PingListener listener;

	public PingClient(Ping ping) {
		this.ping = ping;
		thread = new Thread(this);
	}

	public void startPing(PingListener listener) {
		this.listener = listener;
		thread.start();
	}

	@Override
	public void run() {
		try {
			while (true)
				ping.ping();
		} catch (RemoteException e) {
			listener.onDisconnect();
		}
	}

}

Seakarang di client, kita bisa menggunakan PingClient menggunakan kode seperti dibawah ini :

Ping ping = (Ping) registry.lookup("ping");

PingClient client = new PingClient(ping);
client.startPing(new PingListener() {

	@Override
	public void onDisconnect() {
		System.out.println("Ups, Server Disconnect");
	}
});

Selamat mencoba 😀

Iklan

5 pemikiran pada “Mendeteksi Terputusnya Koneksi dalam Remote Method Invocation

  1. Ass mualaikum, wr wb
    mas saya lagi belajar java netbeans klo boleh minta referensi buat apa dulu begitu tapi buat pemula pengen aplikasi yang aplikatip buat sehari hari jadi keliatan hasilnya…
    Terimakasih mas….monggo…

  2. mas eko,

    kalau mau membangun rmi pakai spring dan hibernate seperti apa ya? punya contoh codenya kalau yang jdbc saya sudah berhasil.

    Saya ada masalah juga dengan spring dan hibernate seperti ini :
    1. saya punya kelas Penjualan , DetailPenjualan dan Produk
    bagaimana caranya menerapkan transaksi pada kelas2 tersebut, kalau penjualanDao melakukan save otomatis akan mensave detail penjualan dan mengupdate jumlah produk
    begitu juga kalau update.
    kalau punya contoh kodenya saya sangat berterima kasih

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s