14. Komunikacja rozproszona gniazdka, RMI

Wielkość: px
Rozpocząć pokaz od strony:

Download "14. Komunikacja rozproszona gniazdka, RMI"

Transkrypt

1 gniazdka, RMI 14.1 Pakiet java.net 14.2 Mechanizm gniazdek TCP 14.3 Przykład aplikacji klient-serwer 14.4 RMI model DOA 14.5 Przykład aplikacji rozproszonej W. Kasprzak: Programowanie zdarzeniowe Pakiet java.net - wprowadzenie 1) Elementy programowania sieciowego Aplikacje programowe w Javie korzystają z protokółów warstwy transportowej sieci: Transmission Control Protocol (TCP) lub User Datagram Protocol (UDP). TCP to połączeniowy, niezawodny protokół typu point-to-point dane nadchodzą w kolejności wysłania. Z TCP korzystają takie aplikacje, jak Hypertext Transfer Protocol (HTTP), File Transfer Protocol (FTP), Telnet. UDP to bezpołączeniowy protokół niezaleŝnego przesyłania pakietów danych (tzw. datagramy). Korzystają z niego programy nie wymagające gwarantowanych połączeń, np. serwer zegara, program ping. Porty - logiczne punkty wejścia do aplikacji pracujących na danym komputerze, dołączonym do sieci. W. Kasprzak: Programowanie zdarzeniowe 14-2

