Programowanie aplikacji rozproszonych w języku Java

Transkrypt

Programowanie aplikacji rozproszonych w języku Java
Wstęp Gniazda RMI Podsumowanie
Programowanie rozproszone w języku Java
Wojciech Rząsa
[email protected]
Katedra Informatyki i Automatyki, Politechnika Rzeszowska
29 kwietnia 2016
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
1/46
Wstęp Gniazda RMI Podsumowanie
Plan
1 Wstęp
2 Komunikacja sieciowa
3 Zdalne wywołanie metod (RMI)
4 Podsumowanie
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
2/46
Wstęp Gniazda RMI Podsumowanie
Plan
1 Wstęp
2 Komunikacja sieciowa
3 Zdalne wywołanie metod (RMI)
4 Podsumowanie
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
3/46
Wstęp Gniazda RMI Podsumowanie
Programowanie rozproszone
Osobne procesory
Rozdzielona przestrzeń adresowa
Komunikacja poprzez sieć
Duży narzut komunikacyjny
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
4/46
Wstęp Gniazda RMI Podsumowanie
Modele programowania rozproszonego
Message passing (przekazywanie wiadomości)
Remote procedure call (zdalne wywoływanie procedur)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
5/46
Wstęp Gniazda RMI Podsumowanie
Omówione mechanizmy
Komunikacja sieciowa – gniazda (sockets)
Zdalne wywołanie metod (RMI, odpowiednik RPC)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
6/46
Wstęp Gniazda RMI Podsumowanie
Plan
1 Wstęp
2 Komunikacja sieciowa
3 Zdalne wywołanie metod (RMI)
4 Podsumowanie
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
7/46
Wstęp Gniazda RMI Podsumowanie
Możliwości
Przesyłanie danych pomiędzy procesami
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
8/46
Wstęp Gniazda RMI Podsumowanie
Gniazdo
Punkt końcowy kanału komunikacyjnego
Każda strona ma własne gniazdo
Pozwala wykonywać podstawowe operacje wejścia/wyjścia
Operacje realizuje system operacyjny
Komunikacja przez sieć
Komunikacja lokalna
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
9/46
Wstęp Gniazda RMI Podsumowanie
Komunikacja przy użyciu gniazd
Model klient-serwer
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
10/46
Wstęp Gniazda RMI Podsumowanie
Komunikacja przy użyciu gniazd
Model klient-serwer
Rozpoczęcie komunikacji
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
10/46
Wstęp Gniazda RMI Podsumowanie
Komunikacja przy użyciu gniazd
Model klient-serwer
Rozpoczęcie komunikacji
Pasywne (nasłuchiwanie) – serwer
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
10/46
Wstęp Gniazda RMI Podsumowanie
Komunikacja przy użyciu gniazd
Model klient-serwer
Rozpoczęcie komunikacji
Pasywne (nasłuchiwanie) – serwer
Aktywne (inicjowanie połączenia) – klient
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
10/46
Wstęp Gniazda RMI Podsumowanie
Komunikacja przy użyciu gniazd
Model klient-serwer
Rozpoczęcie komunikacji
Pasywne (nasłuchiwanie) – serwer
Aktywne (inicjowanie połączenia) – klient
Typy gniazd
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
10/46
Wstęp Gniazda RMI Podsumowanie
Komunikacja przy użyciu gniazd
Model klient-serwer
Rozpoczęcie komunikacji
Pasywne (nasłuchiwanie) – serwer
Aktywne (inicjowanie połączenia) – klient
Typy gniazd
Determinują protokół warstwy transportowej
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
10/46
Wstęp Gniazda RMI Podsumowanie
Komunikacja przy użyciu gniazd
Model klient-serwer
Rozpoczęcie komunikacji
Pasywne (nasłuchiwanie) – serwer
Aktywne (inicjowanie połączenia) – klient
Typy gniazd
Determinują protokół warstwy transportowej
gniazda strumieniowe
protokół TCP
komunikacja niezawodna
dane jako strumień bajtów
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
10/46
Wstęp Gniazda RMI Podsumowanie
Komunikacja przy użyciu gniazd
Model klient-serwer
Rozpoczęcie komunikacji
Pasywne (nasłuchiwanie) – serwer
Aktywne (inicjowanie połączenia) – klient
Typy gniazd
Determinują protokół warstwy transportowej
gniazda strumieniowe
protokół TCP
komunikacja niezawodna
dane jako strumień bajtów
gniazda datagramowe
protokół UDP
komunikacja zawodna
dane jako datagram
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
10/46
Wstęp Gniazda RMI Podsumowanie
Komunikacja przy użyciu gniazd
Model klient-serwer
Rozpoczęcie komunikacji
Pasywne (nasłuchiwanie) – serwer
Aktywne (inicjowanie połączenia) – klient
Typy gniazd
Determinują protokół warstwy transportowej
gniazda strumieniowe
protokół TCP
komunikacja niezawodna
dane jako strumień bajtów
gniazda datagramowe
protokół UDP
komunikacja zawodna
dane jako datagram
gniazda surowe (ang. raw sockets), niedostępne w Javie
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
10/46
Wstęp Gniazda RMI Podsumowanie
Porty
Adres IP – identyfikuje maszynę
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
11/46
Wstęp Gniazda RMI Podsumowanie
Porty
Adres IP – identyfikuje maszynę
Numer portu – identyfikuje proces na maszynie
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
11/46
Wstęp Gniazda RMI Podsumowanie
Porty
Adres IP – identyfikuje maszynę
Numer portu – identyfikuje proces na maszynie
numery od 0 do 65536
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
11/46
Wstęp Gniazda RMI Podsumowanie
Porty
Adres IP – identyfikuje maszynę
Numer portu – identyfikuje proces na maszynie
numery od 0 do 65536
0 zarezerwowane
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
11/46
Wstęp Gniazda RMI Podsumowanie
Porty
Adres IP – identyfikuje maszynę
Numer portu – identyfikuje proces na maszynie
numery od 0 do 65536
0 zarezerwowane
od 1 do 1024 tylko administrator
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
11/46
Wstęp Gniazda RMI Podsumowanie
Porty
Adres IP – identyfikuje maszynę
Numer portu – identyfikuje proces na maszynie
numery od 0 do 65536
0 zarezerwowane
od 1 do 1024 tylko administrator
UDP i TCP mają osobną pulę portów
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
11/46
Wstęp Gniazda RMI Podsumowanie
Porty
Adres IP – identyfikuje maszynę
Numer portu – identyfikuje proces na maszynie
numery od 0 do 65536
0 zarezerwowane
od 1 do 1024 tylko administrator
UDP i TCP mają osobną pulę portów
Serwer – nasłuchuje na wybranym porcie
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
11/46
Wstęp Gniazda RMI Podsumowanie
Porty
Adres IP – identyfikuje maszynę
Numer portu – identyfikuje proces na maszynie
numery od 0 do 65536
0 zarezerwowane
od 1 do 1024 tylko administrator
UDP i TCP mają osobną pulę portów
Serwer – nasłuchuje na wybranym porcie
Klient – używając jednego z lokalnych portów łączy się
z wybranym IP i portem
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
11/46
Wstęp Gniazda RMI Podsumowanie
Gniazda klienckie (TCP)
[http://java.sun.com/docs/books/tutorial/networking/sockets/definition.html]
Klient tworzy gniazdo
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
12/46
Wstęp Gniazda RMI Podsumowanie
Gniazda klienckie (TCP)
[http://java.sun.com/docs/books/tutorial/networking/sockets/definition.html]
Klient tworzy gniazdo
Podaje adres IP i numer portu z którym się łączy
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
12/46
Wstęp Gniazda RMI Podsumowanie
Gniazda klienckie (TCP)
[http://java.sun.com/docs/books/tutorial/networking/sockets/definition.html]
Klient tworzy gniazdo
Podaje adres IP i numer portu z którym się łączy
Może podać lokalny numer portu
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
12/46
Wstęp Gniazda RMI Podsumowanie
Gniazda klienckie (TCP)
[http://java.sun.com/docs/books/tutorial/networking/sockets/definition.html]
Klient tworzy gniazdo
Podaje adres IP i numer portu z którym się łączy
Może podać lokalny numer portu
Jeśli połączenie jest przyjęte, może pisać i czytać z gniazda
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
12/46
Wstęp Gniazda RMI Podsumowanie
Gniazda serwera (TCP)
[http://java.sun.com/docs/books/tutorial/networking/sockets/definition.html]
Serwer tworzy gniazdo
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
13/46
Wstęp Gniazda RMI Podsumowanie
Gniazda serwera (TCP)
[http://java.sun.com/docs/books/tutorial/networking/sockets/definition.html]
Serwer tworzy gniazdo
Podaje numer portu z którym ma się połączyć klient
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
13/46
Wstęp Gniazda RMI Podsumowanie
Gniazda serwera (TCP)
[http://java.sun.com/docs/books/tutorial/networking/sockets/definition.html]
Serwer tworzy gniazdo
Podaje numer portu z którym ma się połączyć klient
Czeka na połączenie klienta
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
13/46
Wstęp Gniazda RMI Podsumowanie
Gniazda serwera (TCP)
[http://java.sun.com/docs/books/tutorial/networking/sockets/definition.html]
Serwer tworzy gniazdo
Podaje numer portu z którym ma się połączyć klient
Czeka na połączenie klienta
Po nadejściu i nawiązaniu nowego połączenia tworzy
nowe gniazdo
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
13/46
Wstęp Gniazda RMI Podsumowanie
Gniazda serwera (TCP)
[http://java.sun.com/docs/books/tutorial/networking/sockets/definition.html]
Serwer tworzy gniazdo
Podaje numer portu z którym ma się połączyć klient
Czeka na połączenie klienta
Po nadejściu i nawiązaniu nowego połączenia tworzy
nowe gniazdo
nowe gniazdo jest wykorzystywane do komunikacji z klientem
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
13/46
Wstęp Gniazda RMI Podsumowanie
Gniazda serwera (TCP)
[http://java.sun.com/docs/books/tutorial/networking/sockets/definition.html]
Serwer tworzy gniazdo
Podaje numer portu z którym ma się połączyć klient
Czeka na połączenie klienta
Po nadejściu i nawiązaniu nowego połączenia tworzy
nowe gniazdo
nowe gniazdo jest wykorzystywane do komunikacji z klientem
„stare” gniazdo może być równocześnie używane do dalszego
nasłuchiwania
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
13/46
Wstęp Gniazda RMI Podsumowanie
Gniazda w Javie
Komunikacja strumieniowa (TCP)
1
http://download.java.net/jdk7/archive/b123/docs/api/java/net/
DatagramSocket.html
2
http://docs.oracle.com/javase/tutorial/networking/datagrams/
clientServer.html
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
14/46
Wstęp Gniazda RMI Podsumowanie
Gniazda w Javie
Komunikacja strumieniowa (TCP)
Socket gniazdo komunikacyjne klienta i serwera
1
http://download.java.net/jdk7/archive/b123/docs/api/java/net/
DatagramSocket.html
2
http://docs.oracle.com/javase/tutorial/networking/datagrams/
clientServer.html
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
14/46
Wstęp Gniazda RMI Podsumowanie
Gniazda w Javie
Komunikacja strumieniowa (TCP)
Socket gniazdo komunikacyjne klienta i serwera
ServerSocket gniazdo do nasłuchiwania (dla serwera)
1
http://download.java.net/jdk7/archive/b123/docs/api/java/net/
DatagramSocket.html
2
http://docs.oracle.com/javase/tutorial/networking/datagrams/
clientServer.html
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
14/46
Wstęp Gniazda RMI Podsumowanie
Gniazda w Javie
Komunikacja strumieniowa (TCP)
Socket gniazdo komunikacyjne klienta i serwera
ServerSocket gniazdo do nasłuchiwania (dla serwera)
Komunikacja datagramowa (UDP)
1
http://download.java.net/jdk7/archive/b123/docs/api/java/net/
DatagramSocket.html
2
http://docs.oracle.com/javase/tutorial/networking/datagrams/
clientServer.html
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
14/46
Wstęp Gniazda RMI Podsumowanie
Gniazda w Javie
Komunikacja strumieniowa (TCP)
Socket gniazdo komunikacyjne klienta i serwera
ServerSocket gniazdo do nasłuchiwania (dla serwera)
Komunikacja datagramowa (UDP)
DatagramSocket gniazdo komunikacyjne UDP
1
http://download.java.net/jdk7/archive/b123/docs/api/java/net/
DatagramSocket.html
2
http://docs.oracle.com/javase/tutorial/networking/datagrams/
clientServer.html
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
14/46
Wstęp Gniazda RMI Podsumowanie
Gniazda w Javie
Komunikacja strumieniowa (TCP)
Socket gniazdo komunikacyjne klienta i serwera
ServerSocket gniazdo do nasłuchiwania (dla serwera)
Komunikacja datagramowa (UDP)
DatagramSocket gniazdo komunikacyjne UDP
Metody send i receive
1
http://download.java.net/jdk7/archive/b123/docs/api/java/net/
DatagramSocket.html
2
http://docs.oracle.com/javase/tutorial/networking/datagrams/
clientServer.html
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
14/46
Wstęp Gniazda RMI Podsumowanie
Gniazda w Javie
Komunikacja strumieniowa (TCP)
Socket gniazdo komunikacyjne klienta i serwera
ServerSocket gniazdo do nasłuchiwania (dla serwera)
Komunikacja datagramowa (UDP)
DatagramSocket gniazdo komunikacyjne UDP
Metody send i receive
DatagramPacket
1
http://download.java.net/jdk7/archive/b123/docs/api/java/net/
DatagramSocket.html
2
http://docs.oracle.com/javase/tutorial/networking/datagrams/
clientServer.html
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
14/46
Wstęp Gniazda RMI Podsumowanie
Gniazda w Javie
Komunikacja strumieniowa (TCP)
Socket gniazdo komunikacyjne klienta i serwera
ServerSocket gniazdo do nasłuchiwania (dla serwera)
Komunikacja datagramowa (UDP)
DatagramSocket gniazdo komunikacyjne UDP
Metody send i receive
DatagramPacket
Dokumentacja1
1
http://download.java.net/jdk7/archive/b123/docs/api/java/net/
DatagramSocket.html
2
http://docs.oracle.com/javase/tutorial/networking/datagrams/
clientServer.html
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
14/46
Wstęp Gniazda RMI Podsumowanie
Gniazda w Javie
Komunikacja strumieniowa (TCP)
Socket gniazdo komunikacyjne klienta i serwera
ServerSocket gniazdo do nasłuchiwania (dla serwera)
Komunikacja datagramowa (UDP)
DatagramSocket gniazdo komunikacyjne UDP
Metody send i receive
DatagramPacket
Dokumentacja1
Tutorial2
1
http://download.java.net/jdk7/archive/b123/docs/api/java/net/
DatagramSocket.html
2
http://docs.oracle.com/javase/tutorial/networking/datagrams/
clientServer.html
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
14/46
Wstęp Gniazda RMI Podsumowanie
Gniazda w Javie
Komunikacja strumieniowa (TCP)
Socket gniazdo komunikacyjne klienta i serwera
ServerSocket gniazdo do nasłuchiwania (dla serwera)
Komunikacja datagramowa (UDP)
DatagramSocket gniazdo komunikacyjne UDP
Metody send i receive
DatagramPacket
Dokumentacja1
Tutorial2
MulticastSocket gniazdo komunikacyjne multicast
1
http://download.java.net/jdk7/archive/b123/docs/api/java/net/
DatagramSocket.html
2
http://docs.oracle.com/javase/tutorial/networking/datagrams/
clientServer.html
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
14/46
Wstęp Gniazda RMI Podsumowanie
Użycie gniazda klienta
1
2
3
4
5
6
7
8
socket = new Socket ( adres , port );
PrintWriter out =
new PrintWriter ( socket . g et Ou t pu tS tr e am () , true );
Buff eredRead er in = new B ufferedR eader ( new
I n p u t S t r e a m R e a d e r ( socket . get InputStr eam ()));
System . out . println ( in . readLine ());
out . println ( " Cze ś ć ! Uda ł o si ę ! " );
System . out . println ( in . readLine ());
Użycie gniazda klienta
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
15/46
Wstęp Gniazda RMI Podsumowanie
Implementacja klienta
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java . net .*; import java . io .*;
public class Client {
public static void main ( String args []) {
String adres = args [0];
int port = Integer . parseInt ( args [1]);
Socket socket = null ;
try {
socket = new Socket ( adres , port );
PrintWriter out =
new PrintWriter ( socket . g et Ou t pu tS tr e am () , true );
Buff eredRead er in = new Bu fferedR eader ( new
I n p u t S t r e a m R e a d e r ( socket . get InputStr eam ()));
System . out . println ( in . readLine ());
out . println ( " Cze ś ć ! Uda ł o si ę ! " );
System . out . println ( in . readLine ());
} catch ( U n k n o w n H o s t E x c e p t i o n e ) { e . p r in tS ta c kT ra ce (); }
catch ( IOException e ) { e . p r in tS ta c kT ra ce (); }
finally { try { socket . close (); }
catch ( IOException e ) { e . p ri n tS ta c kT ra ce (); }
}
}
}
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
16/46
Wstęp Gniazda RMI Podsumowanie
Użycie gniazda serwera
1
2
3
4
5
ssocket = new ServerSocket (1234);
while ( true ) {
Socket s = ssocket . accept ();
serveClient ( s );
}
Użycie gniazda serwera
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
17/46
Wstęp Gniazda RMI Podsumowanie
Użycie gniazda serwera
1
2
3
4
5
ssocket = new ServerSocket (1234);
while ( true ) {
Socket s = ssocket . accept ();
serveClient ( s );
}
Użycie gniazda serwera
1
2
3
private static void serveClient ( Socket s ) {
new Server ( s ). start ();
}
Obsługa klienta w nowym wątku
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
17/46
Wstęp Gniazda RMI Podsumowanie
Implementacja serwera
1
2
3
4
5
6
7
import java . net .*;
import java . io .*;
public class Server extends Thread {
private Socket csocket ;
Server ( Socket csocket ) {
super (); this . csocket = csocket ;
}
Implementacja serwera (początek)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
18/46
Wstęp Gniazda RMI Podsumowanie
Implementacja serwera
1
2
3
4
5
6
7
8
9
PrintWriter out = new PrintWriter (
csocket . g e tO ut pu t St re am () , true );
Buff eredRead er in = new B ufferedR eader ( new
I n p u t S t r e a m R e a d e r ( csocket . g etInputS tream ()));
out . println ( " ==> Cze ś ć " + ip + " ! Uda ł o Ci si ę po ł ą czy ć ! " );
String line ;
while (( line = in . readLine ()) != null ) {
out . println ( " ==> Powiedzia ł e ś : " + line );
}
Interakcja z klientem
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
18/46
Wstęp Gniazda RMI Podsumowanie
Implementacja serwera
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void run () {
InetAddress ip = csocket . getI netAddre ss ();
System . out . println ( " Po ł ą czenie z " + ip );
try {
PrintWriter out = new PrintWriter (
csocket . g e tO ut pu t St re am () , true );
Buff eredRead er in = new B ufferedR eader ( new
I n p u t S t r e a m R e a d e r ( csocket . g etInputS tream ()));
out . println ( " ==> Cze ś ć " + ip + " ! Uda ł o Ci si ę po ł ą czy ć ! " );
String line ;
while (( line = in . readLine ()) != null ) {
out . println ( " ==> Powiedzia ł e ś : " + line );
}
} catch ( IOException e ) {
e . p ri nt St a ck Tr ac e ();
} finally {
try { csocket . close (); }
catch ( IOException e ) { e . p ri n tS ta ck T ra ce (); }
}
System . out . println ( " Koniec po ł ą czenia z " + ip );
}
Wojciech Rząsa, KIiA PRz
Kompletna metoda run
Programowanie rozproszone w języku Java
18/46
Wstęp Gniazda RMI Podsumowanie
Gniazda i komunikacja
Punkty końcowe komunikacji sieciowej
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
19/46
Wstęp Gniazda RMI Podsumowanie
Gniazda i komunikacja
Punkty końcowe komunikacji sieciowej
Pozwalają przesyłać komunikaty pomiędzy procesami
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
19/46
Wstęp Gniazda RMI Podsumowanie
Gniazda i komunikacja
Punkty końcowe komunikacji sieciowej
Pozwalają przesyłać komunikaty pomiędzy procesami
Obsługują różne protokoły warstwy transportowej
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
19/46
Wstęp Gniazda RMI Podsumowanie
Gniazda i komunikacja
Punkty końcowe komunikacji sieciowej
Pozwalają przesyłać komunikaty pomiędzy procesami
Obsługują różne protokoły warstwy transportowej
Interfejs obiektowy w Javie
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
19/46
Wstęp Gniazda RMI Podsumowanie
Gniazda i komunikacja
Punkty końcowe komunikacji sieciowej
Pozwalają przesyłać komunikaty pomiędzy procesami
Obsługują różne protokoły warstwy transportowej
Interfejs obiektowy w Javie
Nie zapomnieć o zamykaniu gniazd i strumieni (wycieki
pamięci)!
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
19/46
Wstęp Gniazda RMI Podsumowanie
Gniazda i komunikacja
Punkty końcowe komunikacji sieciowej
Pozwalają przesyłać komunikaty pomiędzy procesami
Obsługują różne protokoły warstwy transportowej
Interfejs obiektowy w Javie
Nie zapomnieć o zamykaniu gniazd i strumieni (wycieki
pamięci)!
Aplikacja rozproszona wymaga zdefiniowania
protokołu komunikacyjnego
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
19/46
Wstęp Gniazda RMI Podsumowanie
Gniazda i komunikacja
Punkty końcowe komunikacji sieciowej
Pozwalają przesyłać komunikaty pomiędzy procesami
Obsługują różne protokoły warstwy transportowej
Interfejs obiektowy w Javie
Nie zapomnieć o zamykaniu gniazd i strumieni (wycieki
pamięci)!
Aplikacja rozproszona wymaga zdefiniowania
protokołu komunikacyjnego
Następstwa wymienianych komunikatów
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
19/46
Wstęp Gniazda RMI Podsumowanie
Gniazda i komunikacja
Punkty końcowe komunikacji sieciowej
Pozwalają przesyłać komunikaty pomiędzy procesami
Obsługują różne protokoły warstwy transportowej
Interfejs obiektowy w Javie
Nie zapomnieć o zamykaniu gniazd i strumieni (wycieki
pamięci)!
Aplikacja rozproszona wymaga zdefiniowania
protokołu komunikacyjnego
Następstwa wymienianych komunikatów
Znaczenia wymienianych komunikatów
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
19/46
Wstęp Gniazda RMI Podsumowanie
Gniazda i komunikacja
Punkty końcowe komunikacji sieciowej
Pozwalają przesyłać komunikaty pomiędzy procesami
Obsługują różne protokoły warstwy transportowej
Interfejs obiektowy w Javie
Nie zapomnieć o zamykaniu gniazd i strumieni (wycieki
pamięci)!
Aplikacja rozproszona wymaga zdefiniowania
protokołu komunikacyjnego
Następstwa wymienianych komunikatów
Znaczenia wymienianych komunikatów
Protokoły tekstowe i binarne
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
19/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Plan
1 Wstęp
2 Komunikacja sieciowa
3 Zdalne wywołanie metod (RMI)
Wstęp
Interfejsy
Zdalne klasy
Działanie RMI
Aplikacja RMI
4 Podsumowanie
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
20/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Zdalne wywołanie metod (RMI)
Remote Method Invocation
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
21/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Zdalne wywołanie metod (RMI)
Remote Method Invocation
Sposób tworzenia aplikacji rozproszonych
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
21/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Zdalne wywołanie metod (RMI)
Remote Method Invocation
Sposób tworzenia aplikacji rozproszonych
Wyższy poziom niż gniazda
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
21/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Zdalne wywołanie metod (RMI)
Remote Method Invocation
Sposób tworzenia aplikacji rozproszonych
Wyższy poziom niż gniazda
Bazuje na gniazdach
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
21/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Zdalne wywołanie metod (RMI)
Remote Method Invocation
Sposób tworzenia aplikacji rozproszonych
Wyższy poziom niż gniazda
Bazuje na gniazdach
Koncepcja oparta na RPC (Remote Procedure Call)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
21/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Idea RMI
Wywoływanie metod
Na obiektach zdalnych
Na innej maszynie wirtualnej
Na innej maszynie fizycznej
Implementacja w Javie
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
22/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Wywołanie metody na zdalnym obiekcie
Zlokalizowanie obiektu – rejestr RMI
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
23/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Wywołanie metody na zdalnym obiekcie
Zlokalizowanie obiektu – rejestr RMI
Komunikacja z obiektem
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
23/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Wywołanie metody na zdalnym obiekcie
Zlokalizowanie obiektu – rejestr RMI
Komunikacja z obiektem
Zdalne załadowanie definicji klasy dla obiektu
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
23/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Zlokalizowanie obiektu
Rejestr rmiregistry
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
24/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Zlokalizowanie obiektu
Rejestr rmiregistry
Obiekty rejestrują zdalne interfejsy w rejestrze
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
24/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Zlokalizowanie obiektu
Rejestr rmiregistry
Obiekty rejestrują zdalne interfejsy w rejestrze
Pobranie referencji z rejestru, wywołanie metody
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
24/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Zlokalizowanie obiektu
Rejestr rmiregistry
Obiekty rejestrują zdalne interfejsy w rejestrze
Pobranie referencji z rejestru, wywołanie metody
Użycie zdalnej referencji z poprzedniego wywołania
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
24/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Komunikacja z obiektem
Realizowana przez RMI
Niewidoczna dla użytkownika
Ukryta za zwykłym wywołaniem metody na obiekcie
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
25/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Interfejsy
Wywołujący zdalną metodę obiektu nie musi znać jego
implementacji. . .
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
26/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Interfejsy
Wywołujący zdalną metodę obiektu nie musi znać jego
implementacji. . .
. . . ale musi znać jego interfejs
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
26/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Interfejsy
Wywołujący zdalną metodę obiektu nie musi znać jego
implementacji. . .
. . . ale musi znać jego interfejs
Zdalne wywołanie wymaga znajomości zdalnego interfejsu
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
26/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Interfejsy
Wywołujący zdalną metodę obiektu nie musi znać jego
implementacji. . .
. . . ale musi znać jego interfejs
Zdalne wywołanie wymaga znajomości zdalnego interfejsu
Zdalne interfejsy – ustalone i współdzielone przez obie strony
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
26/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Zdalny interfejs w Javie
Interfejs
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
27/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Zdalny interfejs w Javie
Interfejs
Dziedziczący po java.rmi.Remote
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
27/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Zdalny interfejs w Javie
Interfejs
Dziedziczący po java.rmi.Remote
Każda metoda może wygenerować
java.rmi.RemoteException
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
27/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Implementacja zdalnych metod
Klasa Javy
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
28/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Implementacja zdalnych metod
Klasa Javy
Implementująca jeden lub więcej zdalny interfejs
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
28/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Implementacja zdalnych metod
Klasa Javy
Implementująca jeden lub więcej zdalny interfejs
Może implementować wiele innych metod
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
28/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Obiekty zdalne i lokalne w wywołaniach
Parametrem zdalnej metody może być obiekt
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
29/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Obiekty zdalne i lokalne w wywołaniach
Parametrem zdalnej metody może być obiekt
Zdalna metoda może zwracać obiekt
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
29/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Obiekty zdalne i lokalne w wywołaniach
Parametrem zdalnej metody może być obiekt
Zdalna metoda może zwracać obiekt
Do kompilacji wystarczy znać interfejs tego obiektu
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
29/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Obiekty zdalne i lokalne w wywołaniach
Parametrem zdalnej metody może być obiekt
Zdalna metoda może zwracać obiekt
Do kompilacji wystarczy znać interfejs tego obiektu
Obiekt zdalny
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
29/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Obiekty zdalne i lokalne w wywołaniach
Parametrem zdalnej metody może być obiekt
Zdalna metoda może zwracać obiekt
Do kompilacji wystarczy znać interfejs tego obiektu
Obiekt zdalny
przekazany przez zdalną referencję
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
29/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Obiekty zdalne i lokalne w wywołaniach
Parametrem zdalnej metody może być obiekt
Zdalna metoda może zwracać obiekt
Do kompilacji wystarczy znać interfejs tego obiektu
Obiekt zdalny
przekazany przez zdalną referencję
istnieje jedna kopia obiektu
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
29/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Obiekty zdalne i lokalne w wywołaniach
Parametrem zdalnej metody może być obiekt
Zdalna metoda może zwracać obiekt
Do kompilacji wystarczy znać interfejs tego obiektu
Obiekt zdalny
przekazany przez zdalną referencję
istnieje jedna kopia obiektu
Obiekt lokalny
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
29/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Obiekty zdalne i lokalne w wywołaniach
Parametrem zdalnej metody może być obiekt
Zdalna metoda może zwracać obiekt
Do kompilacji wystarczy znać interfejs tego obiektu
Obiekt zdalny
przekazany przez zdalną referencję
istnieje jedna kopia obiektu
Obiekt lokalny
serializowany, przesyłany i deserializowany
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
29/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Obiekty zdalne i lokalne w wywołaniach
Parametrem zdalnej metody może być obiekt
Zdalna metoda może zwracać obiekt
Do kompilacji wystarczy znać interfejs tego obiektu
Obiekt zdalny
przekazany przez zdalną referencję
istnieje jedna kopia obiektu
Obiekt lokalny
serializowany, przesyłany i deserializowany
tworzona zdalna kopia obiektu
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
29/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Obiekty zdalne i lokalne w wywołaniach
Parametrem zdalnej metody może być obiekt
Zdalna metoda może zwracać obiekt
Do kompilacji wystarczy znać interfejs tego obiektu
Obiekt zdalny
przekazany przez zdalną referencję
istnieje jedna kopia obiektu
Obiekt lokalny
serializowany, przesyłany i deserializowany
tworzona zdalna kopia obiektu
do użycia obiektu konieczna jest definicja jego klasy!
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
29/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Obiekty zdalne i lokalne w wywołaniach
Parametrem zdalnej metody może być obiekt
Zdalna metoda może zwracać obiekt
Do kompilacji wystarczy znać interfejs tego obiektu
Obiekt zdalny
przekazany przez zdalną referencję
istnieje jedna kopia obiektu
Obiekt lokalny
serializowany, przesyłany i deserializowany
tworzona zdalna kopia obiektu
do użycia obiektu konieczna jest definicja jego klasy!
klasa musi implementować java.io.Serializable
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
29/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Obiekty zdalne i lokalne w wywołaniach
Parametrem zdalnej metody może być obiekt
Zdalna metoda może zwracać obiekt
Do kompilacji wystarczy znać interfejs tego obiektu
Obiekt zdalny
przekazany przez zdalną referencję
istnieje jedna kopia obiektu
Obiekt lokalny
serializowany, przesyłany i deserializowany
tworzona zdalna kopia obiektu
do użycia obiektu konieczna jest definicja jego klasy!
klasa musi implementować java.io.Serializable
W czasie działania konieczne jest załadowanie definicji
nieznanej klasy!
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
29/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Obiekty zdalne i lokalne w wywołaniach
Parametrem zdalnej metody może być obiekt
Zdalna metoda może zwracać obiekt
Do kompilacji wystarczy znać interfejs tego obiektu
Obiekt zdalny
przekazany przez zdalną referencję
istnieje jedna kopia obiektu
Obiekt lokalny
serializowany, przesyłany i deserializowany
tworzona zdalna kopia obiektu
do użycia obiektu konieczna jest definicja jego klasy!
klasa musi implementować java.io.Serializable
W czasie działania konieczne jest załadowanie definicji
nieznanej klasy!
Dynamiczne ładowanie konieczne zarówno przez klienta jak
i serwer
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
29/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Dynamiczne ładowanie kodu klas
Z określonego miejsca na dysku (wymaga wielu kopii plików
class)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
30/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Dynamiczne ładowanie kodu klas
Z określonego miejsca na dysku (wymaga wielu kopii plików
class)
RMI potrafi pobrać potrzebne klasy np. przez HTTP
(tzw. codebase)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
30/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Dynamiczne ładowanie kodu klas
Z określonego miejsca na dysku (wymaga wielu kopii plików
class)
RMI potrafi pobrać potrzebne klasy np. przez HTTP
(tzw. codebase)
Poza rejestrem zdalnych metod konieczne repozytorium
z implementacją
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
30/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
rmiregistry i współdzielone interfejsy
rmiregistry porzebuje plików class dla interfejsów
współdzielonych
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
31/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
rmiregistry i współdzielone interfejsy
rmiregistry porzebuje plików class dla interfejsów
współdzielonych
Mogą być dostępne lokalnie w CLASSPATH
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
31/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
rmiregistry i współdzielone interfejsy
rmiregistry porzebuje plików class dla interfejsów
współdzielonych
Mogą być dostępne lokalnie w CLASSPATH
Mogą być ładowane dynamicznie (z codebase serwera)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
31/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Działanie RMI
1
rmiregistry
[http://docs.oracle.com/javase/tutorial/rmi/overview.html]
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
32/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Działanie RMI
1
2
rmiregistry
codebase serwera na serwerze HTTP
[http://docs.oracle.com/javase/tutorial/rmi/overview.html]
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
32/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Działanie RMI
1
2
3
rmiregistry
codebase serwera na serwerze HTTP
Serwer
[http://docs.oracle.com/javase/tutorial/rmi/overview.html]
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
32/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Działanie RMI
1
2
3
4
rmiregistry
codebase serwera na serwerze HTTP
Serwer
codebase klienta na serwerze HTTP
[http://docs.oracle.com/javase/tutorial/rmi/overview.html]
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
32/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Działanie RMI
1
2
3
4
5
rmiregistry
codebase serwera na serwerze HTTP
Serwer
codebase klienta na serwerze HTTP
Klient
[http://docs.oracle.com/javase/tutorial/rmi/overview.html]
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
32/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Komunikacja ze zdalnym obiektem
Serwer rejestruje tzw. stub w rmiregistry
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
33/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Komunikacja ze zdalnym obiektem
Serwer rejestruje tzw. stub w rmiregistry
stub implementuje zdalny interfejs
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
33/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Komunikacja ze zdalnym obiektem
Serwer rejestruje tzw. stub w rmiregistry
stub implementuje zdalny interfejs
rmiregistry zwraca stub do klienta
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
33/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Komunikacja ze zdalnym obiektem
Serwer rejestruje tzw. stub w rmiregistry
stub implementuje zdalny interfejs
rmiregistry zwraca stub do klienta
Wywołania metod stuba są przekazywane do zdalnego
obiektu
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
33/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Komunikacja ze zdalnym obiektem
Serwer rejestruje tzw. stub w rmiregistry
stub implementuje zdalny interfejs
rmiregistry zwraca stub do klienta
Wywołania metod stuba są przekazywane do zdalnego
obiektu
Wyniki metod zdalnego obiektu są przekazywane do stuba
i zwracane do klienta
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
33/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Komunikacja ze zdalnym obiektem
Serwer rejestruje tzw. stub w rmiregistry
stub implementuje zdalny interfejs
rmiregistry zwraca stub do klienta
Wywołania metod stuba są przekazywane do zdalnego
obiektu
Wyniki metod zdalnego obiektu są przekazywane do stuba
i zwracane do klienta
Komunikacja ukryta przez klientem
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
33/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Bezpieczeństwo
Zdalnie załadowany kod może być niebezpieczny
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
34/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Bezpieczeństwo
Zdalnie załadowany kod może być niebezpieczny
Bezpieczeństwo zapewnia SecurityManager
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
34/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Bezpieczeństwo
Zdalnie załadowany kod może być niebezpieczny
Bezpieczeństwo zapewnia SecurityManager
Wymagany do załadowania zdalnego kodu
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
34/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Bezpieczeństwo
Zdalnie załadowany kod może być niebezpieczny
Bezpieczeństwo zapewnia SecurityManager
Wymagany do załadowania zdalnego kodu
Konfigurowany z pliku
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
34/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Bezpieczeństwo
Zdalnie załadowany kod może być niebezpieczny
Bezpieczeństwo zapewnia SecurityManager
Wymagany do załadowania zdalnego kodu
Konfigurowany z pliku
Ogranicza działania aplikacji
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
34/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Bezpieczeństwo
Zdalnie załadowany kod może być niebezpieczny
Bezpieczeństwo zapewnia SecurityManager
Wymagany do załadowania zdalnego kodu
Konfigurowany z pliku
Ogranicza działania aplikacji
Uruchamiając klienta i serwer trzeba podać ścieżkę do
policy file
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
34/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Tworzenie aplikacji RMI
Uzgodnienie zdalnych interfejsów
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
35/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Tworzenie aplikacji RMI
Uzgodnienie zdalnych interfejsów
Implementacja zdalnych interfejsów (serwer)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
35/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Tworzenie aplikacji RMI
Uzgodnienie zdalnych interfejsów
Implementacja zdalnych interfejsów (serwer)
Implementacja zdalnych wywołań (klient)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
35/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Uruchamianie aplikacji RMI
Kompilacja
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
36/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Uruchamianie aplikacji RMI
Kompilacja
Udostępnienie w sieci definicji klas klienta
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
36/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Uruchamianie aplikacji RMI
Kompilacja
Udostępnienie w sieci definicji klas klienta
Udostępnienie w sieci definicji klas serwera
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
36/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Uruchamianie aplikacji RMI
Kompilacja
Udostępnienie w sieci definicji klas klienta
Udostępnienie w sieci definicji klas serwera
Start rmiregistry
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
36/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Uruchamianie aplikacji RMI
Kompilacja
Udostępnienie w sieci definicji klas klienta
Udostępnienie w sieci definicji klas serwera
Start rmiregistry
Start serwera (rejestruje zdalne obiekty w rmiregistry)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
36/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Uruchamianie aplikacji RMI
Kompilacja
Udostępnienie w sieci definicji klas klienta
Udostępnienie w sieci definicji klas serwera
Start rmiregistry
Start serwera (rejestruje zdalne obiekty w rmiregistry)
Start klienta (klientów)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
36/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Przykładowa aplikacja
Zgłaszanie obecności osoby
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
37/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Przykładowa aplikacja
Zgłaszanie obecności osoby
Klient tworzy nowy obiekt Osoba wraz z danymi
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
37/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Przykładowa aplikacja
Zgłaszanie obecności osoby
Klient tworzy nowy obiekt Osoba wraz z danymi
Klient wywołuje zdalną metodę reportPresenceOf podając
obiekt klasy Osoba
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
37/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Przykładowa aplikacja
Zgłaszanie obecności osoby
Klient tworzy nowy obiekt Osoba wraz z danymi
Klient wywołuje zdalną metodę reportPresenceOf podając
obiekt klasy Osoba
Serwer zapamiętuje osobę na podstawie danych otrzymanych
od klienta
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
37/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Współdzielone części kodu
Przy programowaniu
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
38/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Współdzielone części kodu
Przy programowaniu
Zdalny interfejs zgłaszania obeności (RemotePresenceList)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
38/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Współdzielone części kodu
Przy programowaniu
Zdalny interfejs zgłaszania obeności (RemotePresenceList)
Interfejs klasy Osoba (OsobaInterface)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
38/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Współdzielone części kodu
Przy programowaniu
Zdalny interfejs zgłaszania obeności (RemotePresenceList)
Interfejs klasy Osoba (OsobaInterface)
Tylko interfejsy!
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
38/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Współdzielone części kodu
Przy programowaniu
Zdalny interfejs zgłaszania obeności (RemotePresenceList)
Interfejs klasy Osoba (OsobaInterface)
Tylko interfejsy!
Przy uruchomieniu
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
38/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Współdzielone części kodu
Przy programowaniu
Zdalny interfejs zgłaszania obeności (RemotePresenceList)
Interfejs klasy Osoba (OsobaInterface)
Tylko interfejsy!
Przy uruchomieniu
Definicja klasy Osoba (skompilowana)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
38/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Współdzielone interfejsy
1
2
3
4
5
6
7
8
package shared ;
public interface R e m o t e P r e s e n c e L i s t
extends java . rmi . Remote {
public boolean r e p o r t P r es e n c e O f ( OsobaIn terface o )
throws java . rmi . R em o te Ex ce p ti on ;
}
Wojciech Rząsa, KIiA PRz
Interfejs zdalnej rejestracji
Programowanie rozproszone w języku Java
39/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Współdzielone interfejsy
1
2
3
4
5
6
7
8
package shared ;
public interface R e m o t e P r e s e n c e L i s t
extends java . rmi . Remote {
public boolean r e p o r t P r es e n c e O f ( OsobaIn terface o )
throws java . rmi . R em o te Ex ce p ti on ;
}
Interfejs zdalnej rejestracji
1
2
3
4
5
6
package shared ;
public interface O sobaInte rface {
public String getFirstName ();
public String getLastName ();
public int getI ndexNum ber ();
}
Wojciech Rząsa, KIiA PRz
Interfejs osoby
Programowanie rozproszone w języku Java
39/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Implementacja zdalnego interfejsu (serwer)
1
2
3
4
5
6
7
8
9
10
package server ;
import
import
import
import
java . rmi . R em o te Ex ce p ti on ;
java . rmi . registry . Locate Registry ;
java . rmi . registry . Registry ;
java . rmi . server . U n i c a s t R e m o t e O b j e c t ;
import shared .*;
public class PresenceList implements R e m o t e P r e s e n c e L i s t {
Początek implementacji zdalnego interfejsu
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
40/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Implementacja zdalnego interfejsu (serwer)
12
13
14
15
16
17
18
19
public boolean r e p o r t P r es e n c e O f ( OsobaIn terface o ) {
System . out . print ( " Zapisano obecno ś ć osoby : " );
System . out . print ( o . getFirstName () + " " );
System . out . print ( o . getLastName () + " " );
System . out . println ( " indeks : " + o . get IndexNu mber ());
return true ;
}
Implementacja metody wywoływanej zdalnie
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
40/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Implementacja zdalnego interfejsu (serwer)
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public static void main ( String args []) {
if ( System . g e t S e c u r i t y M a n a g e r () == null ) {
System . s e t S e c u r i t y M a n a g e r ( new S ec u ri ty Ma n ag er ());
}
try {
PresenceList list = new PresenceList ();
R e m o t e P r e s e n c e L i s t remote_list = ( R e m o t e P r e s e n c e L i s t )
U n i c a s t R e m o t e O b j e c t . exportObject ( list , 0);
Registry registry = Locat eRegistr y . getRegistry ();
registry . rebind ( " R e m o t e P r e s e n c e L i s t " , remote_list );
System . out . println ( " Remote presence list bound " );
} catch ( Re mo te E xc ep ti o n e ) {
e . p ri nt St a ck Tr ac e ();
}
}
Utworzenie obiektu i rejestracja zdalnej metody
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
40/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Wywołanie zdalnej metody (klient)
1
2
3
4
5
6
7
8
9
10
11
package client ;
import
import
import
import
java . rmi . R em o te Ex ce p ti on ;
java . rmi . N o t B o u n d E x c e p t i o n ;
java . rmi . registry . Locate Registry ;
java . rmi . registry . Registry ;
import shared .*;
import client . shared . Student ;
public class ReportStudent {
Początek implementacji części klienckiej
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
41/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Wywołanie zdalnej metody (klient)
13
14
15
16
17
18
public static void main ( String args []){
if ( System . g e t S e c u r i t y M a n a g e r () == null ) {
System . s e t S e c u r i t y M a n a g e r ( new S ec u ri ty Ma n ag er ());
}
Student ja = new Student ( " Jan " , " Kowalski " , 1234);
Operacje wstępne
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
41/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Wywołanie zdalnej metody (klient)
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
try {
Registry registry = Locat eRegistr y . getRegistry ( args [0]);
R e m o t e P r e s e n c e L i s t list = ( R e m o t e P r e s e n c e L i s t )
registry . lookup ( " R e m o t e P r e s e n c e L i s t " );
boolean result = list . r e p or t P r e s e n c e O f ( ja );
if ( result ) {
System . out . println ( " Obecno ś ć zarejest rowano poprawnie " );
} else {
System . out . println ( " System odm ó wi ł przyj ę cia zg ł oszenia " );
}
}
catch ( Re m ot eE x ce pt io n e ) { e . pr in t St ac kT r ac e (); }
catch ( N o t B o u n d E x c e p t i o n e ) { e . p ri nt S ta ck Tr a ce (); }
}
Wywołanie zdalnej metody
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
41/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Wywołanie zdalnej metody (klient)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package client . shared ;
import java . io . Serializable ;
import shared .*;
public class Student implements OsobaInterface , Serializable {
private String fname , lname ;
private int index ;
public Student ( String fname , String lname , int index ) {
this . fname = fname ; this . lname = lname ;
this . index = index ;
}
public String getFirstName () { return fname ; }
public String getLastName () { return lname ; }
public int getI ndexNum ber () { return index ; }
}
Wojciech Rząsa, KIiA PRz
Klasa przekazywana do zdalnej metody
Programowanie rozproszone w języku Java
41/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Przygotowanie do uruchomienia
Kompilacja kodu współdzielonego, serwera i klienta
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
42/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Przygotowanie do uruchomienia
Kompilacja kodu współdzielonego, serwera i klienta
Utworzenie archiwów jar skompilowanego kodu:
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
42/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Przygotowanie do uruchomienia
Kompilacja kodu współdzielonego, serwera i klienta
Utworzenie archiwów jar skompilowanego kodu:
shared.jar współdzielone interfejsy (serwer)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
42/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Przygotowanie do uruchomienia
Kompilacja kodu współdzielonego, serwera i klienta
Utworzenie archiwów jar skompilowanego kodu:
shared.jar współdzielone interfejsy (serwer)
client shared.jar klasy klient potrzebne serwerowi (klient)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
42/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Przygotowanie do uruchomienia
Kompilacja kodu współdzielonego, serwera i klienta
Utworzenie archiwów jar skompilowanego kodu:
shared.jar współdzielone interfejsy (serwer)
client shared.jar klasy klient potrzebne serwerowi (klient)
server shared.jar klasy klient potrzebne klientowi (serwer)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
42/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Przygotowanie do uruchomienia
Kompilacja kodu współdzielonego, serwera i klienta
Utworzenie archiwów jar skompilowanego kodu:
shared.jar współdzielone interfejsy (serwer)
client shared.jar klasy klient potrzebne serwerowi (klient)
server shared.jar klasy klient potrzebne klientowi (serwer)
Umieszczenie plików jar na serwerach www
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
42/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Przygotowanie do uruchomienia
Kompilacja kodu współdzielonego, serwera i klienta
Utworzenie archiwów jar skompilowanego kodu:
shared.jar współdzielone interfejsy (serwer)
client shared.jar klasy klient potrzebne serwerowi (klient)
server shared.jar klasy klient potrzebne klientowi (serwer)
Umieszczenie plików jar na serwerach www
Konfiguracja SecurityManagera – client.policy i
server.policy
1
2
3
grant codeBase " file : $ { user . home }/ sciezka / - " {
permission java . security . AllPermission ;
};
Przykładowa definicja polityki bezpieczeństwa
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
42/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Uruchomienie aplikacji
1
Uruchomenie rmiregistry (javase >=7)
rmiregistry -J - Djava . rmi . server . u s eC od eb a se On ly = false
Uruchomienie rmiregistry
http://docs.oracle.com/javase/7/docs/technotes/
guides/rmi/enhancements-7.html This change of default
value may cause RMI-based applications to break
unexpectedly.
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
43/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Uruchomienie aplikacji
1
Uruchomenie rmiregistry (javase >=7)
rmiregistry -J - Djava . rmi . server . u s eC od eb a se On ly = false
2
Uruchomienie rmiregistry
Uruchomienie serwera (javase >=7)
java - Djava . security . policy = server . policy \
- Djava . rmi . server . codebase = http :// s1 / shared . jar \
- Djava . rmi . server . us eC od e ba se On l y = false \
server / PresenceList
Uruchomienie serwera
Może być potrzebne też java.rmi.server.hostname=IP
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
43/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
Uruchomienie aplikacji
1
Uruchomenie rmiregistry (javase >=7)
rmiregistry -J - Djava . rmi . server . u s eC od eb a se On ly = false
2
Uruchomienie rmiregistry
Uruchomienie serwera (javase >=7)
java - Djava . security . policy = server . policy \
- Djava . rmi . server . codebase = http :// s1 / shared . jar \
- Djava . rmi . server . us eC od e ba se On l y = false \
server / PresenceList
3
Uruchomienie serwera
Uruchomienie klienta (javase >=7)
java - Djava . security . policy = client . policy \
- Djava . rmi . server . codebase = http :// s2 / client_shared . jar \
client / ReportStudent a d r e s _ s e r w e r a _ z _ r m i r e g i s t r y
Wojciech Rząsa, KIiA PRz
Uruchomienie klienta
Programowanie rozproszone w języku Java
43/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
RMI – podsumowanie
Proste wywołanie metody na zdalnym obiekcie
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
44/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
RMI – podsumowanie
Proste wywołanie metody na zdalnym obiekcie
Wymaga sporo przygotowań
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
44/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
RMI – podsumowanie
Proste wywołanie metody na zdalnym obiekcie
Wymaga sporo przygotowań
Kwestia dostępności kodu
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
44/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
RMI – podsumowanie
Proste wywołanie metody na zdalnym obiekcie
Wymaga sporo przygotowań
Kwestia dostępności kodu
Bezpieczeństwo
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
44/46
Wstęp Gniazda RMI Podsumowanie
Wstęp Interfejsy Zdalne klasy Działanie Aplikacja RMI
RMI – podsumowanie
Proste wywołanie metody na zdalnym obiekcie
Wymaga sporo przygotowań
Kwestia dostępności kodu
Bezpieczeństwo
Wysokopoziomowy model programowania rozproszonego
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
44/46
Wstęp Gniazda RMI Podsumowanie
Plan
1 Wstęp
2 Komunikacja sieciowa
3 Zdalne wywołanie metod (RMI)
4 Podsumowanie
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
45/46
Wstęp Gniazda RMI Podsumowanie
Programowanie rozproszone w Javie (omówione aspekty)
Obsługa gniazd, wymiana danych
Strumieniowych (TCP)
Datagramowych (UDP), multicast
Brak gniazd „surowych” (raw)
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
46/46
Wstęp Gniazda RMI Podsumowanie
Programowanie rozproszone w Javie (omówione aspekty)
Obsługa gniazd, wymiana danych
Strumieniowych (TCP)
Datagramowych (UDP), multicast
Brak gniazd „surowych” (raw)
Remote Method Invocation (RMI)
Model wysokopoziomowy
Narzut „organizacyjny”
Gotowy protokół komunikacyjny
Rozproszone programowanie obiektowe
Wojciech Rząsa, KIiA PRz
Programowanie rozproszone w języku Java
46/46

Podobne dokumenty