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();
}}
}
No comments:
Post a Comment