Programowanie rozproszone w języku Java



Podobne dokumenty
Aplikacje RMI

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Wywoływanie metod zdalnych

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada 2010

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Wywoływanie metod zdalnych

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Aplikacje RMI Lab4

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Java programowanie w sieci. java.net RMI

Systemy Rozproszone - Ćwiczenie 6

RMI-2. Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems SYSTEMY ROZPROSZONE

Platformy Programistyczne Zagadnienia sieciowe i wątki

Przykłady interfejsu TCP i UDP w Javie

sieć 4) Mechanizm RMI jest zazwyczaj wykorzystywany w rozwiązaniach typu klient-serwer.

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Komunikacja z użyciem gniazd aplikacje klient-serwer

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

Programowanie współbieżne i rozproszone

Systemy rozproszone. Dr inż. L. Miękina. Department of Robotics and Mechatronics AGH University of Science and Technology 1/1

Interfejsy w Javie. Przykład zastosowania interfejsów:

Aplikacja wielowątkowa prosty komunikator

Podstawy i języki programowania

Programowanie w języku Java

Rozproszone systemy internetowe. Wprowadzenie. Koncepcja zdalnego wywołania procedury

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

JAVA I SIECI. MATERIAŁY:

Aplikacja wielow tkowa prosty komunikator

Networking. Zaawansowane technologie Javy 2019

Tworzenie i wykorzystanie usług

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Wybrane działy Informatyki Stosowanej

Tworzenie aplikacji rozproszonej w Sun RPC

Remote Method Invocation

Michał Jankowski. Remoting w.net 2.0

Programowanie obiektowe

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

1. Model klient-serwer

Programowanie obiektowe

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Obiekty sieciowe - gniazda Komputery w sieci Internet komunikują się ze sobą poprzez:

Zadanie 2: transakcyjny protokół SKJ (2015)

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

Programowanie sieciowe

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Tworzenia aplikacji rozproszonej RMI

Wprowadzenie. Dariusz Wawrzyniak 1

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Adresy URL. Zaawansowane technologie Javy 2019

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

JAVA W SUPER EXPRESOWEJ PIGUŁCE

KOMUNIKACJA MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

Programowanie obiektowe

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

K O M U N I K A C J A MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

Java a dost p do Internetu.

Java programowanie sieciowe

Mechanizmy pracy równoległej. Jarosław Kuchta

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Programowanie aplikacji w architekturze Klient-Serwer - UDP

Współbieżność w środowisku Java

Multimedia JAVA. Historia

Bezpieczne uruchamianie apletów wg

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Programowanie obiektowe

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Programowanie obiektowe

1. Co można powiedzieć o poniższym kodzie?

Serwer współbieżny połączeniowy

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Klient-Serwer Komunikacja przy pomocy gniazd

Aplikacje w Javie- wykład 11 Wątki-podstawy

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Sieci komputerowe. Wykład 5: Warstwa transportowa: TCP i UDP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Middleware wprowadzenie października 2010

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Middleware wprowadzenie października Dariusz Wawrzyniak (IIPP) 1

Strumienie i serializacja

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

1 Atrybuty i metody klasowe

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Technologie internetowe laboratorium nr 4. Instalacja i uruchomienie usługi sieciowej w serwerze Tomcat/AXIS

Java. Programowanie Obiektowe Mateusz Cicheński

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Aplikacje internetowe i rozproszone - laboratorium

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Transkrypt:

