Java Remote Method Invocation Nedir?

Java SE

Remote Method Invocation bu yazıda kısaca RMI olarak adlıracağımız kavramdan bahsedeceğim.

Remote Method Invocation yani RMI farklı sunucularda olan metodların başka bir sunucudan çağırılarak kullanılmasında kullanılmaktadır. Java Nesnelerinin kullanmak için farklı bir sunucuya/sanal makina’ya bağlanıtyorsa buna biz Dağıtık Programlama diyoruz. RMI, Dağıtık Programlama yapmamıza olanak sağlamaktadır.

RMI Mimarisi

sfgwewrfw

Katmanlardan oluşmaktadır. Bu katmanlar bize istek, cevaplama , yönlendirme işlemlerini yapmaktadır.

  • Stub

Uygulamadan gelen isteklerin ulaştığı yer Stub’dur. Stub Bağlantı ile başlatır JVM (Java Virtual Machine) ile iletişime geçer. Hataları yakalar, Skeleton’dan gelen sonuçları istemciye iletir.

  • Skeleton

Ulaşn isteklerin ne olduğuna bakarak yönlendirme görevini sağlar. Parametre okur, uzak nesneyi çağırır, metotdan gelen sonucu almakla görevlidir.

  • Remote Reference

Uzak’ta ki nesnelerin ne yapması gerektiğinin anlaşıldığı yerdir. Skeleton’dan gelen istekleri Transport katmanının anlayacağı şekle çevirir. Nesne işlemlerinin yürütüldüğü yerdir.

  • Transport

Bağlantı ile ilgili işlemlerin yapıldığı katmandır. TCP’nin kullanılması işlemlerini yapmaktadır.

 RMI Örneği

 

import java.rmi.*; 
public interface Merhaba_arayuz extends Remote {
  public String mesaj() throws RemoteException;
}

 

import java.rmi.*;
import java.rmi.server.*;

public class Merhaba extends UnicastRemoteObject 
 implements Merhaba_arayuz {
  private String mesaj;
  public Merhaba (String msg) throws RemoteException {
  mesaj = msg;
  }
  public String mesaj() throws RemoteException {
  return mesaj;
  }
}

 

import java.rmi.Naming;

public class Merhaba_Server 
{
  public static void main (String[] argv) 
  {
  try {
  Naming.rebind 
   ("Merhaba", new Mesaj ("Merhabalar"));
  } 
  catch (Exception e) {
  System.out.println ("Bağlanılamadı: " + e);
  }
  }
}

 

import java.rmi.Naming;

public class Hello_istemci
{
  public static void main (String[] argv) {
  try {
Merhaba_arayuz mesaj =(Merhaba_arayuz)
 Naming.lookup ("//xxx.xx..xxx.xx/Merhaba");
  System.out.println (mesaj.mesaj());
  } 
  catch (Exception e){
  System.out.println ("Hata Oluştu " + e);}
  }
}

4 Comments

  1. Madem böyle bir bilgi paylaşmak istiyorsun o zaman düzgün bir dil kullanmak gerekiyor ve açık şekilde ifade etmek lazım. cümleler kesik, düşük… copy paste bir paylaşım gibi. kod açıklanmamış. insanlar birşey öğrenirken doğru ve açık bilgiye ulaşması önemli. buna özen göstermek gerek.

    1. Olması gerekeni sen yaz yayınla o zaman. Burası benim sitem istediğim gibi yazarım. Bu kod parçacığından bir şey anlamıyorsan zaten senin bu işlerle işin olmasın.

  2. Uzak metod çağrımını , çok amatör olarak , istemci web server ve Rmi server üzerinde merhaba örneğiyle açıklamış site sahibi , bilgi paylaşımı ve emeğe nankörlük yapmamak gerekir . Yukarıda site sahibine haksızlık yapılmış . Eleştiri yapılabilir hatta magazinsel bulabilirsin ama nezaket önemlidir..

  3. Zahmet etmişsiniz, yazmışsınız. Teşekkür ederim. Emeğe saygımız var. Ama bir az daha açıklamalı olsaydı iyi olurdu. Bir de karakter hataları o kadar çok ki, okumakda zorluk çektim ve açıklama da neredeyse yok. Aynı zamanda yorum bildiren arkadaşa burası benim sitem istediğimi yaparım demeniz de çok kabaca. Tabii ki, istediğinizi yaparsınız ama bir süre sonra kullanıcı bulmazsınız sitede.

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Burak KUTBAY 2010 - 2019
%d blogcu bunu beğendi: