Java Remote Method Invocation (RMI) Giriş

Java RMI ile hesap makinesi örneği

0 3,014

Giriş

Bu yazıda Java RMI altyapısını kullanarak basit bir hesap makinesi örneği gerçekleştirilecektir. Böylece, RMI ile temel düzeydeki bilgilerin verilmesi amaçlanmaktadır. RMI client ve server hazırlamak, Remote Method Invocation gerçekleştirmek gibi giriş düzeyindeki konular ele alınacaktır.

Hesap makinesine ait toplama, çıkarma, bölme ve çarpma gibi metodlar dağıtık olarak RMI alt yapısı ile işletilecektir. Client-Server mimarisi ile iletişim sağlanacaktır. Client RMI programı girdileri komut istemcisinden alacaktır. Sonrasında bu bilgiler ile RMI Server tarafındaki bir metodu tetikleyecektir, metod çalıştırıp işlem gerçekleştirilecek ve sonuç Client’a geri döndürülecektir.

İşletim sistemi olarak Ubuntu, IDE olarak ise Eclipse tercih edilmiştir.

 

Remote Method Invocation Tanımı

RMI, Java teknolojilerinden biridir. Aslında RPC (Remote Procedure Call)’ nin Java’daki karşılığıdır diyebiliriz. RMI ile dağıtık işlem yapabilen Java programları tasarlayabiliriz. Yani Client-Server mimarisinde bir çözümle Server yazılım diye adlandırdığımız Java programında bir metoda çağrımda bulunabiliriz.

RMI, Client ve Server olmak üzere iki ana parçadan oluşur. Server yazılımı bir takım metodlardan oluşur. bu metodlar işlem yapan ve Client’lara cevap veren bir yapıya sahiptir. Bu işlemler bir bilgisayar ağı üzerinden yapılmaktadır. Client yazılım ise “Stub” veya “Skeleton” diye adlandırılır. Client, Server tarafta bir metodun tetiklenmesi için istekte bulunan taraftır.

Basit bir RMI programı aşağıdaki adımları içerir:

  • Remote bir interface tanımı
  • Server yazılımın oluşturulması
  • Client yazılımın oluşturulması

 

Remote Interface Dizaynı

java.rmi” paketi altında yer alan “Remote” interface’den kalıtım alan bir yeni bir interface tanımı ile başlayacağız. Dizayn edeceğimiz interface içinde uzaktan çağrım yapılabilecek metodların imzaları yer alacaktır. Örneğimizde hesap makinesi yaptığımız için “sum, substract, divide, multiply” gibi fonksiyonlar yer alacaktır.

 

“RemoteCalculator” Sınıfı

RemoteCalculator” isminde bir Java sınıfı oluşturarak devam ediyoruz. Bu sınıf ile remote metod çağrımlarını işleyecek yapıyı hazırlıyoruz. Client taraftan Server’a RMI isteği geldiğinde bu sınıf hesaplama işlemlerini üstelenecektir. “RemoteCalculator” sınıfı “java.rmi” paketi altındaki “UnicastRemoteObject” sınıfından katılım alacaktır. Ayrıca, bir üst basamakta dizayn ettiğimiz “RemoteCalculatorFunctions” interface’ini implemente edecektir.

 

Server Program

CalculatorServer” isminde bir sınıf oluşturup devam ediyoruz. Bu sınıf RMI mimarisindeki Server yazılıma denk düşmektedir. Client’lardan gelen istekleri karşılayacak olan sınıftır. “java.rmi.Naming” sınıfındaki “rebind” metodu ile istekleri karşılayabilir konuma geleceğiz. “rebind” metodu iki parametre almaktadır. İlk parametre Client yazılımların Server ulaşmasını veya bağlanmasını sağlayacak tekil bir isimden ibarettir, diğer parametre ise istek ulaştığında hangi nesnenin kullanılacağını belirtir. İkinci parametre RMI servisin kendisidir. 

 

Client Program

Client programda “Naming” sınıfına ait “lookup” metoduyla Server ile iletişim kuracağız. Bu metoda RMI Url’i parametre olarak vereceğiz. İlgili fonksiyon bize remote metodları tanımladığımız “RemoteCalculatorFunctions” interface’ini kalıtım alan bir nesne örneği döndürecektir. Bu nesne vasıtasıyla metod çağrımı yapacağız ve bu çağrım sonucu Server tarafta ilgili metod bir işlem gerçekleştirip bize bir cevap dönecektir.

RMI Registry Başlatmak

Komut satırından RMI registry’i başlatarak iletişimi başlatmak için gerekli RMI altyapısını hazırlarız.

 

Server Programı Başlatmak

 

Client Programı Başlatmak

Github

https://github.com/batux/remote_method_invocation

 

Umarım faydalı bir yazı olmuştur. Bir sonraki makalede görüşmek dileğiyle …

 

Email adresiniz yayınlanmayacaktır.