Remote Method Invocation (RMI)
adalah sebuah teknik pemanggilan method remote yang lebih secara umum lebih baik daripada RPC. RMI menggunakan paradigma pemrograman berorientasi obyek (Object Oriented Programming). 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. Aplikasi RMI sering kali terdiri dari dua program terpisah yaitu server dan client. Aplikasi server semacam ini biasanya membuat beberapa objek remote, menyediakan referensi terhadap objek-objek tersebut sehingga dapat diakses, serta menunggu client menginvoke/memanggil method dari objek-objek remote tersebut. Aplikasi client mendapatkan referensi remote ke satu atau lebih objek remote di server dan menjalankan method dari objek tersebut.
RMI menyediakan mekanisme dimana server dan client berkomunikasi danmemberikan informasi secara timbal balik. Aplikasi semacam ini seringkali disebut aplikasi objek terdistribusi.
Aplikasi objek terdistribusi seringkali melakukan hal berikut:
• Melokasikan objek remoteAplikasi dapat menggunakan satu dari dua mekanisme untuk mendapatkan referensi ke objek remote. Aplikasi dapat mendaftarkan objek remote dengan fasilitas penamaan RMI (naming facility)yaitu rmiregistry atau aplikasi dapat mem-pass dan mengembalikan referensi objek remote sebagai bagian dari operasi normal.
• Berkomunikasi dengan objek remote
Detail dari komunikasi antara objek remote ditangani oleh RMI, bagi programmer komunikasi remote tampak seperti invokasi method Java standar.
• Memanggil (load) bytecode untuk objek yang di-pass
Karena RMI mengizinkan pemanggil (caller) untuk mem-pass objek ke objek remote, RMI menyediakan mekanisme yang diperlukan objek me-load kode objek, sebagaimana juga mentransmisikan datanya.
Ilustrasi berikut menggambarkan aplikasi RMI terdistribusi yang menggunakan registry untuk mendapatkan referensi ke objek remote. Server memanggil registry untuk mengasosiasikan (mengikat) suatu nama dengan objek remote. Client mencari objek remote dengan namanya pada registry server dan meng-invoke method dari objek.
Ilustrasi ini juga menunjukkan sistem RMI menggunakan Web server untuk memanggil class bytecodes, dari server ke client dan dari client ke server, untuk objek-objek yang diperlukan.
Langkah-Langkah Pembuatan Program dengan RMI
Dalam RMI, semua informasi tentang satu pelayanan server disediakan dalam suatu definisi remote interface. Dengan melihat pada definisi interface, seorang pemrogram dapat memberitahukan method apa yang dapat dikerjakan oleh server, meliputi data apa yang diterima dan data apa yang akan dikirim sebagai tanggapan.
Definisi yang ada pada remote interface menentukan karakteristik methods yang disediakan server yang dapat dilihat oleh client. Client programmer harus dapat mengetahui methods apa yang disediakan server dan bagaimana memanggilnya langsung dengan melihat ke remote interface. Client mendapatkan referensi ke remote object melalui RMI registry.
Membangun suatu aplikasi terdistribusi menggunakan RMI meliputi 6 langkah. Keenam langkah tersebut adalah:
1. Mendefinisikan remote interface
2. Implementasi remote interface dan server
3. Pengembangan client (atau applet) yang menggunakan remote interface
4. Mengkompilasi source files dan mem-buat stub and skeletons
5. Memulai (start) RMI registry
6. Menjalankan server dan client
Model RMI – Remote Interface
● Remote interface – mendefinisikan method apa saj ayang dapat diakses oleh client
● Pada contoh gambar slide 8, objek B dan F harus memiliki remote interface
● Contoh :
– CORBA menggunakan IDL untuk definisi Interface objek server
– RMI menggunakan interface Java untuk definisi objek server
Protokol Request/Reply untuk RMI
Masalah Perancangan untuk RMI
● Semantik Pemanggilan RMI– doOperation() dapat diterapkan dalam beberapa cara untukmenyediakan jaminan pengiriman yang berbeda
● Retry request message : pengiriman ulang requestwalaupun reply diterima atau server diasumsikan gagal
● Duplicate filtering : apakah dilakukan filtering terhadaprequest yang sama atau tidak
– Ketika semua request yang dikirim ulang diterima server, ada dua kemungkinan yang dilakukan objek server
● Retransmission of result : apakah mampu menyimpan (caching) hasil reply, sehingga jika memang perlu melakukan
retransmisi ulang tidak perlu melakukan eksekusi kembali
● Repeated execution prosedur
– Dari dua kemungkinan-kemungkinan dua operasi tersebut, memunculkan beberapa semantik invocation.
Implementasi RMI
Remote Reference Module
– Translasi antara lokal dan remote objek reference menggunakan remote object table● Berisi data semua remote object dan proxy yang dipelihara oleh server
● Digunakan ketika marshaling dan unmarshaling remote object reference
RMI Sublayer terdiri dari
– Proxy (di client), tempat penyimpan lokal untuk remote objek– Dispatcher (di server), menerima request dan menggunakan methodID untuk memilih message di skeleton
– Skeleton (di server), menerapkan method dalam remote interface
● Argumen-argument unmarshaling
● Memanggil method yang sesuai pada remote objek
● Menunggu selesainya pemanggilan
● Melakukan marshaling hasil
Keuntungan RMI
• Salahsatu keuntungan RMI adalah kemampuan untuk download bytecodes (code) dari suatu object’s class, jika class tsb tidak terdefinisikan di VM-nya penerima.
• Type-type dan metode-metode object (class), yang terletak dalam satu VM, dapat dikirim ke VM yang lain, yang mungkin saja remote.
• Sifat-sifat object yang terkirim ini tidak berubah sama sekali
Kelemahan RMI
proses pembukaan socket yang kadang-kadang tidak dapat diimplementasikan lewat jaringan internet, tapi hal ini bisa diatasi dengan menggunakan Spring HttpInvoker, sama persis dengan RMI tapi lewat protokol HTTP.