JAVA RMI

Remote Method Invocation, Türkçesi ile Uzaktan Metot Çağırımı, bir cihazda bulunan bir JAVA class object’nin uzaktaki başka bir cihaz tarafından çağırılması verilen isimdir. Server ve client mantığına dayanan bu teknoloji, farklı cihazlar ile internet üzerinden dağıtık uygulama geliştirmeye fırsat sunar. JAVA’nın local cihazlardaki Serializable olayına benzemektedir. RMI, JAVA’nın Remote adlı class’ı extend eden bir interface, bir server ve bir clientten oluşur. Client, server üzerinden metot çağıracağı zaman, stub adı verilen bir yapıya gider ve buradan metot çağırır. Direk olarak class’a erişmez. Client istek yapınca, stub’da bir paket oluşturulur ve client’a iletilir. Client tarafında bu paketi açan skeleton adında bir yapı vardır. Paket açılır, istenilen işlemler yapılır ve tekrardan server’da bulunan stub’a gönderilir. Stub gelen isteği işleyerek, gerekli sonuçları skeleton’a geri bildirir. Bu olay sayesinde sadece internet üzerinden ortak çalışmalar yapılabilir ve RMI, JAVA’nın temelinde var olan cross platform özelliğine sahiptir.

Basit olarak bir kod örneği ile konuyu görsel olarak açıklayalım.

Remote Class’ını Extend Eden Area Interface



JAVA’nın Remote adlı class’ından bir tane interface hazırladık. Bu class içerisinde kare, üçgen, dikdörtgen ve daire şekillerinin alanını hesaplayacak metotlar barındırmaktadır. Bunun yanı sıra, dairenin alanını hesaplarken yardımcı olacak PI sayısı da burada tanımlanmıştır. Olası bir network hatasını yakalamak için her metot hata fırlatma mekanizmasına sahiptir. Interface’i yazdıktan sonra, Area.java class’ını javac komutu ile compile ediyoruz.

Area Interface’ini Implement Eden ShapeArea Class



ShapeArea class’ı, Area interface’ini implement eden classtır. UnicastRemoteObject class’ı RemoteServer class’ından extend olan, TCP üzerinden point-to-point object referansını destekleyen ve server process’i hayatta iken referansları geçerli olan ve tekrarlanmayan remote object’leri tanımlamak için yazılmış bir JAVA class’ıdır. Bu class bir RMI class’ıdır, bu nedenle RMI compiler’ı ile compile edilmek zorundadır. rmic komutu ile bu class da compile edilir. Bu işlemden sonra ortaya bir tane stub çıkar. Adı ShapeArea_Stub.class olur

Server



Server class’ı bir tane ShapeArea object’i yapar ve şuan sadece localhosttan deneyebildiğim için 127.0.0.1 adresinin 1099. portundan AreaService dizini kullanarak, ShapeArea object’ini, final bir class olan Naming class’ın rebind metotu ile network’e açar. RemoteException, AccessException ve MalformedURLException hataları fırlatabilir. Bu class da çalışmaya hazır olması için javac komutu ile derlenir.

Client




Client class’ı ise ShapeAre object’ine referans eden bir tane Area referansı oluşturur. Oluşturduğu Area referansına server’ın adresini arayan lookup metotu ile bir object arar ve object bulununca bunu Area tipine cast ederek referansında saklar. Class javac komutu ile derlenir. Olası hatalar try-catch bloğu ile yakalanmaya çalışılır.

Son olarak server ile client arasında bağlantıyı sağlamak kalmıştır. Terminal ekranından öncelikle rmiregistry komutu verilir. Rmiregistry komutu server üzerinde, sağlanan port numarası ile remote object registry oluşturur ve başlatır. Daha sonra başka bir terminalden server java komutu ile çalıştırılır. Server kısmında tüm detaylar sağlandığına göre geriye sadece client’ı çalıştırmak kalmıştır. Client da java komutu ile çalıştırılır. Artık bağlantı sağlanmıştır. Stub gelen isteğe cevap vererek, skeleton’a object’i paketleyerek yollar. Skeleton ise object üzerinden hangi metotları çağıracağını ve gerekli parametreleri stub’a yollayarak cevabı alır ve ekrana bastırır.

Popular posts from this blog

Polya’nın Problem Çözme Teknikleri

Mikroislemci Temelleri