SR W05 JavaRMI


Obiektowe programowanie rozproszone ­
Java RMI
Krzysztof BanaÅ› Systemy rozproszone 1
Java RMI
"'
Mechanizm zdalnego wywołania metod Javy (RMI 
Remote Method Invocation) posiada kilka
charakterystycznych cech, m.in.:

różną semantykę przesyłania obiektów, zależnie od ich rodzaju
" przesyłanie przez wartość dla obiektów lokalnych
" przesyłanie przez referencję dla obiektów zdalnych

zdolność do pobierania kodu z odległych lokalizacji dzięki:
" przenośności kodu wykonywalnego Javy
" możliwościom maszyn wirtualnych Javy
Krzysztof BanaÅ› Systemy rozproszone 2
Java RMI
"'
Tworzenie rozproszonego obiektowego programu Javy
składa się z podobnych kroków jak w przypadku innych
środowisk RPC:

definicja interfejsu

tworzenie programu serwera implementującego realizację usług
zdefiniowanych w interfejsie

tworzenie programu klienta korzystającego z usług
zdefiniowanych w interfejsie

uruchomienie programu serwera

uruchomienie programu klienta
Krzysztof BanaÅ› Systemy rozproszone 3
Java RMI
"'
Uruchomienie zdalnej usługi RMI wiąże się z
dodatkowymi krokami, poza samym uruchomieniem
programu serwera

należy uprzednio uruchomić program rejestru RMI
(rmiregistry), za pomocą którego program serwera dokonuje
rejestracji utworzonego obiektu realizujÄ…cego zdalny interfejs, a
program klienta uzyskuje zdalnÄ… referencjÄ™ do tego obiektu

jeśli zachodzi taka potrzeba należy udostępnić kod klas, który
będzie przesyłany pomiędzy maszynami wirtualnymi Javy, w
tym kod skompilowanego zdalnego interfejsu
Krzysztof BanaÅ› Systemy rozproszone 4
Java RMI
Krzysztof BanaÅ› Systemy rozproszone 5
PrzykÅ‚ad ­ interfejs RMI
package compute;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Compute extends Remote {
T executeTask(Task t) throws RemoteException;
}
Krzysztof BanaÅ› Systemy rozproszone 6
Przykład
"'
Interfejs Compute zakłada, że zdalne obiekty
implementujące go będą realizowały procedurę
executeTask, przy czym obiekt zadania zostanie przesłany
jako argument procedury
"'
Ażeby umożliwić takie działanie definicja interfejsu Task
(implementowanego przez obiekt zadania) także musi być
dostępna wraz z definicją interfejsu Compute:
package compute;
public interface Task {
T execute();
}
Krzysztof BanaÅ› Systemy rozproszone 7
Przykład  serwer RMI
package engine;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import compute.Compute;
import compute.Task;
public class ComputeEngine implements Compute {
public ComputeEngine() {
super();
}
public T executeTask(Task t) {
return t.execute();
}
/* procedura main */
Krzysztof BanaÅ› Systemy rozproszone 8
Przykład  serwer RMI
public static void main(String[] args) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager()); }
try {
String name = "Compute";
Compute engine = new ComputeEngine();
Compute stub =
(Compute) UnicastRemoteObject.exportObject(engine, 0);
Registry registry = LocateRegistry.getRegistry();
registry.rebind(name, stub);
System.out.println("ComputeEngine bound");
} catch (Exception e) {
System.err.println("ComputeEngine exception:");
e.printStackTrace();
} } }
Krzysztof BanaÅ› Systemy rozproszone 9
Przykład  definicja klasy implementującej
package client;
import compute.Task;
import java.io.Serializable;
import java.math.BigDecimal;
public class Pi implements Task, Serializable {
private static final long serialVersionUID = 227L;
private final int digits;
public Pi(int digits) {
this.digits = digits;
}
public BigDecimal execute() {
return computePi(digits);
}
/** Kod obliczenia Pi  definicja funkcji computePi */
}
Krzysztof BanaÅ› Systemy rozproszone 10
Przykład  program klienta
package client;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.math.BigDecimal;
import compute.Compute;
public class ComputePi {
public static void main(String args[]) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager()); }
try {
String name = "Compute";
Registry registry = LocateRegistry.getRegistry(args[0]);
Compute comp = (Compute) registry.lookup(name);
Pi task = new Pi(Integer.parseInt(args[1]));
BigDecimal pi = comp.executeTask(task);
System.out.println(pi);
} catch (Exception e) {
System.err.println("ComputePi exception:"); e.printStackTrace();
} } }
Krzysztof BanaÅ› Systemy rozproszone 11
Przykład  uruchomienie kodu
"'
System serwera:

uruchomienie programu rmiregistry

uruchomienie programu serwera
" informacja o miejscu przechowania klas serwera
" adres internetowy systemu, w ramach którego funkcjonują
obiekty serwera
" pliki zawierające definicje strategii zapewniania bezpieczeństwa
"'
System klienta

uruchomienie programu klienta
" informacja o miejscu przechowywania potrzebnych klas klienta
" pliki zawierające definicje strategii zapewniania bezpieczeństwa
" adres internetowy serwera (jeśli nie jest dostarczony inaczej)
Krzysztof BanaÅ› Systemy rozproszone 12


Wyszukiwarka

Podobne podstrony:
W05 Fizyka Haran
w05
w05 wypełnianie obszaru
Wyklad SR 4
10 Facit till Svenska för Utländska Studenter(1)
SR dce WAT
2013 w05 1 INT uzu dla?515 13z
W05 Czujniki inteligetne
w05 info
W05 Log prod1 system
Zoltan Laba Selected Chess Compositions III (1993 1999) Gabriel Töröki, 2003
W2 3 Åšr Podstawy metrologii elekt
Die Prinzen Kannst du mich nicht hör´n
PMK W05 cholestaza zewnatrzwatrobowa V2

więcej podobnych podstron