Wstęp Gniazda RMI Podsumowanie Programowanie rozproszone w języku Java Wojciech Rząsa wrzasa@prz-rzeszow.pl Katedra Informatyki i Automatyki, Politechnika Rzeszowska 25 maja 2015 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 otrzymuje port, łą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 Dokumentacja 1 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 Dokumentacja 1 Tutorial 2 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 Dokumentacja 1 Tutorial 2 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 socket = new Socket ( adres, port ); 2 PrintWriter out = 3 new PrintWriter ( socket. getoutputstream (), true ); 4 BufferedReader in = new BufferedReader ( new 5 InputStreamReader ( socket. getinputstream ())); 6 System. out. println (in. readline ()); 7 out. println (" Cze ść! Uda ło się!"); 8 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 import java. net.*; import java.io.*; 2 public class Client { 3 public static void main ( String args []) { 4 String adres = args [0]; 5 int port = Integer. parseint ( args [1]); 6 Socket socket = null ; 7 try { 8 socket = new Socket ( adres, port ); 9 PrintWriter out = 10 new PrintWriter ( socket. getoutputstream (), true ); 11 BufferedReader in = new BufferedReader ( new 12 InputStreamReader ( socket. getinputstream ())); 13 System. out. println (in. readline ()); 14 out. println (" Cze ść! Uda ło się!"); 15 System. out. println (in. readline ()); 16 } catch ( UnknownHostException e) { e. printstacktrace (); } 17 catch ( IOException e) { e. printstacktrace (); } 18 finally { try { socket. close (); } 19 catch ( IOException e) { e. printstacktrace (); } 20 } 21 } 22 } Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 16/46

