Remoting Spring Melalui Protokol RMI

Spring RMI Cover

Spring Framework mendukung beberapa teknologi remoting seperti EJB, RMI, Hessian, Burlap, HTTP Invoker, dan web service. Remoting berguna pada kasus dimana ada beberapa aplikasi yang berbeda yang berjalan pada JVM yang berbeda atau terletak pada mesin yang berbeda dan membutuhkan komunikasi melalui protokol tertentu (distributed application).

Penggambarannya seperti ini. Kalau biasanya kita membuat program dan yang mengakses program tersebut adalah seorang manusia maka sekarang yang mengakses adalah sebuah mesin, sebuah program lain.

Misal program server menyediakan sebuah service untuk melakukan operasi CRUD buku pada basisdata, anggap saja kelas BookServiceImpl. Ketika program client akan melakukan operasi CRUD buku (tentu saja basisdatanya bukan lokal) maka dia bisa menggunakan service yang telah disediakan oleh server. Dengan kondisi yang seperti itu kita harus membuat sebuah program yang bertindak sebagai penyedia service yang akan diakses oleh program lain / klien. Remoting adalah solusinya.

rmi

Pada tulisan ini saya akan menunjukkan remoting menggunakan Spring Framework melalui protokol RMI. Tulisan ini adalah bagian pertama, tulisan selanjutnya akan membahas protokol-protokol yang lain.

Apa itu Rmi

Remote Method Invocation adalah teknologi remoting berbasis Java yang memungkinkan 2 buah aplikasi yang berjalan diatas JVM (Java Virtual Machine) yang berbeda dapat saling berkomunikasi. Dengan RMI sebuah objek dapat meng-invoke/memanggil sebuah method dari remote objek.

Ilustrasinya seperti gambar diatas. Remote objek adalah objek dari kelas yang berada pada server yang dipublish sebagai service. Objek yang meng-invoke adalah objek pada aplikasi client.

Untuk mengimplementasikan RMI ini sebenarnya ada beberapa aturan yang harus diikuti seperti
– Membuat interface yang merupakan turunan dari java.rmi.Remote
– Kelas yang mau dijadikan service harus merupakan implementasi interface diatas dan juga merupakan turunan dari java.rmi.server.UnicastRemoteObject
– dll

Namun dengan menggunakan Spring kita sudah dimudahkan dengan library yang dimilikinya.

Aplikasi Server

Kita ambil contoh kita ingin menyediakan service untuk mendapatkan data Person yang memiliki data nama dan email. Kita buat kelasnya

file : Person.java

Ingat, kita harus mengimplementasikan Serializable pada pada kelas Person supaya objek kelas ini bisa ditransfer melalui jaringan.

Selanjutnya kita buat sebuah interface yang mendefiniskan service yang kita sediakan untuk aplikasi lain

file : PersonService.java

Untuk implementasinya kita buat sederhana saja. Simpan datanya di ArrayList. Kalau mau pakai basisdata pakai JDBC atau Hibernate atau JPA juga boleh.

file : PersonServiceImpl.java

Service/layanan sudah kita buat. Sekarang tinggal kita export kelas diatas menjadi sebuah service yang siap diakses dari klien. Untuk itu kita perlu membuat sebuah file konfigurasi seperti berikut

file : server-context.xml

Dari konfigurasi diatas terlihat jelas bahwa
– nama servie adalah PersonRmiService
– kelas yang diajidkan service adalah PersonServiceImpl
– interface service adalah PersonService
– port yang digunakan adalah 4321

Tinggal bikin kelas main untuk menjalankan server

file : App.java

Aplikasi Client

Untuk aplikasi client ini saya buat project yang berbeda pada Netbeans.
Pada client juga membutuhkan file konfigurasi dan berikut adalah isinya

file : client-context.xml

dari file diatas dapat dijelaskan
– service Url adalah rmi://localhost:4321/PersonRmiService” dimana PersonRmiService adalah nama service yang didefiniskan pada server
– service interface adalah PersonService yang terletak pada server sehingga kita perlu mengimport dependency project server (menggunakan Maven mudah)

Dan berikut adalah kode program untuk mengakses service

file : App.java

Running Program

Jalankan program server terlebih dahulu kemudian jalankan program client, berikut screenshot hasilnya

running

Download Source Code

Source Code project dapat didownload pada Github saya dalam bentuk Maven project
program server tersedia disini
program client tersedia disini

Referensi

[1] Mak, Gary dkk, Spring Recipes A Problem-Solution Approach, Apress, New York City, 2010
[2] Johnson, Rod dkk, Spring Framework Reference Documentation, 2004

Facebook Comments
 

Agung Setiawan

Agung Setiawan adalah software engineer di BukaLapak.com, penulis sekaligus pecinta sastra, dan pembaca buku

 
Halo, perkenalkan saya Agung Setiawan.
Saya Software Engineer di BukaLapak.
Simak pemikian saya soal dunia Software Engineering via Twitter di @agungsetiawanmu dan facebook
Blog ini saya update seminggu sekali jadi sering-sering saja mampir
Mau belajar Vim bareng saya?
Belajar ngoding dari nol menggunakan PHP

One thought on “Remoting Spring Melalui Protokol RMI

Leave a Reply

Your email address will not be published. Required fields are marked *