Arşivler

Java Remote Method Invocation Nedir?

blank

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);}
  }
}