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.javaInterface yang akan dibuat, harus meng-induk pada interface Remote. Selain itu setiap method yang dibuat, harus melempar(throws) exception berupa RemoteException.
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;
}
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.
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.// NilaiImpl.javaimport 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";}}
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;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.
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 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 terakhir, kita panggil method dari client…
java NilaiClient
java NilaiClient
Dengan begitu kita telah memanggil object dari server, dan menggunakan beberapa method yang dimiliki object tersebut.
No comments:
Post a Comment