You are on page 1of 10

JAVA RMI

RMI = Дистрибуирани објекти во JAVA


import java.rmi.*;

Платформа за изградба на системи


со дистрибуирани објекти
1
Основен пакет за работа

java.rmi.*
RMI Концепт
❑ Оддалечени класи и интерфејси (СЕРВЕР)
- Класата на серверот е составена од два дела:
❑Интерфејс (т.н. Оддалечен интерфејс)
❑ Мора да е public
❑ Mора да го имплементира интерфејсот java.rmi.Remote
❑ Секој деклариран метод во интерфејсот мора да го фрла исклучокот
java.rmi.RemoteException . Овие методи може да се повикуваат од
клиентите
❑ Самата класа на серверот
❑ Мора да имплементира оддалечен интерфејс
❑ Mора да ја наследува класата java.rmi.server.UnicastRemoteObject
❑ Може да има методи кои не се дел од интерфејсот. Овие методи се
локални и не се достапни на клиентите
RMI Концепт
❑ Оддалечени класи и интерфејси (КЛИЕНТ)
-Класата на клиентот треба да има :
-инстанцирано објект од оддалечениот интерфејс кој се користи
за повикување и изврпување на неговите методи
-Објект од класата Registry кој се користи за повикување и
поврзување со оддалечениот RMI сервер
-Да лови RemoteException (може да лови и други исклучоци)

-Во директориумот каде што се наоѓа класата на клиентот, МОРА да


се наоѓаат и
- датотеката на STUB објектот
- .class датотеката од оддалечениот интерфејс :
RMI Пример
1. ОДДАЛЕЧЕН ИНТЕРФЕЈС

import java.rmi.*;
public interface PORAKA extends Remote{
void PorakaKonServer(String x) throws RemoteException;
}

Овој интерфејс има еден метод ➔ треба да се дефинира во


класата која ќе го имплементира

5
RMI Пример
1. ОДДАЛЕЧЕН СЕРВЕР (1)
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
import java.net.*;
public class RmiServer extends java.rmi.server.UnicastRemoteObject implements PORAKA {
static int porta;
static String adresa, primenaporaka;
static Registry R; // rmi registar za povrzuvanje I rabota so metodite od interfejsot
//mora da postoi makar prazen konstruktor koj ke go frla isklucokot remoteException
public RmiServer() throws RemoteException { }
//predefiniranje na metodot od interfejsot
public void PorakaKonServer(String x) throws RemoteException {
primenaporaka=x;
System.out.println(primenaporaka);
} 6
…..
RMI Пример
1. ОДДАЛЕЧЕН СЕРВЕР (2)

public static void main(String args[]) {
try{
adresa= (InetAddress.getLocalHost()).toString();
}catch(Exception e){
System.out.println("Ne moze da dobijam adresa.");
System.exit(1);
}
porta=3232;
System.out.println("Adresa na serverot="+adresa+",porta="+porta);

try{
//sozdavanjeto na registerot za rabota so oddalecenite metodi
R= LocateRegistry.createRegistry( porta);
R.rebind("rmiServer", new RmiServer());
} catch(RemoteException e){
e.printStackTrace();
System.exit(1);
}
} 7
}
1. КЛИЕНТ
import java.rmi.*;
RMI Пример
import java.rmi.registry.*;
import java.net.*;
public class RmiKlient {
static public void main(String args[]) {
PORAKA oddalecenServer; //objekt od oddaleceniot interfejs
Registry R;
String adresa_na_Serverot=args[0]; //prv atribut pri povik od CMD
String porta_na_serverot=args[1]; //vtor atribut pri povik na serverot
String tekst=args[2]; //tekst vnesen od klientot
System.out.println("Prakam: "+tekst+" NA "+adresa_na_Serverot+":”+porta_na_serverot);
int porta=Integer.parseInt(porta_na_serverot);
try{
// definiranje registar kon serverot so dadena adresa I porta
R=LocateRegistry.getRegistry(adresa_na_Serverot, porta);
// pronajdi go I povrzi se so serverot koj e instanca od interfejsot PORAKA
oddalecenServer= (PORAKA)(R.lookup("rmiServer"));
// povikuvanje na oddalecen metod
oddalecenServer. PorakaKonServer(tekst);
}
catch(Exception e){ e.printStackTrace();}
} 8
}
Компајлирање
1. Се компајлираат сите java фајлови

javac *.java

9
Активирање
1. Отворете CMD и повикајте го серверот

2. Отворете уште еден CMD и повикајте го клиентот


Повикот е java RmiKlient адреса_на_сервер порта текст

4. Активирајте start rmiregistry


3. Резултатот е:
кај серверот се испиша
Пораката која клиентот
ја прати
10

You might also like