JAVA Remote Method Invocation (RMI) Geylani Kardaş geylani.kardas@ege.edu.tr 2006 Güz Dönemi Dağıtık Sistemler Dersi 30/10/2006 Ege Üniversitesi Uluslararası Bilgisayar Enstitüsü Bornova - İZMİR İçerik Uzak Nesne Kavramı Java RMI Mimarisi RMI Sisteminin Hazırlanması Örnek Uygulamalar Kaynaklar 30/10/2006 Java Remote Method Invocation - Geylani KARDAŞ 2 Uzak Nesne Kavramı Uzak nesnelerin ortaya çıkma nedeni: 30/10/2006 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ı 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. Java Remote Method Invocation - Geylani KARDAŞ 3 Uzak Nesne Kavramı CORBA (Common Object Request Broker Architecture): OMG (Object Management Group) tarafından ortak veri iletişimi ve servis tanımlamalarının verildiği bir standarttır. Nesne tabanlı farklı programlama dilleri ile hazırlanmış olan nesnelerin birbirleri ile iletişimine imkan verir. Örneğin Java kullanılarak hazırlanmış bir istemci nesnenin başka bir makinede yer alan ve C++ kullanılarak hazırlanmış bir sunucu nesneden hizmet alması mümkündür. Ancak performansının yavaş olması karmaşık gerçekleştirimlere ihtiyaç duyması birlikte işlerlik (interoperability) problemlerinin olması CORBA’nın dezavantajlarıdır. 30/10/2006 Uzak nesne haberleşmesinde kullanılan Java RMI ise sadece Java nesnelerinin kullanımı göz önüne alındığında anlaşılması daha kolay ve kullanımı daha uygun bir yapıdadır. Java Remote Method Invocation - Geylani KARDAŞ 4 Java RMI Mimarisi Java RMI, Java teknolojisine bağlı dağıtık uygulamaların hazırlanmasına Uzak Java nesnelerine ait metotların ağ üzerindeki diğer Java sanal makinelerince uyandırılıp kullanılmasına olanak sağlar. Uzak nesneye ait metodun çağırılabilmesi için çağıran programın ilgili nesnenin ara yüzüne bir referansının olması gerekir. RMI, parametrelerin ağ üzerinde belirlenen formatta gönderilmesi için kodlanmasında (parameter marshalling) ve bunların geri elde edilmesinde (parameter unmarshalling) nesne serileştirmeyi (object serialization) kullanmaktadır. 30/10/2006 Java Remote Method Invocation - Geylani KARDAŞ 5 Java RMI Mimarisi 30/10/2006 RMI mimarisinde nesnelerin birbirleri ile olan iletişimi ve parametre kodlama [Hortsmann & Cornell, 2000] Java Remote Method Invocation - Geylani KARDAŞ 6 Java RMI Mimarisi 30/10/2006 İstemci bir uygulama uzak bir nesnenin metodunu kullanmak istediğinde “stub” adı verilen vekil bir nesnenin kapsadığı metodu sıradan bir Java nesnesinin metodunu kullanmak istermiş gibi çağırmaktadır. İstemci makinede yer alan “stub”; çağırımda kullanılacak olan parametreleri bir bayt bloğu olarak hazırlamakta ve kodlamaktadır. Parameter Marshalling adı verilen bu kodlama işlemi, verilerin bir sanal makineden diğer bir sanal makineye belli bir format altında transferini sağlar. “Stub” nesnenin hazırladığı blokta, çağırılacak metodun tanımı ve uzak nesnenin belirteci (identifier) de yer alır. Java Remote Method Invocation - Geylani KARDAŞ 7 Java RMI Mimarisi Sunucu tarafında görev yapan alıcı nesne taşıma katmanından kendisine ulaşan bloğu açar. Çağrılan nesneyi belirleyerek bu nesnenin ilgili metodunu çağırır. İşlem sonucunu benzer şekilde kodlayarak oluşan paketi istemcideki “stub” nesnesine gönderir. Ağ üzerinde transfer, varsayılan olarak TCP/IP üzerinden gerçekleşmesine karşın esnek yapıdan dolayı UDP’nin de kullanılması imkanı vardır. Bu sürecin karmaşık olduğu ortadadır. Ancak mimaride bu prosedürler tamamıyla otomatik işlemektedir 30/10/2006 Uygulama geliştiricilerin yukarıdaki yapılardan çok protokol üzerinde çalışan sistemleri hazırlama ile uğraşmalarına imkan tanınmaktadır. Java Remote Method Invocation - Geylani KARDAŞ 8 Java RMI Mimarisi RMI İsimlendirme Servisi: 30/10/2006 İstemcilerin uzaktaki nesnelerin metotlarını RMI ile çağrılabilmeleri için, söz konusu uzak nesnelere ilişkin referansları elde etmesi gerekmektedir. RMI modelinde bu amaca yönelik olarak bir isim sunucu (name server) kullanılmaktadır. Uzak nesneler java.rmi.Naming isimli bir sınıfta bulunan bind() metodunu kullanarak kendilerini İsim Kayıtçısı (Naming Registry) servisine kaydettirmelidirler. İstemciler de java.rmi.Naming isimli sınıfın lookup() isimli metodunu kullanarak uzak nesnelerin hangileri olduğuna bakıp istenen uzak nesneye bir referans elde edebilmektedir. Java Remote Method Invocation - Geylani KARDAŞ 9 RMI Sisteminin Hazırlanması RMI tabanlı bir sistemin oluşturulmasında öncelikle uzak nesneye ait ara yüzün tasarlanıp hayata geçirilmesi daha sonra bu ara yüzü uygulayan sınıfın hazırlanması gerekir. Bu sınıf rmic adı verilen araca (tool) parametre olarak verildiğinde gerekli “stub” kodu otomatik olarak hazırlanır. RPC’ye (Remote Procedure Call); rpcgen’e protokol tanımlama dosyasının verilmesi ile ilgili “stub” ve iskelet (skeleton) kodlarının oluşması açısından benzerlik göstermektedir. Uzak nesneleri türeten RMI sunucusu, isimlendirme kayıtçısına bu nesneleri bağlar. İstemci uygulama ise bu kayıtlanmış nesnelerin ara yüzünü kullanarak uzak metot çağırımını gerçekleştirir. 30/10/2006 Java Remote Method Invocation - Geylani KARDAŞ 10 RMI Sisteminin Hazırlanması 30/10/2006 Nesne kalıtım diyagramında görüldüğü gibi sunucu sınıfının, java.rmi.server paketinde yer alan RemoteServer sınıfının bir uzantısı olması gerekmektedir. Ancak soyut bir sınıf olan RemoteServer’in, sadece sunucu nesneleri ile uzak “stub”lar arasındaki iletişim mekanizmasını tanımlamasından dolayı uzak nesne çağırımlarında sunucu olacak nesneler, RMI paketi ile gelen ve RemoteServer sınıfının bir uzantısı olan UnicastRemoteObject sınıfının bir uzantısı olarak tasarlanır. Java Remote Method Invocation - Geylani KARDAŞ 11 Örnek Uygulamalar Öğrenci Sorgulama Weather Service [Deitel et al, 2001] 30/10/2006 Java Remote Method Invocation - Geylani KARDAŞ 12 Kaynaklar 30/10/2006 Danny A., Li S., Houle P., Wilcox M., Phillips R., Mohseni P., Zeiger S., Bergsten H., Ferris M., Diamond J., Bogovich M., Fleury M., Vedati K., Halberstadt A., Patzer A., 1999, Professional Java Server Programming: with Servlets, JavaServer Pages (JSP), XML, Enterprise JavaBeans (EJB), JNDI, CORBA, Jini and Javaspaces, Wrox Press Inc., USA, 1121p Deitel H. M., Deitel P.J., Santry S.E., 2001, Advanced Java 2 Platform How to Program, Prentice Hall, New Jersey – USA, 1875p Horstmann C. S., Cornell G., 2000, Core Java 2 Volume II - Advanced Features, Sun Microsystems Press, California - USA, 920p Java Remote Method Invocation - Geylani KARDAŞ 13 Teşekkürler 30/10/2006 Java Remote Method Invocation - Geylani KARDAŞ 14 JAVA Remote Method Invocation (RMI) Geylani Kardaş geylani.kardas@ege.edu.tr 2006 Güz Dönemi Dağıtık Sistemler Dersi 30/10/2006 Ege Üniversitesi Uluslararası Bilgisayar Enstitüsü Bornova - İZMİR