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;Setelah membuat interface Ping, buat pulang implementasi Ping di server.
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Ping extends Remote {
void ping() throws RemoteException;
}
package khannedy.rmi.server;Buatlah sebuah listener di client untuk mendeteksi ketika proses Ping gagal atau disconnect.
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
}
}
package khannedy.rmi.client;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.
public interface PingListener {
void onDisconnect();
}
package khannedy.rmi.client;Seakarang di client, kita bisa menggunakan PingClient menggunakan kode seperti dibawah ini :
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();
}
}
}
Ping ping = (Ping) registry.lookup("ping");Selamat mencoba.
PingClient client = new PingClient(ping);
client.startPing(new PingListener() {
@Override
public void onDisconnect() {
System.out.println("Ups, Server Disconnect");
}
});
0 comments:
Post a Comment