Java RMI - Giriş
RMI, Remote Method Invocation. Bir sistemde (JVM) bulunan bir nesnenin başka bir JVM üzerinde çalışan bir nesneye erişmesine / bunu çağırmasına izin veren bir mekanizmadır.
RMI, dağıtılmış uygulamalar oluşturmak için kullanılır; Java programları arasında uzaktan iletişim sağlar. Pakette verilmektedir.java.rmi.
Bir RMI Uygulamasının Mimarisi
Bir RMI uygulamasında iki program yazıyoruz, bir server program (sunucuda bulunur) ve bir client program (müşteride bulunur).
Sunucu programının içinde, uzak bir nesne oluşturulur ve bu nesnenin referansı istemci için (kayıt defteri kullanılarak) sağlanır.
İstemci programı, sunucudaki uzak nesneleri ister ve yöntemlerini çağırmaya çalışır.
Aşağıdaki şema bir RMI uygulamasının mimarisini göstermektedir.
Şimdi bu mimarinin bileşenlerini tartışalım.
Transport Layer- Bu katman, istemciyi ve sunucuyu birbirine bağlar. Mevcut bağlantıyı yönetir ve ayrıca yeni bağlantılar kurar.
Stub- Saplama, uzak nesnenin istemcideki temsilidir (proxy). İstemci sisteminde bulunur; istemci programı için bir ağ geçidi görevi görür.
Skeleton - Bu, sunucu tarafında bulunan nesnedir. stub uzak nesneye istek iletmek için bu iskelet ile iletişim kurar.
RRL(Remote Reference Layer) - İstemci tarafından uzak nesneye yapılan referansları yöneten katmandır.
Bir RMI Uygulamasının Çalışması
Aşağıdaki noktalar, bir RMI uygulamasının nasıl çalıştığını özetlemektedir -
İstemci uzak nesneye bir çağrı yaptığında, saplama tarafından alınır ve sonunda bu isteği RRL'ye iletir.
İstemci tarafı RRL isteği aldığında, adı verilen bir yöntemi çağırır. invoke() nesnenin remoteRef. İsteği sunucu tarafında RRL'ye iletir.
Sunucu tarafındaki RRL, isteği nihayet sunucuda gerekli nesneyi çağıran Skeleton'a (sunucudaki proxy) iletir.
Sonuç, müşteriye geri gönderilir.
Marshalling ve Unmarshalling
Bir istemci uzak bir nesnede parametreleri kabul eden bir yöntemi çağırdığında, parametreler ağ üzerinden gönderilmeden önce bir mesajda paketlenir. Bu parametreler ilkel tipte veya nesnelerde olabilir. İlkel tip durumunda, parametreler bir araya getirilir ve ona bir başlık eklenir. Parametrelerin nesne olması durumunda, bunlar serileştirilir. Bu süreç olarak bilinirmarshalling.
Sunucu tarafında, paketlenmiş parametreler ayrılır ve ardından gerekli yöntem çağrılır. Bu süreç olarak bilinirunmarshalling.
RMI Kaydı
RMI kayıt defteri, tüm sunucu nesnelerinin yerleştirildiği bir ad alanıdır. Sunucu her nesne oluşturduğunda, bu nesneyi RMIregistry ile kaydeder (bind() veya reBind()yöntemler). Bunlar, olarak bilinen benzersiz bir ad kullanılarak kaydedilir.bind name.
Uzak bir nesneyi çağırmak için, istemcinin o nesnenin bir başvurusuna ihtiyacı vardır. O sırada istemci, bağlama adını kullanarak nesneyi kayıt defterinden alır (lookup() yöntem).
Aşağıdaki çizim tüm süreci açıklamaktadır -
RMI'nin Hedefleri
RMI'nin hedefleri şunlardır -
- Uygulamanın karmaşıklığını en aza indirmek için.
- Tip güvenliğini korumak için.
- Dağıtılmış çöp toplama.
- Yerel ve uzak nesnelerle çalışma arasındaki farkı en aza indirin.