Apa itu Remote Method Invocation (RMI)?

Remote Method Invocation atau disingkat RMI adalah sebuah API di dalam bahasa dan lingkungan pengembangan Java. RMI memungkinkan objek pada satu komputer atau JVM (Java Virtual Machine) berkomunikasi dengan objek lain yang berjalan di JVM berbeda dalam jaringan terdistribusi. Bisa dibilang, RMI itu cara mudah untuk bikin aplikasi Java terdistribusi cukup lewat pemanggilan method biasa.

RMI ini versi Java-nya Remote Procedure Call (RPC), tapi punya kelebihan: bisa ngirim objek bersamaan dengan permintaan. Komunikasi antar aplikasi remote ini dilakukan lewat dua objek utama: stub dan skeleton. RMI udah termasuk dalam paket bawaan Java Development Kit (JDK) dari Sun Microsystems lewat package java.rmi.

Secara teknis, permintaan RMI di Java itu sama kayak kita memanggil method biasa dari objek lokal. Bedanya, objeknya berada di komputer lain. Objek ini bisa mengirim data atau perilaku ke remote computer. Sun menyebut ini sebagai “moving behavior”, dan proses ngoper objeknya disebut object serialization.

Contohnya, user di komputer A mengisi form pengeluaran. Program Java di A bisa pakai RMI untuk ngobrol ke program Java di komputer B, yang punya aturan terbaru soal laporan pengeluaran. Komputer B ngasih balik objek berisi aturan terbaru, dan program di A langsung bisa validasi form sesuai kebijakan terbaru — tanpa harus update program di A. Cukup update di B aja.

Kenapa Perlu Remote Method Invocation?

Dalam pengembangan aplikasi Java yang terdistribusi, kita butuh akses ke method yang ada di remote server. Kita juga perlu bisa komunikasi dengan objek remote dan load class miliknya. Nah, semua itu dijembatani oleh RMI.

RMI memungkinkan komunikasi client-server lewat internet. Client bisa kirim request ke server, lalu server membalas sesuai logic-nya. Dengan RMI, programmer Java bisa bikin objek remote yang dapat diakses publik. Objek ini bisa dipanggil dari client cukup dengan method biasa. Komunikasi ini bisa dilakukan via URL dan HTTP.

Depiction of client and server requesting and receiving information
Client minta data ke server, dan server merespons, itulah model client-server.

RMI dirancang untuk mempertahankan model objek Java di jaringan, tetap aman, tetap konsisten, dan tetap enak dipakai — baik untuk objek lokal maupun remote.

Model Implementasi Tiga Layer

RMI diimplementasikan lewat tiga lapisan utama:

1. Stub Program. Stub berada di sisi client, dan terlihat seperti objek asli buat program yang memanggil. Di sisi server-nya ada pasangan yang disebut skeleton. Stub juga bisa disebut proxy.

2. Remote Reference Layer (RRL). Layer ini menangani referensi objek remote. Bisa satu target, bisa multicast. Dia juga yang mengatur aliran request dan response.

3. Transport Connection Layer. Layer ini yang ngurus koneksi jaringan antara stub di client dan skeleton di server. Dia nge-handle request biar bisa nyebrang dari client ke server dan sebaliknya.

Stub dan Skeleton di RMI

Stub dan skeleton adalah dua objek RMI yang memfasilitasi komunikasi antar JVM. Stub itu gateway-nya client, sementara skeleton gateway-nya server.

Ketika method dipanggil lewat stub, stub bakal konek ke JVM, ngirim parameter, nunggu hasil atau exception, lalu ngasih balik ke caller.

Skeleton menerima request, baca parameternya, panggil objek sesungguhnya di server, lalu kirim hasilnya ke client.

Jadi dalam aplikasi RMI, kita butuh dua program: satu di client, satu di server. Di server dibuat objek remote, lalu referensinya bisa diakses oleh program client. RRL menghubungkan client dan server seolah-olah mereka terkoneksi secara virtual.

Cara Kerja Aplikasi RMI

Misalnya, ada aplikasi word processor yang terinstall di server. Client cukup klik ikon di desktop atau lewat command line untuk akses. Saat klik, client mengirim request ke objek remote di server.

Request ini lewat stub → masuk ke RRL di client → diteruskan ke RRL di server → dikirim ke skeleton → objek di server dijalankan → hasilnya dikirim balik ke client. User bisa langsung pakai software itu di komputernya tanpa install lokal.

Marshaling dan Unmarshaling di RMI

Waktu stub di client ngirim parameter ke JVM remote, proses ini disebut marshaling. Parameternya bisa berupa tipe primitif atau objek. Biasanya dibungkus dulu jadi satu paket (termasuk header dan serialisasi untuk objek).

Skeleton di server juga melakukan marshaling saat mengirim hasil kembali ke client.

Begitu hasil sampai ke stub, proses unmarshaling dimulai — yaitu membuka kembali data dan memberikan hasil ke pemanggil. Sama juga saat server nerima paket parameter dari client.

RMI Registry

RMI Registry adalah namespace di sisi server yang nyimpen semua objek remote. Tiap objek punya nama unik. Client bisa ambil referensinya lewat lookup() dengan nama yang udah di-bind() atau reBind().

Sebelum jalanin registry, pastikan window/shell tempat kamu jalanin rmiregistry nggak punya variabel CLASSPATH yang mengarah ke class remote. Kalau registry nemu class-nya di awal, dia nggak bakal load ulang dari server VM, dan client jadi nggak bisa download class remote itu.

Secara default, registry ini jalan di port 1099, tapi kamu bisa ganti asal konsisten antara client dan server code.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *