RMI dağıtık sistemlerdeki RPC (Remote Procedure Call) mantığına benzeyen ancak sadece Javaya özgü olan bir sistemdir.Bir makine üzerinde çalışan bir java nesnesinin başka bir makinede çalışan java nesnesine ait bir metodu çağırabilmesini sağlar.Bu da dağıtık uygulama geliştirmemizi sağlar.
Peki RMI kullanmanın geliştirici ve son kullanıcıya ne gibi getirileri vardır.Geliştirici açısından bakarsak uygulama geliştirme sırasında ağ işlemlerinin alt düzey ayrıntıları ile uğraşmasına gerek kalmamaktadır.Son kullanıcı açısından bakarsak da, kullanıcıya üst düzey bir arayüz sunmaktadır.
İsterseniz konunun daha iyi anlaşılması açısından basit bir uygulama yapalım :
server.java
package rmi;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.rmi.AccessException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
public class server extends UnicastRemoteObject implements arayüz {
Registry kayit;
String adres;
int port;
public server() throws RemoteException
{
super();
try{
adres=(InetAddress.getLocalHost().toString());
}
catch(UnknownHostException ex)
{
System.out.println(ex);
}
port=1316;
try
{
kayit=LocateRegistry.createRegistry(port);
}
catch(RemoteException ex)
{
System.out.println(ex);
}
try {
kayit.rebind("Local Interface", this);
} catch (AccessException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
public void mesajAl(String mesaj) throws RemoteException
{
System.out.println(mesaj);
}
public static void main(String[] args) {
try {
server obj=new server();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
client.java
package rmi;
import java.rmi.AccessException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import javax.swing.JOptionPane;
public class client {
Registry kayit=null;
arayüz objArayüz=null;
public client()
{
String mesajgir=JOptionPane.showInputDialog("Bir mesaj girin");
try
{
kayit=LocateRegistry.getRegistry("127.0.0.1",1316);
}
catch(RemoteException ex)
{
System.out.println(ex);
}
try{
objArayüz=(arayüz)(kayit.lookup("Local Interface"));
}
catch(AccessException ex)
{
System.out.println(ex);
}
catch(RemoteException ex)
{
System.out.println(ex);
}
catch(NotBoundException ex)
{
System.out.println(ex);
}
try
{
objArayüz.mesajAl(mesajgir);
}
catch(RemoteException ex)
{
System.out.println(ex);
}
}
public static void main(String[] args) {
client objClient=new client();
}
}
arayüz.java
package rmi;
import java.rmi.RemoteException;
import java.rmi.Remote;
public interface arayüz extends Remote {
public void mesajAl(String mesaj) throws RemoteException;
}
Uygulamada client nesnesi server sınıfınının mesajAl() metodunu "arayüz" arayüzü aracılığıyla çağırmaktadır.
Gördüğünüz gibi kullanımı oldukça kolay.Kullanımının kolaylığı,taşınabilir olması,güvenilir olması RMI ın dağıtık uygulamalarda tercih edilme sebepleri arasında geliyor.
24 Kasım 2010 Çarşamba
Kaydol:
Kayıt Yorumları (Atom)
0 yorum:
Yorum Gönder