Wywoływanie metod zdalnych

Podobne dokumenty
Wywoływanie metod zdalnych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Remote Method Invocation 17 listopada 2010

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ć

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

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

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

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

Aplikacje RMI

Wprowadzenie. Dariusz Wawrzyniak 1

Aplikacje RMI Lab4

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

Tworzenia aplikacji rozproszonej RMI

Middleware wprowadzenie października 2010

Middleware wprowadzenie października Dariusz Wawrzyniak (IIPP) 1

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

Systemy Rozproszone - Ćwiczenie 6

Remote Method Invocation

Programowanie rozproszone w języku Java

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

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

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

Middleware wprowadzenie października Dariusz Wawrzyniak. Instytut Informatyki ul. Piotrowo 2 (CW, pok. 5)

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

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

Java programowanie w sieci. java.net RMI

Programowanie współbieżne i rozproszone

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

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

Programowanie obiektowe

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

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

Tworzenie aplikacji rozproszonej w Sun RPC

Systemy Rozproszone Technologia ICE

Aplikacja wielowątkowa prosty komunikator

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Programowanie obiektowe

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

76.Struktura oprogramowania rozproszonego.

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

Interfejs IUnknown. Każdy obiekt COM musi implementować interfejs IUnknown, który zawiera trzy metody:

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

Programowanie obiektowe

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

Plan prezentacji. Budowa aplikacji w technologii Enterprise JavaBeans. Przegląd architektur: CORBA. Cele budowy aplikacji rozproszonych

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

Wywoływanie procedur zdalnych

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

public interface TravelAgent { public void makereservation(int cruiseid, int cabinid, int customerid, double price); }

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

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Aplikacje internetowe i rozproszone - laboratorium

Programowanie obiektowe

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

Aplikacje w środowisku Java

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Tworzenie i wykorzystanie usług

Wywoływanie procedur zdalnych

JAVA W SUPER EXPRESOWEJ PIGUŁCE

14. Komunikacja rozproszona gniazdka, RMI

Wykład 7: Pakiety i Interfejsy

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

Programowanie obiektowe

AXIS2 - tworzenie usługi sieciowej i klienta Axis Data Binding. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Wywoływanie procedur zdalnych

1 Atrybuty i metody klasowe

Wykład 4: Klasy i Metody

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Podstawy programowania obiektowego

Java JMX. Marcin Werla. Monitorowanie i zarządzanie usługami sieciowymi w Javie. mwerla@man.poznan.pl PCSS/Poznań JUG

Programowanie obiektowe

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Dokumentacja do API Javy.

AKADEMIA GÓRNICZO-HUTNICZA Wydział Elektrotechniki, Automatyki, Elektroniki i Informatyki

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

Programowanie komponentowe 5

Aplikacje biznesowe Wykład dla studentów Informatyki Stosowanej

Aplikacja wielow tkowa prosty komunikator

Podstawy Programowania Obiektowego

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

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Rozdział 4 KLASY, OBIEKTY, METODY

Polimorfizm, metody wirtualne i klasy abstrakcyjne

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

Enterprise JavaBeans

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1

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

Programowanie obiektowe

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Klasy abstrakcyjne i interfejsy

Java: interfejsy i klasy wewnętrzne

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Zdalne wywoływanie procedur RPC

Zdalne wywoływanie procedur RPC

Usługa TimerService

