Client
server
RMI (Remote Method Invocation)
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
1.
Menyediakan
fasilitas bagi programmer untuk dapat mendistribusikan objek yang digunakan
pada beberapa proses yang berbeda.
2.
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 diterimanya.
RMI
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).
- Skeleton for object B
-
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.
- Remote Reference Module
-
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 :
1. Urutan
pemanggilan pada object client mengaktifkan method pada proxy yang akan
berhubungan dengan invoked method (method yang ter-invokasi) pada object B.
2. Kemudian
method yang ada pada proxy melakukan pembungkusan argumen menjadi suatu pesan
(marshalling) dan meneruskan ke modul komunikasi.
3. Berdasarkan
pada remote reference yang didapat dari remote reference modul, modul
komunikasi memulai request dan reply protocol melalui network.
4. 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).
5. 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).
6. 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.
7. Modul
komunikasi mengrimkan pesan tersebut ke client melalui jaringan.
8. Modul
komunikasi pada client menerima hasil (reply) dari server dan meneruskan ke
corresponding method pada proxy.
9. 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();
}}
}