1. Definisi
RMI adalah sebuah tekhnik pemanggilan method remote yang lebih secara
umum lebih baik dari RPC. RMI menggunakan paradigma pemrograman
berorientasi obyek. RMI memungkinkan kita untuk mengirim obyek sebagai
parameter dari remote method. Dengan dibolehkannya program Java
memanggil method pada remote obyek, RMI membuat pengguna dapat
mengembangkan aplikasi Java yang terdistribusi pada jaringan.
2. Tujuan
- Menyediakan fasilitas bagi programmer untuk dapat mendistribusikan objek yang digunakan pada beberapa proses yang berbeda.
- Dapat berjalan dalam satu mesin ataupun di beberapa mesin yang terhubung dengan jaringan.
3. Aplikasi Obyek Terdistribusi
Aplikasi RMI sering kali terdiri dari dua program terpisah yaitu server dan client.
1. Aplikasi Server
- Membuat beberapa remote objek
- Menyediakan referensi terhadap objek-objek tersebut sehingga dapat diakses
- Menunggu RMI client merequest server
2. Aplikasi Client
- Mendapatkan referensi remote ke satu atau lebih objek remote di server
- Menjalankan method dari objek tersebut
- Meminta pemanggilan ke beberapa remote objek berbasarkan referensi yang ditnya.
erimaRMI menyediakan mekanisme dimana server dan client berkomunikasi
dan memberikan informasi secara timbal balik, aplikasi ini disebut
aplikasi obyek terdistribusi.
4. Cara Kerja RMI
Dalam model ini, sebuah proses memanggil method dari objek yang
terletak pada suatu host/computer remote. Dalam paradigma ini, penyedia
layanan mendaftarkan dirinya dengan server direktori pada jaringan.
Proses yang menginginkan suatu layanan mengontak server direktori saat
runtime, jika layanan tersedia, maka referensi ke layanan akan
diberikan. Dengan menggunakan referensi ini, proses dapat berinteraksi
dengan layanan tsb. Paradigma ini ekstensi penting dari paradigma RPC.
Perbedaannya adalah objek yang memberikan layanan didaftarkan
(diregister) ke suatu layanan direktori global, sehingga memungkinkan
untuk ditemukan dan diakses oleh aplikasi yang meminta layanan tersebut.
5. Implementasi RMI
Berikut ilustrasi yang terjadi pada metode RMI:
Programmer pada client menulis :
Server_id.service(values_to_server,result_arguments);
Pada sisi server mempunyai fungsi sebagai berikut :
Public service(in type1 arg from client; out type2 arg to_client)
{——-}
Programmer pada client tidak mengetahui bahwa reply message yang didapatkan berasal dari server yang dikirim melalui jaringan.
Gambar Ilustrasi Implementasi RMI
Komponen-komponen dam RMI(gambar 2.2) :
- Object A(client) : meminta layanan
- Object B(server) : menghantarkan layanan
- Proxy for B
- Ketika object A mempunyai remote reference ke object B, maka akan
timbul objek proxy B pada host object A. Proxy terbuat ketika remote
object reference digunakan pertama kali.
- Proxy adalah perwakilan objek yang berada pada remote, dengan kata
lain ketika terjadi invokasi dari A ke B ditangani seolah – olah hanya
mengakses Proxy B.
- Ketika invokasi terjadi proxy menggunakan metode marshals untuk
membungkus pesan yang akan dikirim ke server. Dan setelah menerima hasil
dari server proxy menggunakan metode unmarshal (membuka bungkus) untuk
kemudian diteruskan ke client (Object A).
- Pada sisi server, terdapat object kerangka (skeleton) yang
berhubungan ke class, kalau object pada class tersebut dapat diakses
oleh RMI.
- Skeleton menerima pesan kemudian melakukan unmarshal dan
meneruskan ke method object yang dituju. Dan kemudian menunggu hasil
dari object B dan kemudian membungkus hasil (unmarshal) dan kemudian
dikirimkan ke client (Objec A).
- Ada bagian dari skeleton B yang disebut dengan dispatcher.
Dispatcher menerima request dari communication module, dan kemudian
mengidentifikasi invokasi dan mengarahkan permintaan ke corresponding
method ( method pada skeleton yang berfungsi untuk berkomunikasi dengan
object).
- Communication Modul (Modul Komunikasi)
- Communication modul pada client atau server bertanggung
jawab dalam pertukaran pesan yang dilakukan melalui metode request dan
reply.
- Bagian ini bertugas untuk menterjemahkan antara referensi
objek lokal dan remote. Proses berkomunikasi antara mereka disimpan
dalam remote object table.
- Yang menggenerate class untuk proxy dan skeleton adalah middleware.
- Contoh : CORBA, Java RMI
Object A dan object B dipunyai oleh aplikasi (berada pada Application
Layer) Remote Reference Modul dan Communication modul dimiliki oleh
middleware. Proxy B dan Sekeleton B berada antara middleware dan
aplikasi yang di generate oleh middleware.
6. Langkah-langkah proses dengan RMI :
- Urutan pemanggilan pada object client mengaktifkan method pada proxy
yang akan berhubungan dengan invoked method (method yang ter-invokasi)
pada object B.
- Kemudian method yang ada pada proxy melakukan pembungkusan argumen
menjadi suatu pesan (marshalling) dan meneruskan ke modul komunikasi.
- Berdasarkan pada remote reference yang didapat dari remote reference
modul, modul komunikasi memulai request dan reply protocol melalui
network.
- Modul komunikasi pada server menerima request dari client. Kemudian
berdasarkan referensi lokal yang diterima dari remote reference modul
maka akan mengaktifkan method untuk berkomunikasi dengan object pada
skeleton B (corresponding method).
- Method pada skeleton meng-ekstrak (unmarshalling) argumen pada pesan
yang di terima dan mengaktifkan corresponding method (method yang
berfungsi untuk melakukan komunikasi) pada object B (server).
- Setelah menerima hasil dari object B, method dari skeleton akan
membungkus hasil tersebut dalam sebuah pesan (marshalling) dan
meneruskan pesan yang sudah dibungkus ke modul komunikasi.
- Modul komunikasi mengrimkan pesan tersebut ke client melalui jaringan.
- Modul komunikasi pada client menerima hasil (reply) dari server dan meneruskan ke corresponding method pada proxy.
- Kemudian proxy meng-ektrak hasil (unmarshalling) dan meneruskan ke object A (client).
7. Contoh RMI dengan menggunakan Java RMI :
Server object akan mencetak ”Hello Ruddy” ke layar & mengembalikan pesan ke klien
Pada sisi server :
- Server Method
import java.rmi.*;
public interface SimpleInterface
String printMessage(String name) throws RemoteException;
}
- Server Object
import java.rmi.*;
import java.rmi.server.*;
public class SimpleServer extends UnicastRemoteObject implements SimpleInterfac
public SimpleServer() throws RemoteException { super(); }
public String printMessage(String name) throws RemoteException {
System.out.println(name);
return(Hello + name);
}
public static void main(String args[]) {
System.setSecurityManager(new RMISecurityManager());
try {
SimpleServer newServer = new SimpleServer();
System.out.println(SimpleServer attempting to
bind to the registry);
Naming.rebind(//ruddy.info:30010/SimpleServer,
newServer);
System.out.println(SimpleServer bound in the registry);
} catch(Exception e) {System.out.println(SimpleServer error: + e.getMessage());
e.printStackTrace();
}}
}
Pada sisi client :
import java.rmi.*;
public class SimpleClient {
private static SImpleInterface server = null;
public static void main(String args[]) {
try {
server = (SimpleInterface)
Naming.lookup(//ruddy.info:30010/SimpleServer);
System.out.println(server.printMessage (Ruddy));
} catch(Exception e) {
System.out.println(SimpleClient error: + e.getMessage());
e.printStackTrace();
}}
}