Transkrypt:

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 obiektowego jest jednostką integrującą w sobie dane (stan ) oraz odpowiednio zdefiniowane operacje (metody) Jedyna forma dostępu do danych polega na wywoływaniu metod wyspecyfikowanych w publicznym interfejsie może implementować wiele interfejsów Ten sam interfejs może być implementowany przez wiele obiektów Podejście obiektowe do budowy systemów rozproszonych Kluczowe dla mechanizmu wywoływania metod zdalnych jest oddzielenie definicji interfejsu (specyfikacji) od jego implementacji w obiekcie W językach definicji interfejsu (IDL) interfejs traktowany jest jak typ danych W języku implementacji każdy obiekt implementujący dany interfejs jest instancją tego typu Specyfikacja interfejsu Opis interfejsu w języku implementacji (np. Ada, Java RMI) Opis interfejsu w języku specjalnym, niezależnym od implementacji (CORBA IDL, Sun RPC rpcgen) Przykład opisu interfejsu w podejściu obiektowym (CORBA IDL) interface Konto { float stan(); float wplac(in float value); float pobierz(in float value); ; interface Bank { Konto otworzkonto(in int numer); float zamknijkonto(in Konto k); ;

Klasyfikacja obiektów ze względu na sposób implementacji zdalny (ang. remote object) stan utrzymywany jest przez jeden serwer (wszystkie dane znajdują się na jednym serwerze) rozproszony (ang. distributed object) stan przechowywany jest przez więcej niż jeden serwer (poszczególne serwery przechowują odpowiednie dane, stanowiące fragmenty tego samego ) Z punktu widzenie klienta zarówno obiekt zdalny jak i obiekt rozproszony stanowi pewną całość odpowiednio identyfikowaną Klasyfikacja ze względu na dostępność informacji o obiektach dostępny w czasie kompilacji (ang. compile-time object) informacja o obiekcie (jego typ) znana jest i dostępna w odpowiedniej formie w programie klienta na etapie tworzenia oprogramowania dostępny w czasie wykonania (ang. runtime object) informacja o obiekcie dostępna jest dopiero w czasie działania aplikacji Klasyfikacja ze względu na trwałość trwały (ang. persistent object) obiekt istnieje nawet wówczas, gdy nie ma serwera, w przestrzeni adresowej którego mógłby być przechowywany stan tego przejściowy (ang. transient object) obiekt istnieje tak długo, jak długo działa serwer utrzymujący jego stan Referencja do Referencja jest identyfikatorem, wykorzystywanym do wskazania, na którym ma zostać wykonana operacja W celu wywołania metody rezydującego na innej maszynie potrzebna jest zdalna referencja Referencja może być przekazywana jako parametr wywołania metody lub zwrócona jako wynik wykonania metody Implementacja zdalnej referencji Dowiązanie Referencja jest wartością, której struktura wewnętrzna nie jest w żaden sposób interpretowana przez aplikację Zdalna referencja musi zawierać wystarczająco dużo informacji, żeby dowiązać obiekt w programie klienta Dowiązanie oznacza uzyskanie informacji, niezbędnej do wywołania metody (uzyskanie proxy) Dowiązanie jawne (ang. explicit binding) dowiązanie wymaga wywołania odpowiedniej funkcji (np. bind), po którym może dopiero nastąpić wywołanie metody Dowiązanie domyślne (ang. implicit binding) wywołanie metody za pośrednictwem referencji skutkuje ustanowieniem dowiązanie do w procesie klienta

Wywoływanie metod Statyczne wywoływanie metod wywołanie metody za pośrednictwem proxy, wygenerowanego na podstawie definicji interfejsu Dynamiczne wywoływanie metod skomponowanie informacji niezbędnych do wywołania w czasie działania systemu, np.: invoke(ref_obj, id_metody, param_wej, param_wyj); Przekazywanie obiektów jako parametrów Przekazywanie przez wartość do zdalnej metody przekazywana jest kopia, który jest parametrem rzeczywistym wywołania. Przekazywanie przez referencję (zmienną) do zdalnej metody przekazywana jest referencja (zdalna) do, który jest parametrem rzeczywistym. Przekazywanie przez kopiowanie i odtwarzanie do zdalnej metody przekazywana jest kopia, a po zakończeniu zdalnej metody następuje aktualizacja po stronie wywołania, stosownie do zmian dokonanych w ramach wykonania metody. Przekazywanie przez wartość przykład w Java RMI Przekazywanie przez referencję przykład w Java RMI method invocation Proxy class... implements java.io.serializable { class... implements java.rmi.remote { ( ) throws java.rmi.remoteexception { Przekazywanie przez kopiowanie i odtwarzanie Tworzenia aplikacji rozproszonej w środowisku Java RMI (1) 1. Zdefiniowanie i implementacja odpowiednich klas (w szczególności klas dla obiektów dostępnych zdalnie) zdefiniowanie interfejsu pochodnego od Remote zdefiniowanie klasy wywiedzionej z klasy java.rmi.server.unicastremoteobject, implementującej interfejs pochodny od Remote 2. Kompilacja źródeł (javac, rmic) javac xxx.java xxx.class rmic xxx xxx_stub.class xxx_skel.class

Tworzenia aplikacji rozproszonej w środowisku Java RMI (1) Komunikacja między klientem a serwerem 3. Udostępnienie wygenerowanego kodu klas wspólny system plików kopia kodów klas w różnych systemach plików udostępnianie kodu przez serwer www 4. Uruchomienie aplikacji uruchomienie rmiregistry (name server) uruchomienie serwera: utworzenie zdalnych obiektów i ich rejestracja w rmiregistry uruchomienie klienta: zlokalizowanie zdalnych obiektów (odwołanie do rmiregistry) i wywoływanie zdalnych metod Client side location Client method invocation code transfer Server side RMI Registry registration Server Remote Object Interfejs java.rmi.remote Komunikacja pomiędzy serwerem (obiektem) a klientem jest określona przez definicję interfejsu pochodnego od interfejsu Remote. Klasa zdalnego musi implementować ten interfejs import java.rmi.remote; import java.rmi.remoteexception; public interface Compute extends Remote { Object executetask(task t) ; Zdalne udostępnianie (serwer) Definicja klasy : import java.rmi.*; import java.rmi.server.*; import compute.*; public class ComputeEngine extends UnicastRemoteObject implements Compute { public ComputeEngine() { super(); public Object executetask(task t) { return t.execute(); Utworzenie i rejestracja zdalnego public void main(string[] args) { if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); String name = "//host:1099/compute"; try { Compute engine = new ComputeEngine(); Naming.rebind(name, engine); System.out.println("ComputeEngine ok"); catch (Exception e) { System.err.println("ComputeEngine excep." + e.getmessage()); e.printstacktrace(); Zdalne wywoływanie metod import java.rmi.*; public class launchcomp { public void main(string args[]) { if (System.getSecurityManager() == null){ System.setSecurityManager( new RMISecurityManager()); try { String name = "//"+args[0]+"/compute"; Compute comp = (Compute) Naming.lookup(name); CompArea task = new CompArea(...); BigDecimal arae = (BigDecimal) (comp.executetask(task)); System.out.println(area); catch (Exception e) {...

Przekazywanie parametrów Lokalizowanie zdalnych obiektów Jeżeli przekazujemy obiekt przez wartość, to klasa tego musi implementować interfejs Serializable. Jeśli przekazujemy obiekt przez referencja, to klasa tego musi implementować interfejs Remote. public interface Task extends java.io.serializable { Object execute(); Rejestr wiąże z nazwami i udostępnia zdalne obiekty Tworzenie rejestru rmiregistry [<port number>] Klasa LocateRegistry umożliwia tworzenie rejestru (obiekty klasy Registry) Klasa Registry klasa -rejestru Klasa Naming ułatwia korzystanie z rejestru, umożliwiając jego specyfikację w adresie URL public class CompArea implements Task { Klasa LocateRegistry Klasa Registry Registry createregistry(int port) Registry createregistry(string host, int port) Registry getregistry(int port) Registry getregistry(string host, int port) void bind(string name, Remote obj), AlreadyBoundException, AccessException void rebind(string name, Remote obj), AccessException void unbind(string name) Compute, NotBoundException, AccessException String[] list(), AccessException Remote lookup(string name), NotBoundException, AccessException Klasa Naming (1) Klasa Naming (2) void bind(string urlname, Remote obj), AlreadyBoundException, AccessException, void rebind(string urlname, Remote obj), AccessException, //host:1099/compute void unbind(string urlname), NotBoundException, AccessException, MalformedURLException, UnknownHostException String[] list(), AccessException Remote lookup(string urlname), NotBoundException, AccessException, MalformedURLException