RMI – Remote Method Invocation

Dağıtık ortamlardaki objeler arası iletişimin gerçekleşmesini sağlar. RMI uygulamalarında socket ve thread yönetimi programcılardan saklanır.

Java RMI farklı sanal makinelerdeki ve farklı host makinelerdeki objeleri çağırmak için kullanılır. Farklı sanal makinelerde yaratılan objelere “remote” objeler denir. Kısaca söylemek gerekirse uzak makinalardaki metodları çağırmak için tasarlanmıştır.

RMI mimarisi 3 bağımsız katmandan oluşur. Bu katmanlar Java uygulaması ile JVM arasında bulunur.

  1. Stub and Skeleton Layer : Bu katman sıralama, network üzerinden gönderilen verinin tekrar orjinal haline dönme işleri, bu verileri alarak Remote Referans Layer’a iletme işlerinden sorumludur. Network üzerinden veri gönderme ve bu verilerin tekrar orjinal haline dönme işleri serialization ile gerçekleştirilir.
  2. Remote Reference Layer : Bu katman isteklerin yürütülme işlerinin gerçekleştirilmesinden sorumludur.
  3. Transport Layer : Bu katman ise bağlantı ayarları, gelen istekleri yönetme, görüntüleme ve gelen istekleri dinleme gibi işlerden sorumludur.

Java RMI 3 ana başlık altında incelenir.

  • Java RMI servers :  Bu sunucu Java RMI arayüzünü implemente eder ve RMI kayıt kütüğüne (registry) nesneyi kaydeder.
  • Java RMI registry : Tüm uzaktaki objeleri izler. Java RMI sunucusunun sunucu sınıfının iskeletine erişmesi gerekir. Uzaktaki objenin iskeleti dediğimiz şey uzak objelerin metodlarına çağrım yapan sunucu taraflı entity’lerdir.
  • Java RMI clients : Önce uzaktaki objelere erişmek için RMI registry’sine bakar. İstemcilerin sunucu sınıfına erişebilmesi gerekir. Bunun için stub adı verilen istemciler için bir proxy vardır. Bu stub uzaktaki objeler için desteklenen tüm arayüzleri implement eder. Stublar ve iskeletler client server arasındaki iletişimi sağlamak amacıyla kullanılırlar.

Java RMI Client, Server ve Registry ilişkilerini gösteren tablo

 

  1. Java RMI sunucu programı, istemci tarafından çağrılacak olan nesnenin instance’ını yaratarak JAVA RMI kayıt kütüğüne (registry) ekler.
  2. Java RMI client programı, registry’ye bakarak uzaktaki objeye erişmek için girişimde bulunur.
  3. Java RMI Registry’si istemciye uzaktaki objenin stub’ının serialize edilmiş halini döner. İstemci de bu nesneyi alır, deserialize eder ve instance’ını yaratır.
  4. Client bu stub’ı kullanarak uzaktaki objenin metodlarından birisini çağırır.
  5. Stub, RMI Server içerisindeki iskelet ile bağlantı kurar.
  6. Bu iskelet istekte bulunulan nesnenin (remote object) metodlarından birisini çağırır.
  7. Cevap iskelete döner.
  8. İskelet cevabı istemciye döndürür.
  9. İstemcideki stub da cevabı alır ve programa iletir.

JAVA RMI UYGULAMASI YARATMAK

  1. Uzaktaki objeyi (remote object) tanımlayan bir arayüz geliştirilir. Bu arayüz (interface) java.rmi.Remote adındaki arayüzden türemelidir.
  2. Bu arayüzü implement eden bir sınıf tasarlanır. (Servent sınıfı)
  3. Servent instancelarını yöneten bir server yaratılır. Yaratılan sunucu aynı zamanda registry’ye kayıt işlemlerinden de sorumludur.
  4. Uzaktaki objeleri kullanan bir istemci yaratılır. İstemcide kayıt kütüğüne sorgu yapılarak alınan nesne üzerinden istenilen metotlara istek gönderilir.

NOT : RMI yardımcı sınıflarını yaratmak için rmic (Java RMI Compiler) çalıştırılır. Java 5’ten sonraki sürümlerle geliştirilmiş uygulamalarda extra rmic çalıştırılmasına ihtiyaç yoktur. Stub sınıfları otomatik olarak  runtime anında yaratılırlar.

Daha detaylı bilgi için tıklayın