2 Dane przekazywane przez Internet posiadają adres swojego przeznaczenia: adres komputera - 32-bitowy adres IP, adres portu - 16-bitowy numer portu. W komunikacji według protokółu TCP, serwer związuje swoje gniazdko z określonym portem rejestruje się pod określonym portem. RównieŜ w protokóle UDP pakiety kierowane są do zadanego portu, przydzielonego pewnej aplikacji. Numery portów: od 0 do Numery zastrzeŝone portów: od 0 do 1023 zarezerwowane na usługi takie, jak HTTP, FTP, itd. W. Kasprzak: Programowanie zdarzeniowe 14-3 Klasy w java.net Komunikację zgodną z tymi protokółami TCP i UDP realizują klasy pakietu java.net: URL, URLConnection, Socket, ServerSocket (dla TCP); DatagramPacket, DatagramSocket, MulticastSocket (dla UDP). 2) Klasa URL URL (Uniform Resource Locator) to adres zasobu w Internecie. URL ma postać napisu specyfikującego: protokół dla dostępu do zasobu i lokalizację zasobu. URL jest teŝ nazwą klasy w java.net. Obiekt klasy URL reprezentuje adres URL. Konstruktory klasy URL 1. Z parametrem typu String reprezentującym adres bezwzględny. Np.: URL adrespw = new URL(" W. Kasprzak: Programowanie zdarzeniowe 14-4

3 2. Z dwoma parametrami obiektem URL reprezentującym adres bazowy i parametrem typu String reprezentującym adres względny. Np.: dane są dwa adresy URL MoŜna utworzyć obiekty klasy URL dla obu stron na podstawie adresów względem jednej bazy - : URL dydaktyka = new URL(" URL dydaktykaproz = new URL(dydaktyka, "proz.html"); URL dydaktykaprobe = new URL(dydaktyka, "probe.html"); korzystając z konstruktora: URL(URL bazowyurl, String wzglednyurl) MoŜna teŝ utworzyć referencję do pozycji w dokumencie. Np. URL dydaktykaprozprojekt = new URL(dydaktykaProz, "#PROJEKT"); 3. Trzy-argumentowy konstruktor URL: new URL("http", " "/dydaktyka/proz.html"); W. Kasprzak: Programowanie zdarzeniowe Cztero-argumentowy konstruktor URL uwzględniający numer portu. Np. URL dydaktykaproz = new URL("http", " "dydaktyka/proz.html"); utworzy obiekt klasy URL dla następującego adresu URL: KaŜdy z kontruktorów klasy URL moŝe zgłosić wyjątek MalformedURLException (gdy argumenty referują null lub nieznany protokół). try { URL myurl = new URL(...) catch (MalformedURLException e) { // obsługa wyjątku... Obiekty klasy URL nie mogą być zmieniane po pierwszej inicjalizacji. W. Kasprzak: Programowanie zdarzeniowe 14-6

4 Podstawowe metody klasy URL Metody zwracające pełny adres URL dla danego obiektu klasy URL: String tostring() String toexternalform(). Metody podające informacje o stanie obiektu URL: getprotocol podaje część URL dotyczącą protokółu; gethost - podaje część URL dotyczącą adresu hosta; getport - podaje część URL dotyczącą numeru portu (liczba integer lub wartość -1 gdy port nie jest ustawiony); getfile - podaje część URL dotyczącą nazwy pliku; getref - podaje część URL dotyczącą referencji w pliku dokumentu. Przykład Tworzenie i korzystanie z obiektu klasy URL. import java.net.*; import java.io.*; public class ParseURL { W. Kasprzak: Programowanie zdarzeniowe 14-7 public static void main(string[] args) throws Exception { URL aurl = new URL(" + "tutorial/index.html#downloading"); System.out.println("protocol = " + aurl.getprotocol()); System.out.println("host = " + aurl.gethost()); System.out.println("filename = " + aurl.getfile()); System.out.println("port = " + aurl.getport()); System.out.println("ref = " + aurl.getref()); Wynik pracy programu: protocol = http host = java.sun.com filename = /docs/books/tutorial/index.html port = 80 ref = DOWNLOADING W. Kasprzak: Programowanie zdarzeniowe 14-8

5 Metody klasy URL do połączeń w sieci Metoda openstream() Metoda zwraca obiekt strumieniowy klasy java.io.inputstream związany z adresem URL. Przykład Wykorzystanie metody openstream() do połączenia w sieci. Odczyt informacji - poprzez obiekt klasy BufferedReader i zapis na standardowym wyjściu. import java.net.*; import java.io.*; public class URLReader { public static void main(string[] args) throws Exception { URL yahoo = new URL(" BufferedReader in = new BufferedReader( new InputStreamReader( yahoo.openstream())); String inputline; W. Kasprzak: Programowanie zdarzeniowe 14-9 while ((inputline = in.readline())!= null) System.out.println(inputLine); in.close(); Metoda openconnection() Metoda zwraca obiekt klasy URLConnection, który moŝe być wykorzystany do szczegółowej współpracy z adresem URL. Np. try { URL yahoo = new URL(" URLConnection yahooconnection = yahoo.openconnection(); catch (MalformedURLException e) { // new URL() nie powiodło się... catch (IOException e) { // openconnection() nie powiodło się... W. Kasprzak: Programowanie zdarzeniowe 14-10

6 3) Metody klasy URLConnection Przykład Odczyt z URL za pomocą obiektu klasy URLConnection. import java.net.*; import java.io.*; public class URLConnectionReader { public static void main(string[] args) throws Exception { URL yahoo = new URL(" URLConnection yc = yahoo.openconnection(); // Połącz BufferedReader in = new BufferedReader( new InputStreamReader( yc.getinputstream())); // Pobierz strumień String inputline; while ((inputline = in.readline())!= null) System.out.println(inputLine); in.close(); W. Kasprzak: Programowanie zdarzeniowe Adresy URL do których dołączono skrypty cgi-bin wymagają, aby zapisywać informację do URL. Typowy przykład zapisu do URL polega na wypełnieniu przez uŝytkownika zapytania podanego w postaci formatki na stronie HTML i wysłaniu go do serwera pod adres URL. Przetwarza on zwykle skrypt cgi-bin po stronie serwera i odpowiada w postaci strony HTML. Współpraca programu Javy ze skryptami cgi-bin po stronie serwera wymaga moŝliwości zapisu do URL przez ten program. Czyli wymaga to realizacji następujących kroków w rogramie: 1. Utworzyć obiekt typu URL. 2. Otworzyć połączenie z tym URL. 3. Ustawić moŝliwości wyjściowe dla URLConnection. 4. Pobrać strumień wyjściowy z połączenia bedzie on połączony ze standardowym strumieniem wejściowym skryptu cgi-bin po stronie serwera. 5. Zapisywać dane do strumienia wyjściowego. 6. Zamknąć strumień. W. Kasprzak: Programowanie zdarzeniowe 14-12

7 Przykład Skrypt na naszej stronie sieci odczytuje napis ze standardowego wejścia, odwraca kolejność znaków napisu i zapisuje wynik do standardowego wyjścia. Skrypt wymaga danych wejściowych w formacie string=napis, gdzie napis jest napisem do odwrócenia. import java.io.*; import java.net.*; public class Reverse { public static void main(string[] args) throws Exception { if (args.length!= 1) { System.err.println("Wywołanie: java Reverse " + "napis"); System.exit(1); String stringtoreverse = URLEncoder.encode(args[0]); URL url = new URL(" URLConnection connection = url.openconnection(); connection.setdooutput(true); // UmoŜliwić wyjście do URL PrintWriter out = new PrintWriter( connection.getoutputstream()); W. Kasprzak: Programowanie zdarzeniowe out.println("string=" + stringtoreverse); out.close(); BufferedReader in = new BufferedReader( new InputStreamReader( connection.getinputstream())); String inputline; while ((inputline = in.readline())!= null) System.out.println(inputLine); in.close(); Komentarz do programu: 1) Przetwarzanie parametrów programu z linii komend: if (args.length!= 1) { System.err.println("Wywołanie: java Reverse " + "napis"); System.exit(-1); String stringtoreverse = URLEncoder.encode(args[0]); W. Kasprzak: Programowanie zdarzeniowe 14-14

8 Ma być tylko jeden parametr programu i kodowany on jest dla przesłania (w tym spacje i znaki przestankowe) go do skryptu cgi-bin. 2) Utworzenie obiektu klasy URL dla skryptu na java.sun.com, otwarcie URLConnection i ustawienie połączenia do zapisu: URL url = new URL(" URLConnection c = url.openconnection(); c.setdooutput(true); // Ustawienie do zapisu 3) Utworzenie strumienia wyjściowego dla połączenia i utworzenie na nim obiektu PrintWriter : PrintWriter out = new PrintWriter(c.getOutputStream()); Jeśli URL nie zezwala nam na zapis (brak wyjścia) to metoda getoutputstream zgłosi wyjątek UnknownServiceException. 4) Zapis danych do strumienia wyjściowego i zamknięcie strumienia: out.println("string=" + stringtoreverse); out.close(); Strumien wyjściowy klienta jest strumieniem wejściowym serwera skryptu realizującego odrócenie kolejności liter. W. Kasprzak: Programowanie zdarzeniowe ) Odczytujemy informację zwrotną ze skryptu: BufferReader in = new BufferedReader( new InputStreamReader(c.getInputStream())); String inputline; while ((inputline = in.readline())!= null) System.out.println(inputLine); in.close(); Przykład wyniku działania: Reverse Me reversed is: em esrever W. Kasprzak: Programowanie zdarzeniowe 14-16

9 14.2 Mechanizm gniazdek TCP Do komunikacji sieciowej z wykorzystaniem protokółu TCP wykorzystywane są mechanizmy: strumieni i gniazdek (ang. socket) - udostępniany w pakiecie java.net.*. Programista moŝe skupić się na tym jakie dane chce przesłać i pod jaki adres albo co chce odebrać i skąd. 1) Gniazdka sieciowe dla TCP: Socket i ServerSocket Do bezpośredniego komunikowania uŝywany jest obiekt klasy Socket, a do prowadzenia nasłuchu - ServerSocket. Tworząc gniazdko do komunikacji typu Socket podajemy adres komputera, z którym chcemy się połączyć oraz numer portu, na którym ma zostać nawiązane połączenie. Np.: Socket s = new Socket("localhost", 4444); - gdy chcemy połączyć się z komputerem lokalnym na porcie 4444; Socket s = new Socket("SOLARIS", 4444); W. Kasprzak: Programowanie zdarzeniowe gdy chcemy połączyć się z komputerem mającym nazwę SOLARIS w sieci lokalnej LAN na porcie 4444; Socket s = new Socket(" ", 4444); - gdy chcemy połączyć się z komputerem o danym adresie IP na porcie 4444; Socket s = new Socket(" 4444); - gdy chcemy połączyć się z danym serwerem internetowym na porcie Tworząc gniazdko do nasłuchu typu ServerSocket, podajemy tylko numer portu, na którym ma być prowadzony nasłuch, np.: ServerSocket ss = new ServerSocket(4444); Numer portu musi zawierać się w przedziale [0,...,65535]. JednakŜe niektóre numery portów są zajmowane przez usługi sieciowe takie, jak standardowe protokoły transmisji, np.: 21 przez FTP, 80 przez HTTP. Ponadto pewnych portów uŝywają same systemy operacyjne. W rezultacie uŝywanie numerów portów z przedziału [0,...,1023] jest zabronione. W. Kasprzak: Programowanie zdarzeniowe 14-18

10 2) Realizacja prostej komunikacji Przykład 14.5.a. Nawiązanie komunikacji pomiędzy dwoma programami. Najpierw przedstawiamy program serwera nasłuchujący na gniazdku i odbierający pojawiające się dane. //Serwer.java import java.io.*; import java.net.*; public class Serwer { public static void main(string args[]) throws IOException { ServerSocket ss = new ServerSocket(4444); // Gniazdko nasłuchu while(true) { // Praca w pętli Socket s = ss.accept(); // Oczekiwanie na połączenie DataInputStream dis = new DataInputStream( s.getinputstream()); // Pobierz strumień String msg = dis.readutf(); // Odczyt danych ze strumienia System.out.println(msg); // Przetwarzaj dane tu : wyprowadź dis.close(); // Zamknięcie strumienia W. Kasprzak: Programowanie zdarzeniowe s.close(); // Zamknięcie połączenia gniazdka PowyŜszy program działa, jak praktycznie kaŝdy serwer, w nieskończonej pętli. Nasłuchuje on na porcie 4444, korzystając z gniazdka ServerSocket. Sam proces oczekiwania na połączenie realizowany jest w metodzie accept. Gdy na wybranym porcie pojawi się informacja o próbie uzyskania połączenia, następuje zakończenie nasłuchu i utworzenia gniazdka Socket. Dalej następuje odczytanie strumienia podłączonego do gniazdka, zawartość jest wypisywana na ekran, a strumień i gniazdo są zamykane. Następnie program serwera znowu czeka na próbę nawiązania połączenia. Proste uŝycie pętli nieskończonej powoduje, Ŝe aby go zakończyć, musimy uŝyć kombinacji klawiszy Ctrl+C. W. Kasprzak: Programowanie zdarzeniowe 14-20

11 Przykład 14.5.b. Wysłanie danych przez klienta. Program klienta tworzy gniazdko Socket w celu nawiązania połączenia z lokalnym komputerem na porcie Po zaakceptowaniu połączenia tworzony jest strumień, przez który przesyłany jest obiekt typu String. Następnie strumień i gniazdko są zamykane, a program kończy działanie. //Klient.java import java.io.*; import java.net.*; public class Klient { public static void main(string args[]) throws IOException { Socket s = new Socket("localhost", 4444); DataOutputStream dos = new DataOutputStream(s.getOutputStream()); dos.writeutf("witaj w sieci!"); // Prześlij napis do serwera dos.close(); // Zamknij strumień s.close(); // Zamknij gniazdko W. Kasprzak: Programowanie zdarzeniowe Podsumowanie przykładu 14.5 Musimy najpierw skompilować oba programy i uruchomić program serwerowy. Następnie w drugim okienku-konsoli uruchamiamy program kliencki. KaŜde kolejne uruchomienie programu-klienta spowoduje wyświetlenie jednego napisu w programie-serwerze, co oznacza, Ŝe połączenie jest skutecznie nawiązywane. W. Kasprzak: Programowanie zdarzeniowe 14-22

12 14.3 Przykład aplikacji klient - serwer Aplikacje sieciowe są tworzone w celu zdalnego wykonywania jakichś konkretnych czynności bądź udostępniania usług, czy zasobów. Zobaczmy przykład aplikacji klient-serwer, która - poza nawiązaniem łączności - będzie realizowała zdalną obsługę trzech poleceń systemowych: list - wyświetlenie zawartości bieŝącego katalogu na serwerze; get - pobranie pliku z serwera i wyświetlenie go na konsoli klienta; exit - zakończenie pracy klienta. 1) Program serwera Przykład Program serwera pracuje w pętli nieskończonej nasłuchując na porcie 4444 i oczekując na Ŝądania połączeń od klientów. Gdy takie nadchodzą - kaŝdemu przydzielany jest osobny wątek do obsługi. //PlikSerwer.java import java.io.*; W. Kasprzak: Programowanie zdarzeniowe import java.net.*; /* Wątek obsługujący połączenie pracuje w pętli nieskończonej. Czyta on ze strumienia podłączonego do gniazdka obiekt serializowalnej klasy programisty Command, a dokładniej - najpierw czyta obiekt ze strumienia, a następnie zmienia jego typ na Command. */ public class PlikSerwer implements Runnable { Socket socket; public PlikSerwer(Socket s) { socket = s; public void run() { // Metoda dla wątku try { ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); // Strumień wejściowy ObjectOutputStream oos = // i wyjściowy new ObjectOutputStream(socket.getOutputStream()); while(true) { // Pętla nieskończona Command cmd = (Command)ois.readObject(); // Odczyt obiektu W. Kasprzak: Programowanie zdarzeniowe 14-24

13 /* Następnie sprawdza zawartość odczytanego obiektu i w zaleŝności od niej tworzy odpowiedni obiekt klasy programisty Response. Tworzonemu obiektowi przekazywany jest efekt obsługi polecenia, tzn. napis na zakończenie pracy, lista plików w katalogu bieŝącym serwera, czy zawartość konkretnego pliku. */ // Obsługa komendy zakończenia pracy klienta if (cmd.getcommand() == Command.EXIT) { send(oos, new Response(cmd, "Do zobaczenia")); break; // Obsługa wyświetlania zawartości bieŝącego katalogu serwera else if (cmd.getcommand() == Command.LIST) { File file = new File("."); // Plik - aktualny katalog send(oos, new Response(cmd, file.list())); // Lista plików else if (cmd.getcommand() == Command.GET) { // Obsługa wyświetlenia zawartości danego pliku na serwerze String filename = (String) cmd.getcommandarg(); W. Kasprzak: Programowanie zdarzeniowe File file = new File(filename); byte buff [] = new byte[(int) file.length()]; FileInputStream fis = new FileInputStream(file); fis.read(buff); // Wczytaj dane z podanego pliku fis.close(); send(oos, new Response(cmd, buff)); // Prześlij zawartość pliku else { send(oos, new Response(cmd, "Nieznana komenda")); ois.close(); // Zamknij strumienie wejściowy oos.close(); // - - wyjściowy socket.close(); // Zamknij gniazdko catch(exception e) { System.out.println(e); W. Kasprzak: Programowanie zdarzeniowe 14-26

14 /* Obiekt zapisywany jest do strumienia wyjściowego czyli resultat przesyłany jest do klienta w obiekcie klasy Response. */ private void send(objectoutputstream oos, Response response) throws IOException { oos.writeobject(response); oos.flush(); /* Program serwera pracuje w pętli nieskończonej nasłuchując na porcie 4444 i oczekując na Ŝądania połączeń od klientów. Gdy takie nadchodzą - kaŝdemu przydzielany jest osobny wątek do obsługi. */ public static void main(string args[]) throws IOException { ServerSocket ss = new ServerSocket(4444); // Utwórz gniazdko System.out.println("Nasłuchiwanie na porcie "); while(true) { Socket s = ss.accept(); // Oczekuje na Ŝądanie od klienta System.out.println("Akceptuję połączenie z: "+s.getinetaddress()); (new Thread(new PlikSerwer(s))).start(); // Uruchom wątek obsługi W. Kasprzak: Programowanie zdarzeniowe ) Klasy pomocnicze w tym przykładzie Przykład Opiszemy tu klasę pomocniczą serwera Command. Klasa pomocnicza zawiera deklaracje stałych identyfikujących polecenia wydawane serwerowi przez klienta. Zawiera teŝ zmienną określającą bieŝące polecenie wydane serwerowi oraz metody ją obsługujące. Cała klasa jest serializowana, aby jej obiekty mogły być zapisywane do strumieni. //Command.java import java.io.*; public class Command implements Serializable { public final static int LIST = 0; public final static int GET = 1; public final static int EXIT = 2; private int cmd; private Object arg; public Command (int cmd) { W. Kasprzak: Programowanie zdarzeniowe 14-28

15 this.cmd = cmd; public Command (int cmd, Object arg) { this.cmd = cmd; this.arg = arg; public int getcommand() { return cmd; public Object getcommandarg() { return arg; Przykład Opiszemy teraz klasę Response. Klasa zawiera prywatne pole do przechowywania obiektu będącego rezultatem realizacji polecenia klienta. Dzięki serializacji obiekty tej klasy mogą być przesyłane za pomocą strumieni, tak samo jak obiekty Command. // Response.java W. Kasprzak: Programowanie zdarzeniowe import java.io.*; public class Response implements Serializable { private Object data; private Command cmd; public Response (Command cmd, Object data) { this.cmd = cmd; this.data = data; public Object getdata() { return data; public Command getcommand() { return cmd; W. Kasprzak: Programowanie zdarzeniowe 14-30

16 3) Program klienta w tym przykładzie Przykład Program klienta. // PlikKlient.java import java.io.*; import java.net.*; public class PlikKlient { Socket socket; ObjectOutputStream oos; ObjectInputStream ois; public PlikKlient(String host, int port) throws IOException { socket = new Socket(host, port); oos = new ObjectOutputStream(socket.getOutputStream()); ois = new ObjectInputStream(socket.getInputStream()); public void go() { try { BufferedReader br = new BufferedReader( W. Kasprzak: Programowanie zdarzeniowe new InputStreamReader(System.in)); while(true) { System.out.print("Zdalny>"); System.out.flush(); String line = br.readline(); // Komenda końca pracy klienta if (line.startswith("exit")) { Command cmd = new Command(Command.EXIT); Response response = send(cmd); System.out.println(response.getData()); System.exit(0); //Komenda wyświetlenia zawartości bieŝącego katalogu serwera else if (line.startswith("list")) { Command cmd = new Command(Command.LIST); Response response = send(cmd); String list [] = (String []) response.getdata(); for (int i=0; i<list.length; i++) { W. Kasprzak: Programowanie zdarzeniowe 14-32

17 System.out.println(list[i]); //Komenda wyświetlenia zawartości danego pliku na serwerze else if (line.startswith("get")) { Command cmd = new Command(Command.GET, line.substring(4)); Response response = send(cmd); byte content [] = (byte []) response.getdata(); System.out.println(new String(content)); else { System.out.println("Nieznana komenda: "+line); catch (Exception e) { System.out.println(e); W. Kasprzak: Programowanie zdarzeniowe private Response send(command cmd) throws Exception { oos.writeobject(cmd); oos.flush(); return (Response) ois.readobject(); public static void main(string args[]) throws IOException { (new PlikKlient("localhost", 4444)).go(); Program klienta odczytuje z konsoli polecenia od uŝytkownika, zapisuje je w postaci obiektów do strumienia podłączonego do gniazdka pracującego na porcie 4444, odczytuje ze strumienia przychodzące z serwera odpowiedzi i wyświetla je na konsoli. W. Kasprzak: Programowanie zdarzeniowe 14-34

18 4) Uruchomienie całej aplikacji Po skompilowaniu wszystkich klas uruchamiamy serwer, a następnie klienta (lub wielu klientów) - oczywiście kaŝdy z programów uruchamiany jest w osobnym okienku konsoli. Gdy oba programy znajdują się na jednym komputerze (tj. testujemy połączenie na komputerze lokalnym), nie muszą być umieszczone w jednym katalogu. JednakŜe wtedy zarówno w katalogu z serwerem - jak i z klientem - muszą znajdować się skompilowane klasy pomocnicze. Po uruchomieniu obu programów moŝemy wydać w konsoli klienta któreś z trzech obsługiwanych poleceń i zobaczyć efekt jego działania. W. Kasprzak: Programowanie zdarzeniowe RMI (Remote Method Invocation) model DOA 1) Model DOA Mechanizm RMI wykorzystuje model komunikacji klient-serwer i realizuje paradygmat programowania obiektowego - rozproszonego (DOA distributed object application): W. Kasprzak: Programowanie zdarzeniowe 14-36

19 program serwera tworzy obiekty, udostępnia referencje do nich (dzięki ich zarejestrowaniu poprzez rmiregistry) i oczekuje na wywołania metod na tych obiektach inicjowane przez klientów; programy klientów uzyskują referencję do zdalnego obiektu i wywołują na nim metody. 2) Typowy schemat współpracy klient - serwer w RMI (A) Zdalny interfejs i zdalny obiekt Aplikacja z uŝyciem Java RMI składa się z interfejsów i klas, przy czym spodziewamy się, Ŝe implementacje metod mogą być rozproszone po róŝnych maszynach. Zdalnym obiektem nazywamy obiekt, którego metody mogą być wywoływane z róŝnych maszyn wirtualnych Javy. Takie metody deklarowane są w tzw. zdalnych interfejsach: zdalny interfejs dziedziczy po interfejsie java.rmi.remote, w liście wyjątków kaŝdej metody tego interfejsu istnieje deklaracja wyjątku java.rmi.remoteexception. W. Kasprzak: Programowanie zdarzeniowe Serwer związuje nazwę w rejestrze ze swoim zdalnym obiektem, który moŝe być wołany zdalnie. (B) Pobranie obiektu i wywołanie metody Klient odnajduje zdalny obiekt w rejestrze poprzez jego nazwę i wywołuje na nim metodę interfejsu. RMI nie kopiuje zdalnego obiektu do programu odbiorcy lecz przekazuje namiastkę (stub) zdalnego obiektu reprezentuje ona referencję do zdalnego obiektu. Ta referencja moŝe być konwertowana na dowolny zdalny interfejs implementowany przez klasę zdalnego obiektu. Klasa zdalnego obiektu pełni w programie klienta rolę pośrednika (proxy) w przekazie danych. Zdalnie moŝna wywołać wyłącznie metody zdalnych interfejsów danej klasy. (C) Dynamiczne ładowanie definicji klasy W. Kasprzak: Programowanie zdarzeniowe 14-38

20 Jeśli klasa obiektu nie jest zdefiniowana na maszynie odbiorcy obiektu to RMI pobierze od nadawcy i prześle ten kod. Mechanizm RMI korzysta z istniejącego serwera sieciowego dla przekazywania bajtkodu klas pomiędzy klientem a serwerem w obie strony. 3) Podstawowe klasy i interfejsy w java.rmi W. Kasprzak: Programowanie zdarzeniowe ) Tworzenie aplikacji rozproszonej w RMI NaleŜy: zdefiniować komponenty aplikacji (lokalne i zdalne obiekty, zdalne interfejsy, implementacje metod); skompilować program (kompilator javac) i wygenerować namiastki zdalnych obiektów (kompilator rmic); udostępnić klasy i namiastki obiektów w sieci, uruchomić aplikację (dokonać rejestracji w rejestrze zdalnych obiektów RMI, uruchomić serwer i klientów). W. Kasprzak: Programowanie zdarzeniowe 14-40

21 14.5 Przykład aplikacji rozproszonej o dynamicznie ładowanym kodzie Przykład Projekt serwera obliczeń w oparciu o mechanizm RMI Serwer akceptuje zadania pochodzące od klienta, wykonuje te zadania i zwraca wyniki. Serwer składa sie ze zdalnego interfejsu Compute i klasy ComputeEngine implementującej ten interfejs, przeznaczonej dla utworzenia zdalnego obiektu. W metodzie main tej klasy następuje utworzenie tego obiektu, jego zarejestrowanie i ustawienie menadŝera zabezpieczeń (security manager). Interfejsy typu Remote Interface W przykładzie występują 2 interfejsy zdalne deklarujące po jednej metodzie. W. Kasprzak: Programowanie zdarzeniowe Interfejs Compute serwera ComputeEngine pozwala na dostarczanie zadania do wykonania. package compute; import java.rmi.remote; import java.rmi.remoteexception; public interface Compute extends Remote { Object executetask(task t) throws RemoteException; Dziedziczenie z interfejsu java.rmi.remote oznacza, Ŝe: metody dziedziczonego interfejsu mogą być wołane z dowolnej maszyny wirtualnej Javy; obiekt z implementacją tego interfejsu staje się zdalnym obiektem. Zdalna metoda musi deklarować zgłaszanie wyjątku java.rmi.remoteexception. Jest to sprawdzalny wyjątek. W. Kasprzak: Programowanie zdarzeniowe 14-42

22 Interfejs klienta Task wyznacza sposób wykonania przez serwer powierzonego zadania. package compute; import java.io.serializable; public interface Task extends Serializable { Object execute(); Dziedziczenie interfejsu po java.io.serializable oznacza, Ŝe obiekt klasy implementującej ten interfejs moŝe zostać zamieniony na strumień bajtów i jednoznacznie zrekonstruowany z niego. Obiekty róŝnych klas mogą zostać przekazane do obiektu Compute, jeśli tylko klasy implementują interfejs Task. W. Kasprzak: Programowanie zdarzeniowe Implementacja zdalnego interfejsu Klasa uŝytkownika engine.computeengine implementuje interfejs zdalny Compute, a w jej metodzie main inicjalizowany jest obiekt tej klasy. package engine; import java.rmi.*; import java.rmi.server.*; import compute.*; public class ComputeEngine extends UnicastRemoteObject implements Compute { // Konstruktor public ComputeEngine() throws RemoteException { super(); // Wywoła metodę exportobject // Konstruktor nadklasy został by wywołany nawet przy braku super(); // Metoda dla pobrania obiektu klienta do wykonania public Object executetask(task t) { return t.execute(); // W. Kasprzak: Programowanie zdarzeniowe 14-44

23 // Metoda main dla ustawienia obiektu public static void main(string[] args) { if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); String name = "//host/compute"; // Określa nazwę obiektu // zdalnego serwera try { Compute engine = new ComputeEngine(); // Utworzy obiekt Naming.rebind(name, engine); // Rejestracja obiektu zdalnego System.out.println("Compute: związany"); catch (Exception e) { System.err.println("Compute: wyjątek " + e.getmessage()); e.printstacktrace(); // Koniec metody main! W. Kasprzak: Programowanie zdarzeniowe Komentarz 1) Klasa serwera implementuje zdalny interfejs: public class ComputeEngine extends UnicastRemoteObject implements Compute i dziedziczy po klasie bazowej java.rmi.server.unicastremoteobject. Ta klasa zapewnia podstawową funkcjonalność zdalnego obiektu: implementuje metody klasy java.lang.object (equals, hashcode, tostring) odpowiednio dla zdalnego obiektu; zawiera konstruktory i metody statyczne przewidziane do wyeksportowania zdalnego obiektu (exportobject()) tzn. aby zdalny obiekt mógł odbierać wezwania od klientów; zapewnia połączenia point-to-point w oparciu o gniazdka. Inna klasa dla zdalnych obiektów java.rmi.activation.activatable (dla zdalnych obiektów wywoływalnych na Ŝądanie). W. Kasprzak: Programowanie zdarzeniowe 14-46

24 2) Konstruktor klasy ComputeEngine : public ComputeEngine() throws RemoteException { super(); // Następuje tu teŝ eksportowanie obiektu NaleŜy zadeklarować zgłaszalność wątku RemoteException, który zostanie zgłoszony, gdy nie powiedzie się eksport obiektu. 3) Implementacje metod interfejsów zdalnych Klasa implementuje jedną metodę interfejsu zdalnego Compute metodę executetask: public Object executetask(task t) { return t.execute(); Metoda wyznacza sposób komunikacji pomiędzy obiektem klasy ComputeEngine a jego klientami. Klienci przekazują serwerowi obiekt klasy implementującej interfejs Task i posiadającej implementację metody execute. W. Kasprzak: Programowanie zdarzeniowe ) Klasa klienta Do serwera moŝe być przekazany obiekt dowolnego typu o ile jest to: zmienna typu prostego, obiekt zdalny lub serializowalny obiekt (tzn. jego klasa implementuje interfejs java.io.serializable). Sposoby przekazywania obiektów zdalnych, parametrów i wyników. Zdalne obiekty przekazywane są przez referencję. Po stronie klienta tworzona jest namiastka obiektu (stub) pełniąca rolę proxy (przekazującą odwołania do rzeczywistego obiektu serwera). Zwykłe obiekty przekazywane są przez wartość poprzez ich serializację. W zdalnym wywołaniu metody zwykłe obiekty (parametry, zwracany wynik, wyjątki) są przekazywane przez wartość tworzona jest ich kopia w zdalnej wirtualnej maszynie Javy. 5) Metoda main Metoda main() klasy ComputeEngine nie jest elementem interfejsu, czyli nie jest metodą wywoływalną zdalnie. W. Kasprzak: Programowanie zdarzeniowe 14-48

25 W pierwszej kolejności metoda main() powinna utworzyć i zainstalować zarządcę polityki bezpieczeństwa (Security Manager), w przeciwnym razie mechanizm RMI nie zezwoli na ładowanie zdalnych klas. W RMI dostępna jest klasa RMISecurityManager, która realizuje pdobną politykę bezpieczeństwa, jak ta stosowana dla apletów. if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); Następnie utworzony zostaje obiekt klasy ComputeEngine i udostępniony klientom na anonimowym porcie: Compute engine = new ComputeEngine(); // Utworzenie obiektu Mechanizm RMI zarządza rejestrem zdalnych obiektów, z którego moŝna pobrać referencję do zdalnego obiektu na podstawie jego nazwy. Rejestr ten moŝe być wspólny dla wszystkich serwerów na W. Kasprzak: Programowanie zdarzeniowe danej maszynie albo teŝ proces serwera moŝe posiadać odrębny taki rejestr. Metody dostępu do rejestru zdalnych obiektów wyznacza interfejs java.rmi.naming (związanie, rejestracja, pobranie). W metodzie main klasy ComputeEngine nadajemy nazwę String name = "//host/compute"; // host to nazwa maszyny // Compute to nazwa identyfikująca obiekt zdalny w rejestrze. i rejestrujemy obiekt engine klasy ComputeEngine w rejestrze: Naming.rebind(name, engine); Podczas wywołania rebind() moŝe powstać wyjątek: RemoteException. Parametry wywołania metody Naming.rebind : pierwszy parametr jest typu java.lang.string o postaci adresu URL ; Np. //host:1234/objectname Jeśli brak jest numeru portu to przyjmuje się domyślny port: W. Kasprzak: Programowanie zdarzeniowe 14-50

26 Po zarejestrowaniu obiektu zdalnego i wydruku informacji o gotowości do pracy metoda main() kończy się wykonywać (wątek główny kończy swoje wykonanie!). Jednak istnieje referencja do obiektu przekazana innemu obiektowi bedącemu rejestrem zdalnych obiektów. Mechanizm RMI pilnuje, aby proces dla obiektu ComputeEngine nadal istniał. W. Kasprzak: Programowanie zdarzeniowe Przykład Program klienta musi definiować zadanie, które ma wykonać w jego imieniu serwer. W tym przykładzie klient składa się z 2 klas: ComputePi w celu pobrania obiektu serwera Compute ; Pi - klasa implementująca interfejs Task i definiująca zadanie. Definicja Task: package compute; public interface Task extends java.io.serializable { Object execute(); Klasa klienta client.computepi package client; import java.rmi.*; import java.math.*; import compute.*; public class ComputePi { W. Kasprzak: Programowanie zdarzeniowe 14-52

27 public static void main(string args[]) { if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); try { // Nazwa serwera w formacie URL String name = "//" + args[0] + "/Compute"; // Pobierz referencje do obiektu zdalnego serwera: Compute comp = (Compute) Naming.lookup(name); Pi task = new Pi(Integer.parseInt(args[1])); // Wywołaj metodę executetask obiektu zdalnego comp // przekazując zadanie do wykonania task : BigDecimal pi = (BigDecimal) (comp.executetask(task)); System.out.println(pi); // Wydrukuj obliczony wynik catch (Exception e) { System.err.println("ComputePi exception: " + e.getmessage()); e.printstacktrace(); W. Kasprzak: Programowanie zdarzeniowe Przepływ informacji pomiędzy obiektem klienta klasy ComputePi, rejestrem obiektów zdalnych rmiregistry i obiektem serwera ComputeEngine. Komentarz 1) Klasa klienta instaluje menadŝera bezpieczeństwa Jest to niezbędne, gdyŝ RMI moŝe ładować kod do procesu klienta w tym przypadku namiastkę obiektu ComputeEngine. W. Kasprzak: Programowanie zdarzeniowe 14-54

28 Podobnie jak serwer równieŝ klient korzysta tu z menadŝera bezpieczeństwa dostępnego w systemie RMI. 2) Klient tworzy nazwę do nadzoru obiektu zdalnego typu Compute Pierwszy parametr z linii wywołania programu, args[0], stanowi nazwę zdalnej maszyny, na której wykonuje się object typu Compute. Klient odwołuje się do metody Naming.lookup w celu odszukania obiektu po jego nazwie w rejestrze zdalnych obiektów zdalnego hosta. Parametr metody (typu String) ma tę samą składnię adresu URL jak parametr metody Naming.rebind w przypadku rejestracji obiektu przez serwer. 3) Klient tworzy nowy obiekt klasy Pi Argumentem wywołania konstruktora Pi jest drugi paramer z inii wywołania programu klienta, args[1], podający liczbę pozycji dziesiętnych dla obliczeń. 4) Klient wywołuje metodę executetask W. Kasprzak: Programowanie zdarzeniowe Klient wywołuje metodę executetask zdalnego obiektu typu Compute. Defnicja klasy client.pi, która implementuje inerfejs Task: package client; import compute.*; import java.math.*; public class Pi implements Task { /** Stałe potrzebne dla obliczenia watości pi */ private static final BigDecimal ZERO = BigDecimal.valueOf(0); private static final BigDecimal ONE = BigDecimal.valueOf(1); private static final BigDecimal FOUR = BigDecimal.valueOf(4); /** Tryb zaokrąglania */ private static final int roundingmode = BigDecimal.ROUND_HALF_EVEN; /** Precyzja - liczba pozycji po kropce dziesiętnej */ private int digits; /** Konstruktor */ public Pi(int digits) { W. Kasprzak: Programowanie zdarzeniowe 14-56

29 this.digits = digits; /** Oblicz pi */ public Object execute() { return computepi(digits); /** według formuły * pi/4 = 4*arctan(1/5) - arctan(1/239) * i po rozwinięciu arctan(x) w szereg. */ public static BigDecimal computepi(int digits) { int scale = digits + 5; BigDecimal arctan1_5 = arctan(5, scale); BigDecimal arctan1_239 = arctan(239, scale); BigDecimal pi = arctan1_5.multiply(four).subtract( arctan1_239).multiply(four); return pi.setscale(digits, W. Kasprzak: Programowanie zdarzeniowe BigDecimal.ROUND_HALF_UP); /** * Oblicza wartość arct tangens w radianach według wzoru: * arctan(x) = x - (x^3)/3 + (x^5)/5 - (x^7)/7 + (x^9)/9... */ public static BigDecimal arctan(int inversex, int scale) { BigDecimal result, numer, term; BigDecimal invx = BigDecimal.valueOf(inverseX); BigDecimal invx2 = BigDecimal.valueOf(inverseX * inversex); numer = ONE.divide(invX, scale, roundingmode); result = numer; int i = 1; do { numer = numer.divide(invx2, scale, roundingmode); W. Kasprzak: Programowanie zdarzeniowe 14-58

30 int denom = 2 * i + 1; term = numer.divide(bigdecimal.valueof(denom), scale, roundingmode); if ((i % 2)!= 0) { result = result.subtract(term); else { result = result.add(term); i++; while (term.compareto(zero)!= 0); return result; Uwaga Obiekt klasy Compute nie wymaga definicji klasy Pi dopóki obiekt klasy Pi nie zostanie przekazany jako argument metody executetask. W tym momencie kod klasy ładowany jest przez RMI do maszyny wirtualnej właściwej dla obiektu typu Compute, wołana jest metoda execute klasy Pi i wykonuje się kod tej metody. Wynikowy obiekt typu Object, w tym W. Kasprzak: Programowanie zdarzeniowe przypadku jest on typu java.math.bigdecimal, jest przekazywany zwrotnie do klienta, w którym następuje wydruk tego obiektu. Z punktu widzenia serwera obiektu typu ComputeEngine jest bez znaczenia, co oblicza zlecona metoda. Jedyne co musi wiedzieć obiekt klasy implementującej Compute o przekazywanym obiekcie to to, Ŝe jego klasa posiada metodę execute. Dynamiczne ładowanie klas PoniŜszy rysunek ilustruje skąd ładowane są definicje klas potrzebnych programom: rmiregistry, serwerowi ComputeEngine, i klientowi ComputePi podczas wykonania rozproszonej aplikacji Javy. Gdy serwer ComputeEngine rejestruje (bind) swój zdalny obiekt w rejestrze, rejestr pobiera klasę ComputeEngine_Stub i interfejsy Compute i Task, od której ta klasa zaleŝy. Te klasy pobierane są z serwera sieciowego właściwego dla ComputeEngine lub z systemu plików. W. Kasprzak: Programowanie zdarzeniowe 14-60

31 Klient typu ComputePi ładuje klasę ComputeEngine_Stub z serwera sieci właściwego dla ComputeEngine w wyniku wykonania metody Naming.lookup. Klient ComputePi dysponuje opisami interfejsów Compute i Task, dlatego teŝ ładowane są one z jego lokalnego katalogu klas. Na koniec, do maszyny wirtualnej wykonującej serwer ComputeEngine ładowany jest kod klasy Pi, gdy obiekt klasy Pi przekazywany jest w zdalnym wywołaniu metody executetask na rzecz obiektu typu ComputeEngine klasa Pi ładowana jest z serwera sieciowego właściwego dla klienta. W. Kasprzak: Programowanie zdarzeniowe Kompilacja i uruchomienie aplikacji (serwera i klientów) oraz obliczenie wartości π. 1) Tworzymy pliki typu JAR (Java ARchive) zawierający interfejsy Compute i Task dla implementacji ich przez klasy serwera i z których korzysta program klienta. 2) Tworzymy implementację interfejsu Compute i instalujemy tę usługę na maszynie udostępniając ją klientom. 3) Twórcy programów klientów, korzystając z interfejsów Compute i Task, zawartych w pliku JAR, mogą niezaleŝnie od siebie utworzyć zadanie (Task) i program klienta korzystającego z usługi Compute. Klasa klienta Pi ładowana jest na serwer podczas wykonania. Podobnie zdalna namiastka dla ComputeEngine ładowana jest z serwera na maszynie klienta podczas wykonania. Mamy trzy pakiety: compute ( interfejsy Compute i Task) engine (klasa implementująca ComputeEngine i jej namiastka) client (kod klienta ComputePi i implementacja zadania Pi). W. Kasprzak: Programowanie zdarzeniowe 14-62

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

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1 Obiektowe programowanie rozproszone Java RMI Krzysztof Banaś Systemy rozproszone 1 Java RMI Mechanizm zdalnego wywołania metod Javy (RMI Remote Method Invocation) posiada kilka charakterystycznych cech,

Bardziej szczegółowo

Remote Method Invocation 17 listopada 2010

Remote Method Invocation 17 listopada 2010 Podejście obiektowe do budowy systemów rozproszonych interfejs (w języku Java), wywiedziony z Remote obiekt aplikacja klienckak interfejs serwer stub szkielet sieć Mechanizm RMI umożliwia tworzenie obiektów

Bardziej szczegółowo

Podejście obiektowe do budowy systemów rozproszonych

Podejście obiektowe do budowy systemów rozproszonych Podejście obiektowe do budowy systemów rozproszonych interfejs (w języku Java), wywiedziony z Remote obiekt aplikacja kliencka interfejs serwer stub szkielet sieć Dariusz Wawrzyniak (IIPP) 1 Mechanizm

Bardziej szczegółowo

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1 interfejs (w języku Java), wywiedziony z Remote obiekt Podejście obiektowe do budowy systemów rozproszonych aplikacja kliencka interfejs serwer stub szkielet sieć Mechanizm RMI umożliwia tworzenie obiektów

Bardziej szczegółowo

Podejście obiektowe do budowy systemów rozproszonych

Podejście obiektowe do budowy systemów rozproszonych Podejście obiektowe do budowy systemów rozproszonych interfejs (w języku Java), wywiedziony z Remote obiekt aplikacja kliencka interfejs serwer stub szkielet sieć Dariusz Wawrzyniak 1 Mechanizm RMI umożliwia

Bardziej szczegółowo

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

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć Podejście obiektowe do budowy systemów rozproszonych interfejs (w języku Java), wywiedziony z Remote obiekt aplikacja kliencka interfejs serwer stub szkielet sieć Mechanizm RMI umożliwia tworzenie obiektów

Bardziej szczegółowo

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych Wywoływanie metod zdalnych model systemu Wywoływanie metod zdalnych aplikacja kliencka interfejs obiekt serwer Podejście obiektowe do budowy systemów rozproszonych proxy szkielet sieć Istota podejścia

Bardziej szczegółowo

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

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć interfejs (w języku Java), wywiedziony z Remote obiekt Podejście obiektowe do budowy systemów rozproszonych aplikacja kliencka stub interfejs serwer szkielet sieć Mechanizm RMI umożliwia tworzenie obiektów

Bardziej szczegółowo

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

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1 P d jś i bi kt d b d t ó Podejście obiektowe do budowy systemów rozproszonych Dariusz Wawrzyniak (IIPP) 1 interfejs (w języku Java),wywiedziony idi z Remote obie kt aplikacja klie ncka interfe js serw

Bardziej szczegółowo

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych Wywoływanie metod zdalnych Podejście obiektowe do budowy systemów rozproszonych Wywoływanie metod zdalnych model systemu obiekt aplikacja kliencka interfejs serwer proxy szkielet sieć Istota podejścia

Bardziej szczegółowo

Programowanie rozproszone w języku Java

Programowanie rozproszone w języku Java 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

Bardziej szczegółowo

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

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu Zdalne wywołanie metod - koncepcja Oprogramowanie systemów równoległych i rozproszonych Wykład 7 RMI (Remote Method Invocation) - obiektowe RPC, dostarcza klientowi interfejs do obiektu, implementacja

Bardziej szczegółowo

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

Oprogramowanie systemów równoległych i rozproszonych Wykład 7 Wykład 7 p. 1/2 Oprogramowanie systemów równoległych i rozproszonych Wykład 7 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Zdalne wywołanie

Bardziej szczegółowo

Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html

Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Dr inż. Zofia Kruczkiewicz wykład 4 Programowanie aplikacji internetowych, wykład 4 1 1. Zadania aplikacji rozproszonych obiektów

Bardziej szczegółowo

Platformy Programistyczne Zagadnienia sieciowe i wątki

Platformy Programistyczne Zagadnienia sieciowe i wątki Platformy Programistyczne Zagadnienia sieciowe i wątki Agata Migalska 27/28 maja 2014 Komunikacja sieciowa 1 Komunikacja sieciowa 2 Wiele wątków 3 Serializacja Architektura typu klient-serwer Architektura

Bardziej szczegółowo

Java programowanie w sieci. java.net RMI

Java programowanie w sieci. java.net RMI Java programowanie w sieci java.net RMI Programowanie sieciowe OSI WARSTWA APLIKACJI (7) WARSTWA PREZENTACJI(6) WARSTWA SESJI (5) WARSTWA TRANSPORTU (4) DoD Warstwa aplikacji (HTTP) Transport (gniazdka)

Bardziej szczegółowo

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

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2. Aplikacje RMI Część 2 Budowa aplikacji rozproszonych http://java.sun.com/j2se/1.5.0/docs/guide/rmi/socketfactory/index.html I. Implementacja gniazd dziedziczących po Socket i ServerSocket oraz produkcji

Bardziej szczegółowo

Programowanie współbieżne i rozproszone

Programowanie współbieżne i rozproszone Programowanie współbieżne i rozproszone WYKŁAD 6 dr inż. Komunikowanie się procesów Z użyciem pamięci współdzielonej. wykorzystywane przede wszystkim w programowaniu wielowątkowym. Za pomocą przesyłania

Bardziej szczegółowo

JAVA I SIECI. MATERIAŁY: http://docs.oracle.com/javase/tutorial/networking/index.html

JAVA I SIECI. MATERIAŁY: http://docs.oracle.com/javase/tutorial/networking/index.html JAVA I SIECI ZAGADNIENIA: URL, Interfejs gniazd, transmisja SSL, protokół JNLP. MATERIAŁY: http://docs.oracle.com/javase/tutorial/networking/index.html http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA,

Bardziej szczegółowo

Aplikacje RMI Lab4

Aplikacje RMI   Lab4 Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Lab4 Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych 1 1. Koncepcja budowy aplikacji RMI (aplikacja rozproszonych

Bardziej szczegółowo

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

sieć 4) Mechanizm RMI jest zazwyczaj wykorzystywany w rozwiązaniach typu klient-serwer. RMI (Remote Method Invocation) zdalne wywołanie metod Część 1 1) RMI jest mechanizmem, który pozwala danej aplikacji: wywoływać metody obiektów zdalnych oraz uzyskać dostęp do obiektów zdalnych (np. w

Bardziej szczegółowo

Aplikacja wielowątkowa prosty komunikator

Aplikacja wielowątkowa prosty komunikator Aplikacja wielowątkowa prosty komunikator Klient 0 (host 1) Wątek 0 Komponent serwera Wątek pochodny 3.1 Klient 1 (host 2) Wątek 1 Komponent serwera Wątek pochodny 3.2 Host 4 Serwer Wątek 3 Klient 2 (host

Bardziej szczegółowo

Adresy URL. Zaawansowane technologie Javy 2019

Adresy URL. Zaawansowane technologie Javy 2019 Adresy URL Zaawansowane technologie Javy 2019 Podstawowe pojęcia dotyczące sieci Sieć to zbiór komputerów i innych urządzeń, które mogą się ze sobą komunikować w czasie rzeczywistym za pomocą transmisji

Bardziej szczegółowo

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

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5. Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5. Schemat Internetu R R R R R R R 2 Model Internetu 3 Protokoły komunikacyjne stosowane w sieci Internet Protokoły warstwy

Bardziej szczegółowo

Komunikacja z użyciem gniazd aplikacje klient-serwer

Komunikacja z użyciem gniazd aplikacje klient-serwer Programowanie obiektowe Komunikacja z użyciem gniazd aplikacje klient-serwer Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Architektura

Bardziej szczegółowo

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

Interfejsy w Javie. Przykład zastosowania interfejsów: 1 Plan wykładu 1. Interfejsy w Javie. 2. Zdalne wywołanie metod (Remote Method Invocation). interfejsy w RMI, architektura RMI, przykładowa aplikacja korzystająca z RMI, przekazywanie parametrów, dystrybucja

Bardziej szczegółowo

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

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1 Zdalne wywołanie procedur Krzysztof Banaś Systemy rozproszone 1 RPC Komunikacja za pomocą gniazd jest wydajna, gdyż korzystamy z funkcji systemowych niewygodna, gdyż musimy wyrażać ją za pomocą jawnego

Bardziej szczegółowo

Przykłady interfejsu TCP i UDP w Javie

Przykłady interfejsu TCP i UDP w Javie Przykłady interfejsu TCP i UDP w Javie W Javie interfejsy TCP i UDP znajdują się w pakiecie java.net http://docs.oracle.com/javase/6/docs/api/java/net/packagesummary.html 1 Przykład interfejsu UDP Protokół

Bardziej szczegółowo

Java programowanie sieciowe

Java programowanie sieciowe Java programowanie sieciowe Podstawowe pojęcia dotyczące sieci Sieć to zbiór komputerów i innych urządzeń, które mogą się ze sobą komunikować w czasie rzeczywistym za pomocą transmisji danych. Każda maszyna

Bardziej szczegółowo

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

RMI-2. Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems SYSTEMY ROZPROSZONE Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems www.cs.agh.edu.pl/~slawek/zrodla_rmi2.zip Kilka pytań Co mamy? rok 2005-ty, gotową wersję 2 programu NoteBoard.

Bardziej szczegółowo

Systemy Rozproszone - Ćwiczenie 6

Systemy Rozproszone - Ćwiczenie 6 Systemy Rozproszone - Ćwiczenie 6 1 Obiekty zdalne Celem ćwiczenia jest stworzenie obiektu zdalnego świadczącego prostą usługę nazewniczą. Nazwy i odpowiadające im punkty końcowe będą przechowywane przez

Bardziej szczegółowo

Aplikacja wielow tkowa prosty komunikator

Aplikacja wielow tkowa prosty komunikator Aplikacja wielow tkowa prosty komunikator Klient 0 (host 1) W tek 0 Komponent serwera W tek pochodny 3.1 Klient 1 (host 2) W tek 1 Komponent serwera W tek pochodny 3.2 Host 4 Serwer W tek 3 Klient 2 (host

Bardziej szczegółowo

Programowanie w języku Java

Programowanie w języku Java Programowanie w języku Java Wykład 4: Programowanie rozproszone: TCP/IP, URL. Programowanie sieciowe w Javie proste programowanie sieciowe (java.net) na poziomie UDP na poziomie IP na poziomie URL JDBC

Bardziej szczegółowo

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

Systemy rozproszone. Dr inż. L. Miękina. Department of Robotics and Mechatronics AGH University of Science and Technology 1/1 1/1 Systemy rozproszone Dr inż. L. Miękina Department of Robotics and Mechatronics AGH University of Science and Technology Marzec, 2013 RMI - zdalne wywołanie metod Rozproszone obiekty Stan obiektu składa

Bardziej szczegółowo

Remote Method Invocation

Remote Method Invocation Remote Method Invocation 1. Interfejsy w Javie. 2. Zdalne wywołanie metod (Remote Method Invocation). interfejsy w RMI, 3. Przykładowa aplikacja korzystająca z RMI, 4. Własne gniazda w RMI. 5. Dystrybucja

Bardziej szczegółowo

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

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 2, część 1 1 Język JAVA podstawy Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5. Wyjątki 6. Klasa w klasie! 2 Język

Bardziej szczegółowo

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe zastosowanie języka Java SE Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z

Bardziej szczegółowo

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

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu. Wstęp Java Zadanie Celem laboratorium jest zapoznanie się z podstawami platformy oraz języka Java. W ramach zadania należy przygotować aplikację zarządzania notatkami użytkownika obsługiwaną z konsoli.

Bardziej szczegółowo

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania

Bardziej szczegółowo

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

Obiekty sieciowe - gniazda Komputery w sieci Internet komunikują się ze sobą poprzez: Obiekty sieciowe - gniazda Komputery w sieci Internet komunikują się ze sobą poprzez: TCP (Transport Control Protocol) User Datagram Protocol (UDP). TCP/IP (IP - Iternet Protocol) jest warstwowym zestawem

Bardziej szczegółowo

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. 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. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4); a) b) c) d) 2. Jaki będzie wynik kompilacji i wykonania

Bardziej szczegółowo

Komunikator internetowy w C#

Komunikator internetowy w C# PAŃSTWOWA WYśSZA SZKOŁA ZAWODOWA W ELBLĄGU INSTYTUT INFORMATYKI STOSOWANEJ Sprawozdanie Komunikator internetowy w C# autor: Artur Domachowski Elbląg, 2009 r. Komunikacja przy uŝyciu poczty internetowej

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

URL. Budowa URL (ang. Uniform Resource Locator): http://java.sun.com:80/docs/tutorial/index.html?name=net working#downloading

URL. Budowa URL (ang. Uniform Resource Locator): http://java.sun.com:80/docs/tutorial/index.html?name=net working#downloading Obsługa sieci URL Budowa URL (ang. Uniform Resource Locator): http://java.sun.com:80/docs/tutorial/index.html?name=net working#downloading protokół = http authority = java.sun.com:80 host = java.sun.com

Bardziej szczegółowo

Tworzenia aplikacji rozproszonej RMI

Tworzenia aplikacji rozproszonej RMI Tworzenia aplikacji rozproszonej RMI Mówiąc o aplikacjach RMI wyróżnia się w nich dwa typy obiektów: obiekty wywołujące metody zdalne (klienci) obiekty udostępniające metody zdalne (serwery) RMI dostarcza

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 5 Marcin Młotkowski 23 marca 2017 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 50 Historia Początkowe założenia Projekt OAK Sterowanie urządzeniami

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Przygotował: Jacek Sroka 1 Programowanie obiektowe Wykład 9 Serializacja Przygotował: Jacek Sroka 2 Przypomnienie Abstrakcja strumienia hierarchia binarna InputStream/OutputStream hierarchia znakowa Reader/Writer

Bardziej szczegółowo

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

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej dr inż. Paweł Czarnul pczarnul@eti.pg.gda.pl Architektury usług internetowych laboratorium

Bardziej szczegółowo

Tworzenie i wykorzystanie usług

Tworzenie i wykorzystanie usług Strona 1 Co to jest usługa w systemie Android? Usługi HTTP Obsługa wywołania HTTP GET Obsługa wywołania HTTP POST Obsługa wieloczęściowego wywołania HTTP POST Usługi lokalne Usługi zdalne Tworzenie usługi

Bardziej szczegółowo

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

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h] 1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Krzysztof Lemay, Naughton Barteczko R. Cadenhead JAVA, Java Podręcznik 2 wykłady dla kaŝdego Języka i ćwiczenia Programowania

Bardziej szczegółowo

Podstawy i języki programowania

Podstawy i języki programowania Podstawy i języki programowania Laboratorium 8 - wprowadzenie do obsługi plików tekstowych i wyjątków mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 11 grudnia 2017 1 / 34 mgr inż. Krzysztof

Bardziej szczegółowo

Programowanie sieciowe

Programowanie sieciowe Programowanie sieciowe Wykład 5: Java sieciowa cd. mgr inŝ. Paweł Kośla mgr Marcin Raniszewski Łódź, 2009 1 Plan wykładu ServerSocket serwer TCP DatagramSocket i DatagramPacket UDP FTP 2 Serwer TCP Gniazdo

Bardziej szczegółowo

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

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota Version 1.0, 13-05-2017 Spis treści Wyjątki....................................................................................

Bardziej szczegółowo

Klient-Serwer Komunikacja przy pomocy gniazd

Klient-Serwer Komunikacja przy pomocy gniazd II Klient-Serwer Komunikacja przy pomocy gniazd Gniazda pozwalają na efektywną wymianę danych pomiędzy procesami w systemie rozproszonym. Proces klienta Proces serwera gniazdko gniazdko protokół transportu

Bardziej szczegółowo

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

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Dr inż. Zofia Kruczkiewicz Dwa sposoby tworzenia apletów Dwa sposoby

Bardziej szczegółowo

Wybrane działy Informatyki Stosowanej

Wybrane działy Informatyki Stosowanej Wybrane działy Informatyki Stosowanej Dr inż. Andrzej Czerepicki a.czerepicki@wt.pw.edu.pl http://www2.wt.pw.edu.pl/~a.czerepicki 2017 APLIKACJE SIECIOWE Definicja Architektura aplikacji sieciowych Programowanie

Bardziej szczegółowo

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

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3(); 1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {; static public void m2() {; void abstract m3(); default static void m4() {; a) Poprawnie zadeklarowano metodę m1() b) Poprawnie

Bardziej szczegółowo

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

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego. Proxy (pełnomocnik) Cel: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego. Zastosowanie: Wszędzie tam, gdzie oczekujemy bardziej zaawansowanego odwołania do obiektu, niż zwykły

Bardziej szczegółowo

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

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Narzędzia i aplikacje Java EE Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Niniejsze opracowanie wprowadza w technologię usług sieciowych i implementację usługi na platformie Java EE (JAX-WS) z

Bardziej szczegółowo

MODEL WARSTWOWY PROTOKOŁY TCP/IP

MODEL WARSTWOWY PROTOKOŁY TCP/IP MODEL WARSTWOWY PROTOKOŁY TCP/IP TCP/IP (ang. Transmission Control Protocol/Internet Protocol) protokół kontroli transmisji. Pakiet najbardziej rozpowszechnionych protokołów komunikacyjnych współczesnych

Bardziej szczegółowo

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

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016 Wykład 10 05 maja 2016 Biblioteka wejścia/wyjścia (Input/Output) import java.io.*; Umożliwia przechowywania danych na nośniku zewnętrznym Dane moga być wysyłane do plików, na drukarkę, do bufora pamięci,

Bardziej szczegółowo

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt JAVA Pliki - zapis i odczyt Opracował: Andrzej Nowak Bibliografia: JAVA Szkoła programowania, D. Trajkowska Ćwiczenia praktyczne JAVA. Wydanie III,M. Lis Strumienie wejścia i wyjścia Strumienie wejścia

Bardziej szczegółowo

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

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego Wątki Wątek - definicja Ciąg instrukcji (podprogram) który może być wykonywane współbieżnie (równolegle) z innymi programami, Wątki działają w ramach tego samego procesu Współdzielą dane (mogą operować

Bardziej szczegółowo

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API Łukasz Przywarty 171018 Wrocław, 17.01.2013 r. Grupa: WT/N 11:15-14:00 Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API Prowadzący: mgr inż. Mariusz Słabicki 1 / 5 1. Treść zadania laboratoryjnego W

Bardziej szczegółowo

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1. Wielowątkowość Programowanie w środowisku rozproszonym. Wykład 1. Informacje organizacyjne Wymiar godzin: W-30, LAB-15 Zaliczenie wykonanie kilku programów i ich zaliczenie (w trakcie zajęć laboratoryjnych)

Bardziej szczegółowo

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

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 6, część 2 Jacek Rumiński 1 Język JAVA podstawy Plan wykładu: 1. Wprowadzenie do operacji wejścia/wyjścia: strumienie 2. Podstawowe klasy strumieni i InputStream/OutputStream

Bardziej szczegółowo

Wykład 2: Podstawy Języka

Wykład 2: Podstawy Języka Wykład 2: Podstawy Języka 1.wprowadzenie 2.podstawy języka 3.sterowanie 4.inicjacja i sprzątanie 5.kontrola dostępu 6.dziedziczenie 7.polimorfizm 8.obsługa błędów 9.kolekcje obiektów 10.wejście i wyjście

Bardziej szczegółowo

Aplikacje internetowe i rozproszone - laboratorium

Aplikacje internetowe i rozproszone - laboratorium Aplikacje internetowe i rozproszone - laboratorium Enterprise JavaBeans (EJB) Celem tego zestawu ćwiczeń jest zapoznanie z technologią EJB w wersji 3.0, a w szczególności: implementacja komponentów sesyjnych,

Bardziej szczegółowo

Programowanie w Internecie. Java

Programowanie w Internecie. Java Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java

Bardziej szczegółowo

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016 Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac

Bardziej szczegółowo

Bezpieczne uruchamianie apletów wg

Bezpieczne uruchamianie apletów wg Bezpieczne uruchamianie apletów wg http://java.sun.com/docs/books/tutorial/security1.2/ Zabezpieczenia przed uruchamianiem apletów na pisanych przez nieznanych autorów 1) ograniczenie możliwości odczytywania,

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

Zadanie 2: transakcyjny protokół SKJ (2015)

Zadanie 2: transakcyjny protokół SKJ (2015) Zadanie 2: transakcyjny protokół SKJ (2015) 1 Wstęp Zadanie polega na zaprojektowaniu niezawodnego protokołu transakcyjnego bazującego na protokole UDP. Protokół ten ma być realizowany przez klasy implementujące

Bardziej szczegółowo

Dokumentacja do API Javy.

Dokumentacja do API Javy. Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu

Bardziej szczegółowo

1 Atrybuty i metody klasowe

1 Atrybuty i metody klasowe 1 Atrybuty i metody klasowe Składowe klasowe (statyczne) Każdy obiekt klasy posiada własny zestaw atrybutów. Metody używają atrybutów odpowiedniego obiektu. Czasem potrzeba atrybutów wspólnych dla wszystkich

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe III. Refleksja Małgorzata Prolejko OBI JA16Z03 Plan Klasa Class. Analiza funkcjonalności klasy. Podstawy obsługi wyjątków. Zastosowanie refleksji do analizy obiektów. Wywoływanie

Bardziej szczegółowo

Tworzenie aplikacji rozproszonej w Sun RPC

Tworzenie aplikacji rozproszonej w Sun RPC Tworzenie aplikacji rozproszonej w Sun RPC Budowa aplikacji realizowana jest w następujących krokach: Tworzenie interfejsu serwera w języku opisu interfejsu RPCGEN Tworzenie: namiastki serwera namiastki

Bardziej szczegółowo

Serwer współbieżny połączeniowy

Serwer współbieżny połączeniowy Serwery współbieżne 1. Serwery współbieżne serwery połączeniowe, usuwanie zakończonych procesów, serwery bezpołączeniowe, 2. Jednoprocesowe serwery współbieżne. koncepcja i implementacja. 1 Serwer współbieżny

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do

Bardziej szczegółowo

76.Struktura oprogramowania rozproszonego.

76.Struktura oprogramowania rozproszonego. 76.Struktura oprogramowania rozproszonego. NajwaŜniejsze aspekty obiektowego programowania rozproszonego to: Współdziałanie (interoperability) modułów programowych na róŝnych maszynach. Wielokrotne wykorzystanie

Bardziej szczegółowo

Strumienie i serializacja

Strumienie i serializacja Strumienie i serializacja Prezentacja dostępna na Syriuszu: http://sirius.cs.put.poznan.pl/~inf80156 Klasy: InputStream, OutputStream, Reader i Writer W Javie hierarchia strumieni oparta jest o cztery

Bardziej szczegółowo

Wykład 7: Pakiety i Interfejsy

Wykład 7: Pakiety i Interfejsy Wykład 7: Pakiety i Interfejsy Plik Źródłowy w Javie Składa się z: instrukcji pakietu (pojedyncza, opcjonalna) instrukcji importujących (wielokrotne, opcjonalne) deklaracji klasy publicznej (pojedyncza,

Bardziej szczegółowo

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

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

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

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1 Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie

Bardziej szczegółowo

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

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej Programowanie obiektowe Interfejsy Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Interfejsy Autor: Paweł Rogaliński Instytut Informatyki,

Bardziej szczegółowo

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

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów

Bardziej szczegółowo

Ćwiczenie 1. Przygotowanie środowiska JAVA

Ćwiczenie 1. Przygotowanie środowiska JAVA Ćwiczenie 1 Przygotowanie środowiska JAVA 1. Wprowadzenie teoretyczne Instalacja JDK (Java Development Kit) NaleŜy pobrać z java.sun.com środowisko i zainstalować je. Następnie naleŝy skonfigurować środowisko.

Bardziej szczegółowo

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW 1. Procedura korzystania ze strumieni danych Aby utworzyć plik: 1) Należy utworzyć obiekt (np. typu FileOutputStream), powiązany ze plikiem danych binarnych (np.

Bardziej szczegółowo

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

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls ) III RPC Zdalne wywoływanie procedur (ang. Remote Procedure Calls ) 1. Koncepcja Aplikacja wywołanie procedury parametry wyniki wykonanie procedury wynik komputer klienta komputer serwera Zaletą takiego

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 11: Serializacja obiektów 5/19/2013 S.Deniziak:Programowanie obiektowe 1 Problem składowania/przesyłania danych Strumienie Tylko typy proste Konieczność ręcznego odtwarzania

Bardziej szczegółowo

Strumienie, pliki. Sortowanie. Wyjątki.

Strumienie, pliki. Sortowanie. Wyjątki. Strumienie, pliki. Sortowanie. Wyjątki. Serializacja Zapisuje całą klasę Plik binarny Delimiter nieokreślony Nie da się podglądać Pliki tekstowe Zapisuje wybrane informacje Plik tekstowy Delimiter ustawiamy

Bardziej szczegółowo

Języki i metody programowania Java. Wykład 2 (część 2)

Języki i metody programowania Java. Wykład 2 (część 2) Języki i metody programowania Java INF302W Wykład 2 (część 2) Autor Dr inż. Zofia Kruczkiewicz 1 Struktura wykładu 1. Identyfikacja danych reprezentowanych przez klasy podczas opracowania koncepcji prostego

Bardziej szczegółowo

Aplikacja Sieciowa wątki po stronie klienta

Aplikacja Sieciowa wątki po stronie klienta Aplikacja Sieciowa wątki po stronie klienta Na ostatnich zajęciach zajmowaliśmy się komunikacją pomiędzy klientem a serwerem. Wynikiem naszej pracy był program klienta, który za pomocą serwera mógł się

Bardziej szczegółowo

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

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

Java. Programowanie Obiektowe Mateusz Cicheński

Java. Programowanie Obiektowe Mateusz Cicheński Java Programowanie Obiektowe Mateusz Cicheński Wielowątkowość Proces a wątek? Thread vs Runnable sleep(), interrupt(), join() Problemy wielowątkowości Obiekty niemodyfikowalne (immutable) Serializacja

Bardziej szczegółowo

Dziedziczenie. Tomasz Borzyszkowski

Dziedziczenie. Tomasz Borzyszkowski Dziedziczenie Tomasz Borzyszkowski Podstawy Zobacz: Dziedzictwo1.java Dziedzictwo2.java Dziedziczenie jest jedną z podstawowych cech OOP ponieważ umożliwia łatwe implementowanie klasyfikacji hierarchicznych.

Bardziej szczegółowo

Wykład 8: Obsługa Wyjątków

Wykład 8: Obsługa Wyjątków Wykład 8: Obsługa Wyjątków Wyjątki Wyjątek to sytuacja nienormalna, która pojawia się w trakcie wykonania programu. W językach bez obsługi wyjątków, błędy są wykrywane i obsługiwane ręcznie, zwykle przez

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo