Anda di halaman 1dari 5

Contoh Penggunaan Java RMI

Java RMI(Remote Method Invocation) merupakan fitur dari J2SE yang memungkinkan kita untuk mengakses dan mengendalikan object yang berada pada host yang berbeda atau dengan kata lain, kita mengakses object yang berada pada Java Virtual Machine(JVM) yang berbeda. Hal ini berarti kita bisa memanggil method yang terdapat pada object tersebut. Bagian ini akan membahas mengenai contoh sederhana Java RMI sehingga memudahkan pembaca dalam memahami konsep RMI. Sebagai bentuk pemrograman tersebar, setidaknya ada beberapa bagian dari RMI yang harus ada: 1. Interface yang berisi method yang bisa dipanggil. 2. Object yang akan di-share, yang mengimplementasikan Interface di atas. 3. Aplikasi server yang akan meng-share dan memberi nama object tersebut ke registry. 4. File stub yang akan degenerate dari object yang di-share tersebut. 5. Client yang akan mengambil object yang di-share di registry dengan berdasarkan nama yang dimiliki object tersebut dan memanggil method yang dimiliki oleh object tersebut. Sesuai dengan beberapa file di atas, maka kita harus membuat file tersebut satu persatu. 1. Interface yang berisi method yang bisa dipanggil. Pertama, kita harus membuat interface yang berisi method yang nantinya akan dipanggil. // OperasiNilai.java import java.rmi.Remote; import java.rmi.RemoteException; public interface OperasiNilai extends Remote{ public int ambilNilai() throws RemoteException; public int tambahNilai(int nilaiTambah) throws RemoteException; public String ambilNama() throws RemoteException; } Interface yang akan dibuat, harus meng-induk pada interface Remote. Selain itu setiap method yang dibuat, harus melempar(throws) exception berupa RemoteException. Langsung compile Interface ini dengan perintah pada command prompt/shell: javac OperasiNilai.java

2.Membuat Object yang akan di-share, yang mengimplementasikan Interface di atas. Berikutnya adalah mengimplementasikan Interface di atas pada object yang akan di-share. // NilaiImpl.java import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class NilaiImpl extends UnicastRemoteObject implements OperasiNilai { public NilaiImpl() throws RemoteException{ super();

} public int ambilNilai() throws RemoteException { return 80; } public int tambahNilai(int nilaiTambah) throws RemoteException { return nilaiTambah+60; } public String ambilNama() throws RemoteException { return "nama mahasiswa"; }
}

Object tersebut harus menginduk pada UnicastRemoteObject dan mengimplementasikan Interface sebelumnya (OperasiNilai) . setiap method dalam interface bisa dideklarasikan sesuai keperluan. Selain itu, class tersebut harus mempunyai Constructor yang melempar(throws) RemoteException dan memanggil constructor induk. Langsung compile Class ini dengan perintah pada command prompt/shell: javac NilaiImpl.java

3. Membuat Aplikasi server yang akan meng-share dan memberi nama object tersebut ke registry. Selanjutnya adalah membuat server yang menginisiasi object yang akan di-share dan mendaftarkan object tersebut ke registry. //NilaiServer.java import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.RemoteException; import java.util.logging.Level; import java.util.logging.Logger; public class NilaiServer { public static void main(String[] args){ try { NilaiImpl objectNilai=new NilaiImpl(); Naming.rebind("object1", objectNilai); } catch (RemoteException ex) { Logger.getLogger(NilaiServer.class.getName()).log(Level.SEVERE, null, ex); } catch (MalformedURLException ex) { Logger.getLogger(NilaiServer.class.getName()).log(Level.SEVERE, null, ex); } } } Pada contoh di atas, object NilaiImpl diinisialisasi dan diberi nama objectNilai. objectNilai tersebut didaftarkan pada rmiregistry dengan nama object1 dengan menggunakan Naming.rebind(). Selain itu kedua hal di atas harus di-catch exceptionnya. NilaiImpl objectNilai=new NilaiImpl(); //inisialisasi object Naming.rebind("object1", objectNilai); //penamaan object dengan nama object1