Wstęp Gniazda RMI Podsumowanie Użycie gniazda serwera 1 ssocket = new ServerSocket (1234); 2 while ( true ) { 3 Socket s = ssocket. accept (); 4 serveclient ( s); 5 } 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 ssocket = new ServerSocket (1234); 2 while ( true ) { 3 Socket s = ssocket. accept (); 4 serveclient ( s); 5 } Użycie gniazda serwera 1 private static void serveclient ( Socket s) { 2 new Server (s). start (); 3 } 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 import java. net.*; 2 import java.io.*; 3 public class Server extends Thread { 4 private Socket csocket ; 5 Server ( Socket csocket ) { 6 super (); this. csocket = csocket ; 7 } 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 PrintWriter out = new PrintWriter ( 2 csocket. getoutputstream (), true ); 3 BufferedReader in = new BufferedReader ( new 4 InputStreamReader ( csocket. getinputstream ())); 5 out. println (" ==> Cze ść "+ip+"! Uda ło Ci się połą czy ć!"); 6 String line ; 7 while (( line = in. readline ())!= null ) { 8 out. println (" ==> Powiedzia łeś: " + line ); 9 } Interakcja z klientem Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 18/46

Wstęp Gniazda RMI Podsumowanie Implementacja serwera 1 public void run () { 2 InetAddress ip = csocket. getinetaddress (); 3 System. out. println ("Połą czenie z "+ip ); 4 try { 5 PrintWriter out = new PrintWriter ( 6 csocket. getoutputstream (), true ); 7 BufferedReader in = new BufferedReader ( new 8 InputStreamReader ( csocket. getinputstream ())); 9 out. println (" ==> Cze ść "+ip+"! Uda ło Ci się połą czy ć!"); 10 String line ; 11 while (( line = in. readline ())!= null ) { 12 out. println (" ==> Powiedzia łeś: " + line ); 13 } 14 } catch ( IOException e) { 15 e. printstacktrace (); 16 } finally { 17 try { csocket. close (); } 18 catch ( IOException e) { e. printstacktrace (); } 19 } 20 System. out. println (" Koniec połą czenia z "+ip ); 21 } Kompletna metoda run Wojciech Rząsa, KIiA PRz 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

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

Zdalne wywołanie metod (RMI) Remote Method Invocation Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 21/46

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

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

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

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

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

Wywołanie metody na zdalnym obiekcie Zlokalizowanie obiektu rejestr RMI Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 23/46

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

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

Zlokalizowanie obiektu Rejestr rmiregistry Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 24/46

Zlokalizowanie obiektu Rejestr rmiregistry Obiekty rejestrują zdalne interfejsy w rejestrze Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 24/46

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

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

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

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

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

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

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

Zdalny interfejs w Javie Interfejs Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 27/46

Zdalny interfejs w Javie Interfejs Dziedziczący po java.rmi.remote Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 27/46

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

Implementacja zdalnych metod Klasa Javy Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 28/46

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Działanie RMI 1 rmiregistry 2 Serwer [http://docs.oracle.com/javase/tutorial/rmi/overview.html] Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 32/46

Działanie RMI 1 rmiregistry 2 Serwer 3 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

Działanie RMI 1 rmiregistry 2 Serwer 3 codebase serwera na serwerze HTTP 4 Klient [http://docs.oracle.com/javase/tutorial/rmi/overview.html] Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 32/46

Działanie RMI 1 rmiregistry 2 Serwer 3 codebase serwera na serwerze HTTP 4 Klient 5 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

Komunikacja ze zdalnym obiektem Serwer rejestruje tzw. stub w rmiregistry Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 33/46

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

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

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

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

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

Bezpieczeństwo Zdalnie załadowany kod może być niebezpieczny Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 34/46

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

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

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

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

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

Tworzenie aplikacji RMI Uzgodnienie zdalnych interfejsów Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 35/46

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

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

Uruchamianie aplikacji RMI Kompilacja Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 36/46

Uruchamianie aplikacji RMI Kompilacja Udostępnienie w sieci definicji klas klienta Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 36/46

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

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

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

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

Przykładowa aplikacja Zgłaszanie obecności osoby Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 37/46

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

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

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

Współdzielone części kodu Przy programowaniu Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 38/46

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

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

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

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

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

Współdzielone interfejsy 1 package shared ; 2 public interface RemotePresenceList 3 extends java. rmi. Remote { 4 5 public boolean reportpresenceof ( OsobaInterface o) 6 throws java. rmi. RemoteException ; 7 8 } Interfejs zdalnej rejestracji Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 39/46

Współdzielone interfejsy 1 package shared ; 2 public interface RemotePresenceList 3 extends java. rmi. Remote { 4 5 public boolean reportpresenceof ( OsobaInterface o) 6 throws java. rmi. RemoteException ; 7 8 } Interfejs zdalnej rejestracji 1 package shared ; 2 public interface OsobaInterface { 3 public String getfirstname (); 4 public String getlastname (); 5 public int getindexnumber (); 6 } Interfejs osoby Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 39/46

Implementacja zdalnego interfejsu (serwer) 1 package server ; 2 3 import java. rmi. RemoteException ; 4 import java. rmi. registry. LocateRegistry ; 5 import java. rmi. registry. Registry ; 6 import java. rmi. server. UnicastRemoteObject ; 7 8 import shared.*; 9 10 public class PresenceList implements RemotePresenceList { Początek implementacji zdalnego interfejsu Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 40/46

Implementacja zdalnego interfejsu (serwer) 12 public boolean reportpresenceof ( OsobaInterface o) { 13 System. out. print (" Zapisano obecno ść osoby : "); 14 System. out. print (o. getfirstname () + " "); 15 System. out. print (o. getlastname () + " "); 16 System. out. println (" indeks : " + o. getindexnumber ()); 17 18 return true ; 19 } Implementacja metody wywoływanej zdalnie Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 40/46

Implementacja zdalnego interfejsu (serwer) 21 public static void main ( String args []) { 22 if ( System. getsecuritymanager () == null ) { 23 System. setsecuritymanager ( new SecurityManager ()); 24 } 25 try { 26 PresenceList list = new PresenceList (); 27 RemotePresenceList remote_list = ( RemotePresenceList ) 28 UnicastRemoteObject. exportobject ( list, 0); 29 Registry registry = LocateRegistry. getregistry (); 30 registry. rebind (" RemotePresenceList ", remote_list ); 31 System. out. println (" Remote presence list bound "); 32 } catch ( RemoteException e) { 33 e. printstacktrace (); 34 } 35 } Utworzenie obiektu i rejestracja zdalnej metody Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 40/46

Wywołanie zdalnej metody (klient) 1 package client ; 2 3 import java. rmi. RemoteException ; 4 import java. rmi. NotBoundException ; 5 import java. rmi. registry. LocateRegistry ; 6 import java. rmi. registry. Registry ; 7 8 import shared.*; 9 import client. shared. Student ; 10 11 public class ReportStudent { Początek implementacji części klienckiej Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 41/46

Wywołanie zdalnej metody (klient) 13 public static void main ( String args []){ 14 if ( System. getsecuritymanager () == null ) { 15 System. setsecuritymanager ( new SecurityManager ()); 16 } 17 18 Student ja = new Student (" Jan ", " Kowalski ", 1234); Operacje wstępne Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 41/46

Wywołanie zdalnej metody (klient) 19 try { 20 Registry registry = LocateRegistry. getregistry ( args [0]); 21 RemotePresenceList list = ( RemotePresenceList ) 22 registry. lookup (" RemotePresenceList "); 23 24 boolean result = list. reportpresenceof ( ja ); 25 26 if ( result ) { 27 System. out. println (" Obecno ść zarejestrowano poprawnie "); 28 } else { 29 System. out. println (" System odm ówił przyj ę cia zgł oszenia "); 30 } 31 } 32 catch ( RemoteException e) { e. printstacktrace (); } 33 catch ( NotBoundException e) { e. printstacktrace (); } 34 } Wywołanie zdalnej metody Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 41/46

Wywołanie zdalnej metody (klient) 1 package client. shared ; 2 3 import java. io. Serializable ; 4 import shared.*; 5 6 public class Student implements OsobaInterface, Serializable { 7 private String fname, lname ; 8 private int index ; 9 10 public Student ( String fname, String lname, int index ) { 11 this. fname = fname ; this. lname = lname ; 12 this. index = index ; 13 } 14 15 public String getfirstname () { return fname ; } 16 public String getlastname () { return lname ; } 17 public int getindexnumber () { return index ; } 18 } Klasa przekazywana do zdalnej metody Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 41/46

Przygotowanie do uruchomienia Kompilacja kodu współdzielonego, serwera i klienta Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 42/46

Przygotowanie do uruchomienia Kompilacja kodu współdzielonego, serwera i klienta Utworzenie archiwów jar skomilowanego kodu: Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 42/46

Przygotowanie do uruchomienia Kompilacja kodu współdzielonego, serwera i klienta Utworzenie archiwów jar skomilowanego kodu: shared.jar współdzielone interfejsy (serwer) Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 42/46

Przygotowanie do uruchomienia Kompilacja kodu współdzielonego, serwera i klienta Utworzenie archiwów jar skomilowanego 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

Przygotowanie do uruchomienia Kompilacja kodu współdzielonego, serwera i klienta Utworzenie archiwów jar skomilowanego kodu: shared.jar współdzielone interfejsy (serwer) client shared.jar klasy klient potrzebne serwerowi (klient) Umieszczenie plików jar na serwerach www Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 42/46

Przygotowanie do uruchomienia Kompilacja kodu współdzielonego, serwera i klienta Utworzenie archiwów jar skomilowanego kodu: shared.jar współdzielone interfejsy (serwer) client shared.jar klasy klient potrzebne serwerowi (klient) Umieszczenie plików jar na serwerach www Konfiguracja SecurityManagera client.policy i server.policy 1 grant codebase " file :${ user. home }/ sciezka /-" { 2 permission java. security. AllPermission ; 3 }; Przykładowa definicja polityki bezpieczeństwa Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 42/46

Uruchomienie aplikacji 1 Uruchomenie rmiregistry (javase 7) rmiregistry -J- Djava. rmi. server. usecodebaseonly = 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

Uruchomienie aplikacji 1 Uruchomenie rmiregistry (javase 7) rmiregistry -J- Djava. rmi. server. usecodebaseonly = false Uruchomienie rmiregistry 2 Uruchomienie serwera (javase 7) java -Djava. security. policy = server. policy \ -Djava. rmi. server. codebase = http :// s1/ shared. jar \ -Djava. rmi. server. usecodebaseonly = 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

Uruchomienie aplikacji 1 Uruchomenie rmiregistry (javase 7) rmiregistry -J- Djava. rmi. server. usecodebaseonly = false Uruchomienie rmiregistry 2 Uruchomienie serwera (javase 7) java -Djava. security. policy = server. policy \ -Djava. rmi. server. codebase = http :// s1/ shared. jar \ -Djava. rmi. server. usecodebaseonly = false \ server / PresenceList Uruchomienie serwera 3 Uruchomienie klienta (javase 7) java -Djava. security. policy = client. policy \ -Djava. rmi. server. codebase = http :// s2/ client_shared. jar \ client / ReportStudent adres_serwera_z_rmiregistry Uruchomienie klienta Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 43/46

RMI podsumowanie Proste wywołanie metody na zdalnym obiekcie Wojciech Rząsa, KIiA PRz Programowanie rozproszone w języku Java 44/46

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

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

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

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