Thursday, February 9, 2017

JAVA RMI Remote Method Invocation

JAVA RMI Remote Method Invocation


RMI (Remote Method Invocation) adalah JAVA API yang berisi kumpuan method untuk melakukan pemangilan method secara jarak jauh (remote) dalam suatu jaringan. sistem RMI memperbolehkan sebuah object pada suatu java virtual machine unutk memanggil (invoke) sebuah object yang sedang berjalan pada java virtual machine lainnya. RMI menyediakan untuk komunikasi jarak jauh antara program yang ditulis dalam bahasa pemrograman Java. RMI merpakan fasilitas yang dimiliki java untuk pemanggilan objek dari sisi yang berbeda, dimana sisi yang menyediakan objek adalah server dan sisi yang memanggil objek adalah client.

Arsitektur RMI 

Arsitektur RMI terdiri dari tiga bagian :
  1. Remote Refrence Layer
  2. Digunakan untuk menemukan lokasi remote object, membuat panggilan point to point dan relokasi secara otomatis. selain itu, bagian ini jjuga befungsi untuk mengaktifkan proses server baru jika belum pernah di aktifkan sebelumnya
  3. Stub dan Skeleton
  4. Stub dan Skeleton merupakan interface antara aplikasi dan RMI system. Stub bertindak sebagai Client side proxy dan Skeleton Sebagai server side proxy.
  5. Transport Layer
  6. Transport layer digunakan untuk membuat dan memelihara dua koneksi antara 2 JVM menggunakan TCP/IP. Transport layer menerima dan merespon setiap panggilan dari atau ke server dan client.

Langkah-Langkah Pembuatan program dengan RMI pada JAVA

Dalam RMI, semua informasi tentang pelayanan server disediakan pada interface yang dibuat pada suatu program. Dengan melihat method-method yang ada di interface seorang programer dapat memberitahukan method apa saja yang dikerjakan oleh server, meliputi data apa yang diterima dan apa yang akan dikirim sebagai return valuenya. 


Contoh menghitung luas segitiga
  1. Mendefinisikan remote interface
  2. // Comment
    import java.rmi.Remote;
    import java.rmi.RemoteException;

    /**
    *
    * @author arifzorro
    */
    public interface Serverjob extends Remote{
    public int Luassegitiga(int alas,int tinggi) throws RemoteException;

    }

    fungsi dari server adalah untuk mengitung luas segitiga.
  3. Mengimplementasikan interface Serverjob


  4. import java.rmi.RemoteException;
    import java.rmi.registry.LocateRegistry;
    import java.rmi.registry.Registry;
    import java.rmi.server.UnicastRemoteObject;
    import javax.swing.JOptionPane;
    public class Server extends UnicastRemoteObject implements Serverjob{

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


    public void servercreate() throws RemoteException{
    Registry reg=LocateRegistry.createRegistry(1099);
    reg.rebind("server", new Server());
    System.out.println("Server running");
    JOptionPane.showMessageDialog(new JOptionPane(), "Server Started");
    }
    @Override
    public int Luassegitiga(int alas, int tinggi) {
    int luas;
    System.out.println("alas :"+alas);
    System.out.println("tinggi :"+tinggi);
    luas=(alas*tinggi)/2;
    System.out.println(""+luas);
    return luas;
    }

    }

    disini dilakukan pembuatan registry RMI dengan port yang digunakan pada RMI 1099, pada method luas segitiga diisi dengan perintah yang ingin dilakukan, disini untuk menghitung luas segitiga.
  5. Menstart sever


  6. public class mainserver {
    public static void main(String[] args) throws RemoteException{
    Server s=new Server();
    s.servercreate();

    }
    }
  7. Membuat Class Client yang mengakses Server
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

/**
*
* @author arifzorro
*/
public class Client {
public static void main(String[] args) throws RemoteException, NotBoundException{
Registry reg=LocateRegistry.getRegistry("127.0.0.1",1099);
Serverjob rmi=(Serverjob) reg.lookup("server");
int luas=rmi.Luassegitiga(5,2);//alas=5 tinggi =2
System.out.println("luas segitiga ditampilkan pada sisi client "+luas);
}
}

Registry menyediakan satu referensi bagi client untuk melihat server. Port1099 digunakan sebagai default port bagi RMI registry. Denganmenggunakan RMI registry, client dapat memperoleh referensi ke obyek yang berada pada komputer lain dan memanggil method-nya seperti keobyek lokal. Server menggunakan Naming. Rebind untuk mendapatkan penetapan port dari RMI registry, sedangkan client melihat ke server dengan Naming.lookup dalam registry dan kemudian membuat permintaan untuk suatu referensi obyek" outputnya pada sisi client setelah dijalankan :
output pada sisi server setelah client dijalankan :



Available link for download