Dengan ini, kebutuhan untuk server sudah hampir terpenuhi. Selanjutnya kita harus mengcompile file-file di atas. Misalkan file di atas terletak pada folder server di direktori computer anda maka gunakan perintah pada command prompt atau pada shell: Langsung compile Interface ini dengan perintah pada command prompt/shell: javac NilaiServer.java sehingga pada folder tersebut terdapat 6 buah file, yaitu 3 file java di atas dan 3 file class hasil compile. OperasiNilai.java OperasiNilai.class NilaiImpl.java NilaiImpl.class NilaiServer.java NilaiServer.class 4. Membuat File stub yang akan degenerate dari object yang di-share tersebut. Untuk membuat file stub, cukup kita menggenerate stub dari class NilaiImpl.class atau class dari object yang akan dishare. rmic NilaiImpl sehingga kita akan mendapatkan satu file tambahan yaitu NilaiImpl_stub.class . file ini akan kita ambil dan diletakkan di client. 5. Client yang akan mengambil object yang di-share di registry dengan berdasarkan nama yang dimiliki object tersebut dan memanggil method yang dimiliki oleh object tersebut. import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.util.logging.Level; import java.util.logging.Logger; public class NilaiClient { public static void main(String args[]){ try { String url= "rmi://127.0.0.1/object1"; Object o1=Naming.lookup(url); OperasiNilai objNilai=(OperasiNilai) o1; System.out.println("ambil Nama: "+objNilai.ambilNama()); System.out.println("ambil Nilai: "+objNilai.ambilNilai()); System.out.println("tambah Nilai: "+objNilai.tambahNilai(40)); } catch (NotBoundException ex) { Logger.getLogger(NilaiClient.class.getName()).log(Level.SEVERE, null, ex); } catch (MalformedURLException ex) { Logger.getLogger(NilaiClient.class.getName()).log(Level.SEVERE, null, ex); } catch (RemoteException ex) { Logger.getLogger(NilaiClient.class.getName()).log(Level.SEVERE, null, ex); } }

Pada bagian client ini kita membutuhkan file interface OperasiNilai.class hasil compile pada bagian sebelumnya. Class tersebut letakkan pada folder client bersama dengan file NilaiClient.java sebelum dicompile. pada bagian client ini juga, object di ambil dari registry melalui nama yang diberikan dan memanggil method yang ada pada object tersebut. String url= "rmi://127.0.0.1/object1"; // dari url berupa ip address atau nama host dari object, dilanjutkan dengan nama object. Object o1=Naming.lookup(url); //ambil object dari registry dengan menggunakan Naming.lookup OperasiNilai objNilai=(OperasiNilai) o1; //overcast object dengan Interface yang didesain di awal System.out.println("ambil Nama: "+objNilai.ambilNama()); //panggil method yang terdapat pada object tersebut. System.out.println("ambil Nilai: "+objNilai.ambilNilai()); System.out.println("tambah Nilai: "+objNilai.tambahNilai(40)); Setelah itu compile file tersebut: javac NilaiClient.java ditambah dengan stub pada langkah 4, maka pada folder client terdapat file-file berikut: NilaiClient.java NilaiClient.class NilaiImpl_stub.class OperasiNilai.class

Dengan begitu kita bisa menjalankan baik server maupun client. Pertama, kita jalankan terlebih dahulu rmiregistry dengan perintah berikut. start rmiregistry

Sehingga muncul jendela baru

Jalankan server dengan perintah berikut: java NilaiServer

Langkah java

terakhir,

kita

panggil

method

dari

client NilaiClient

Dengan begitu kita telah memanggil object dari server, dan menggunakan beberapa method yang dimiliki object tersebut.