Java RMI - Ahmet Sayar

Download Report

Transcript Java RMI - Ahmet Sayar

JAVA RMI
Serdar BAKIR
Deniz ÜNAL
Harun AYDIN
Kocaeli Universitesi
Bahar 2012
İÇİNDEKİLER
1.Uzak Nesne Kavramı
2.Remote Method Invocation(RMI)
3.RMI Mimarisi
4.RMI Uygulaması Yaratmak
5.Kaynakça
Uzak Nesne Kavramı
• Nesneye dayalı analiz ve tasarım metodolojilerinin
popülerleşmesi ve buna dayalı olarak ortaya çıkan
nesne tabanlı bilgisayar yazılımlarının farklı makineler
üzerinde haberleşmesi ihtiyacı yüzünden uzak nesne
kavramı ortaya çıkmıştır.
•
Hedeflenen; farklı makineler üzerinde çalışan
nesnelerin birbirleri ile doğrudan mesajlaşmasını
sağlamaktır.
•
Yapısal sistemlerde dağıtık süreçler arasında
kullanılan RPC (Remote Procedure Call) mekanizmasına
benzer şekilde standart bilgisayar ağı protokolleri
(örneğin TCP/IP) üzerinden nesnelerin birbirleri ile
haberleşmesi düşünülmüş ve buna dayalı mimariler
gerçekleştirilmiştir.
Remote Method Invocation(RMI)
• Java RMI programcının dağıtık java teknolojisi
tabanlı uygulamalar geliştirebilmesini sağlar.
Farklı yerlerde bulunabilen Java sanal
makinelerinden uzak Java nesnelerinin metotları
çalıştırılabilir.
• Uzak Metot Çagrımı (RMI) ilk olarak JDK 1.1 ile
gündeme gelmis ve ag programlamayı daha
yüksek seviyelere tasımıstır. Uzak Metot
Çagrımı’nın kullanımının nispeten kolay olmasının
yanında fark edilir güçte teknolojiler arasında
gösterilebilir.
Remote Method Invocation(RMI)
Remote Method Invocation(RMI)
• Java RMI ağ işlemleri için kullanıcıya soket ve
streamlere göre daha üst düzeyde bir ara yüz
sunmaktadır. Bu nedenle, RMI ile dagıtık
programlama yapmak soket ve stream
kullanımına göre daha az karmasıktır.
Programcı açısından bakıldıgında, RMI
kullanıldıgında istemci/sunucu uygulamaların
gelistirilmesi sırasında ag islem alt düzeydeki
ayrıntıları ile ugrasmak gerekmemektedir.
RMI Mimarisi
• RMI mimarisi 3 bağımsız katmandan oluşur. Bu
katmanlar Java uygulaması ile JVM arasında
bulunur.
• 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.
RMI Mimarisi
• Remote Reference Layer : Bu katman
isteklerin yürütülme işlerinin
gerçekleştirilmesinden sorumludur.
• Transport Layer : Bu katman ise bağlantı
ayarları, gelen istekleri yönetme, görüntüleme
ve gelen istekleri dinleme gibi işlerden
sorumludur.
RMI Mimarisi
• 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.
RMI Mimarisi
• 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.
RMI Mimarisi
RMI Mimarisi
1.
2.
3.
4.
5.
6.
7.
8.
9.
Java RMI sunucu programı, istemci tarafından çağrılacak olan nesnenin
instance’ını yaratarak JAVA RMI kayıt kütüğüne (registry) ekler.
Java RMI client programı, registry’ye bakarak uzaktaki objeye erişmek
için girişimde bulunur.
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.
Client bu stub’ı kullanarak uzaktaki objenin metodlarından birisini çağırır.
Stub, RMI Server içerisindeki iskelet ile bağlantı kurar.
Bu iskelet istekte bulunulan nesnenin (remote object) metodlarından
birisini çağırır.
Cevap iskelete döner.
İskelet cevabı istemciye döndürür.
İstemcideki stub da cevabı alır ve programa iletir.
Java RMI Uygulaması Yaratmak
• Uzaktaki objeyi (remote object) tanımlayan bir arayüz
geliştirilir. Bu arayüz (interface) java.rmi.Remote
adındaki arayüzden türemelidir.
• Bu arayüzü implement eden bir sınıf tasarlanır. (Servent
sınıfı)
• Servent instancelarını yöneten bir server yaratılır.
Yaratılan sunucu aynı zamanda registry’ye kayıt
işlemlerinden de sorumludur.
• 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.
Java RMI Uygulaması Yaratmak 1
• İlk olarak bir bilgisayarda Server uygulamamızı yazacağız.
• Önce NetBeans IDE ‘yi açıp File->New Project ‘i seçiyoruz. Açılan pencerede
Java Application’ı seçip next diyoruz.
Java RMI Uygulaması Yaratmak 2
• Proje ismimizi ve package ismimizi girip Finish’e tıklıyoruz.
Java RMI Uygulaması Yaratmak 3
•
Server klasımızın içini doldurmadan önce, server ile client arasındaki bağı sağlayacak
olan interface’i oluşturacağız. Bunun için paketimizin ismine sağ tıklayıp new
sekmesinden Java Interface’i seçiyoruz.
Java RMI Uygulaması Yaratmak 4
• Interface ismimizi ve Package ismini girip Finish’e tıklıyoruz.
Java RMI Uygulaması Yaratmak 5
• Interface’imize java.rmi.Remote ve java.rmi.RemoteExeption klaslarını import
ediyoruz. Ayrıca Remote klasını da extend ediyoruz.
• Daha sonra interface’te bulunması istenen metotlarımızı yazıyoruz.
• Burada String döndüren sayHello() metodumuz bulunmakta. Görüldüğü gibi
metoda ulaşmada sorun olduğunda RemoteException fırlatabilmesi için bir
bildirim yapılıyor.
Java RMI Uygulaması Yaratmak 6
•
•
Server klasımızda da gereken rmi klaslarını import ettik ve interface’imizi de implemente
ediyoruz.
Bundan sonra boş bir constructer methodumuzu yerleştirdik ve Hello interface’inden gelen
sayHello() metodumuzu «Hello» Stringi döndürecek şekilde doldurduk.
Java RMI Uygulaması Yaratmak 7
•
•
•
Main metodumuzda da ServerRMI klasından ve Hello interface’inden birer nesne oluşturup
1050 portunda bir stub nesnesi oluşturuyoruz.
Registry’ye stub nesnemizi Hello adıyla bildiriyoruz.
Oluşabilecek hataları try catch blokları ile kontrol ettikten sonra serverımız çalışmaya hazır.
Java RMI Uygulaması Yaratmak 8
• Artık client uygulamamızı yazabiliriz.
• Aynı server uygulamamızdaki gibi New
project’e tıklayarak yeni bir proje oluşturyoruz.
Burada dikkat etmemiz gereken şey package
adlarının serverla aynı olması. Görüldüğü gibi
client’ımızın da package adı Rmi.
• Aynı Hello interface’imiz burada
da var. İçerik olarak da tamamen
aynısı.
• Yine ilk olarak onu ekleyerek
başlıyoruz.
Java RMI Uygulaması Yaratmak 9
Java RMI Uygulaması Yaratmak 9
• ClientRMI klasımızda da yine boş bir constructer metdomuz
var.
• Main metodunda Server’ın bulunduğu IP adresi,
bağlanacağımız port numarası paremetreleri ile bir Registry
nesnesi oluşturuyoruz. Böylece server’a bağlanmış sayılabiliriz.
Hello türündeki nesneyi server tarafında «Hello» adıyla
bildirdiğimizi hatırlarsınız. Burada da o nesneyi registry’den
«Hello» adıyla buldurarak programımıza katıyoruz. Nesnedeki
sayHello metodunun cevabını da ekrana yazdırıyoruz. IP
adresinin 127.0.0.1 olması localhost’ta aynı bilgisayara
bağlanılacağını göstermektedir. Yani server da client da aynı
bilgisayardadır.
Java RMI Uygulaması Yaratmak 10
• Artık hem client hem de server uygulamamız
hazır olduğuna göre ilk olarak server
uygulamasını çalıştırara deneyebiliriz.
• ServerRMI.java dosyasına sağ tıklayıp Run File ‘a
tıklıyoruz.
• Konsol output pencesinde yukarıdaki
gibi çıktılar olması gerekiyor.
Java RMI Uygulaması Yaratmak 11
• Aynı şekilde ClientRMI.java dosyasını çalıştırdığımızda
aşağıdaki gibi bir çıktıyla karşılaşıyoruz.
• Burada «Hello!» yazısı server uygulamamızdaki
sayHello() metodundan gelen cevaptır.
Kaynakça
• Java RMI, William Grosso, O'Reilly Media,2001
• http://notes.corewebprogramming.com/stude
nt/RMI.pdf
• http://www.universalteacherpublications.com
/Java/rmi/index.htm
• http://docs.oracle.com/javase/jndi/tutorial/o
bjects/storing/remote.html
• http://belgeler.cs.hacettepe.edu.tr/yayinlar/es
ki/CORBA_20122034.pdf