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

Podobne dokumenty
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 Dariusz Wawrzyniak (IIPP) 1

Remote Method Invocation 17 listopada 2010

Podejście obiektowe do budowy systemów rozproszonych

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

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych

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

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

Aplikacje RMI Lab4

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

Tworzenia aplikacji rozproszonej RMI

Programowanie rozproszone w języku Java

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

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

Systemy Rozproszone - Ćwiczenie 6

Remote Method Invocation

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

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

Java programowanie w sieci. java.net RMI

Wprowadzenie. Dariusz Wawrzyniak 1

Middleware wprowadzenie października 2010

Middleware wprowadzenie października Dariusz Wawrzyniak (IIPP) 1

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

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

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

Programowanie obiektowe

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

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

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

Aplikacje w środowisku Java

Tworzenie i wykorzystanie usług

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

Aplikacja wielowątkowa prosty komunikator

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

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

14. Komunikacja rozproszona gniazdka, RMI

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

Programowanie obiektowe

1 Atrybuty i metody klasowe

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

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.

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Usługa TimerService

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

Programowanie obiektowe

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

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

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

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

Wykład 4: Klasy i Metody

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

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

Enterprise JavaBeans

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

Programowanie współbieżne i rozproszone

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

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

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

Wykład 7: Pakiety i Interfejsy

Metody dostępu do danych

Programowanie komponentowe 5

Aplikacje biznesowe Wykład dla studentów Informatyki Stosowanej

Michał Jankowski. Remoting w.net 2.0

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Stanowe komponenty sesyjne

Aplikacja wielow tkowa prosty komunikator

Systemy Rozproszone Technologia ICE

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

Polimorfizm. dr Jarosław Skaruz

JAVA I BAZY DANYCH. MATERIAŁY:

Dziedziczenie. Tomasz Borzyszkowski

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

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

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Programowanie obiektowe

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1

Aplikacje internetowe i rozproszone - laboratorium

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Multimedia JAVA. Historia

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

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

Zdalne wywoływanie procedur RPC

Zdalne wywoływanie procedur RPC

Programowanie w Internecie. Java

Programowane refleksyjne i serializacja

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

Obiekty w plikach wykonywalnych, marshaling

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

Enterprise JavaBeans (EJB)

Tworzenie aplikacji rozproszonej w Sun RPC

Transkrypt:

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 zdalnych (brak bezpośredniego wsparcie dla tworzenia obiektów rozproszonych) Jedyna forma zdalnego dostępu polega na wywoływaniu metod wyspecyfikowanych w interfejsie wywiedzionym (dziedziczącym) java.rmi.remote Interfejs zdefiniowany jest w języku implementacji Obiekt może implementować wiele interfejsów Ten sam interfejs może być implementowany przez wiele obiektów Interfejs traktowany jest jak typ danych Informacja o typie obiektu (czyli o zdalnym interfejsie) dostępna jest w czasie kompilacji. Wiązanie obiektu jest jawne i odbywa się w czasie wykonania Trwałość obiektu obiekt udostępniany przez UnicastRemoteObject ma charakter przejściowy (istnieje tylko w czasie działania serwera) dostępny jest mechanizm obiektów aktywowalnych, ale brak bezpośredniego wsparcia dla utrwalania stanu obiektu Obiekty mogą być przekazywane przez wartość (kopię) konieczna jest deklaracja implementacji interfejsu java.io.serializable w klasie obiektu. Obiekty zdalne (implementujące interfejs Remote) przekazywane są przez referencję do zdalnej metody przekazywana jest zdalna referencja, za którą udostępniany jest proxy (stub). Brak bezpośredniego wsparcia dla przekazywania parametrów przez kopiowanie i odtwarzanie. Dariusz Wawrzyniak 1

klient serwer java.rmi.remoteobject stub (proxy) szkielet obsługa referencji transport RMI TCP/IP java.rmi.remoteserver java.rmi.unicastremoteobject java.rmi.remote specyfikacja interfejsu zdalnych metod klasa zdalnego obiektu 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 lub użycie statycznej metody exportobject klasy UnicastRemoteObject 2. Kompilacja źródeł (javac, rmic) javac xxx.java xxx.class rmic xxx xxx_stub.class xxx_skel.class zbędne w Java 5 we wczesnych wersjach Javy 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 Dariusz Wawrzyniak 2

Client side Client location method invocation code transfer Server side RMI Registry Server Remote Object registration Komunikacja pomiędzy serwerem (obiektem) a klientem jest określona przez definicję interfejsu pochodnego od interfejsu Remote. Klasa zdalnego obiektu musi implementować ten interfejs import java.rmi.remote; import java.rmi.remoteexception; public interface Compute extends Remote { Object executetask(task t) ; Web Server Web Server Web Server Definicja klasy obiektu: 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(); 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(); 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) {... Jeżeli przekazujemy obiekt przez wartość, to klasa tego obiektu musi implementować interfejs Serializable. Jeśli przekazujemy obiekt przez referencja, to klasa tego obiektu musi implementować interfejs Remote. public interface Task extends java.io.serializable { Object execute(); public class CompArea implements Task { Dariusz Wawrzyniak 3

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 obiektu-rejestru Klasa Naming ułatwia korzystanie z rejestru, umożliwiając jego specyfikację w adresie URL Registry createregistry(int port) Registry createregistry(string host, int port) Registry getregistry(int port) Registry getregistry(string host, int port) Compute void bind(string name, Remote obj) AlreadyBoundException, AccessException void rebind(string name, Remote obj) AccessException void unbind(string name) NotBoundException, AccessException String[] list() AccessException Remote lookup(string name) NotBoundException, AccessException //host:1099/compute void bind(string urlname, Remote obj) AlreadyBoundException, AccessException, MalformedURLException, UnknownHostException void rebind(string urlname, Remote obj) AccessException, MalformedURLException, UnknownHostException void unbind(string urlname) NotBoundException, AccessException, MalformedURLException, UnknownHostException String[] list() AccessException MalformedURLException, UnknownHostException Remote lookup(string urlname) NotBoundException, AccessException, MalformedURLException Obiekt aktywowalny jest to taki obiekt, którego instancja może w danej chwili nie istnieć w żadnej maszynie wirtualnej pomimo istniejącej referencji do niego. W momencie odniesienia do obiektu (czyli wywołania jednej z jego metod) instancja może zostać utworzona w działającej lub specjalnie w tym celu uruchomionej maszynie wirtualnej. Obiekt aktywowalny jest obiektem klasy pochodnej od Activatable (java.rmi.activation) lub obiektem jawnie obsługiwanym na potrzeby aktywacji przez odpowiednie metody statyczne klasy Activatable. Dariusz Wawrzyniak 4

Obiekt aktywowalny może być w stanie: aktywnym jest on eksportowany (udostępniony zdalnie), a jego instancja istnieje w maszynie wirtualnej, pasywnym jego instancja nie istnieje (albo nie jest udostępniona zdalnie), ale może zostać utworzona i wyeksportowana w reakcji na odniesienie do niego. Tworzenie obiektu aktywowalnego: rejestrowanie obiektu w systemie aktywacji, eksportowanie obiektu udostępnienie zdalnym klientom. Uaktywnienie (eksporotowanie) obiektu zdalnego polega na uruchomieniu maszyny wirtualnej, w której następnie tworzona jest instancja tego obiektu. Żeby mechanizm aktywacji mógł zaktywować obiekt, zarówno maszyna wirtualna, jak i sam obiekt muszą być odpowiednio opisane. Opis maszyny wirtualnej związany jest z grupą aktywacji. Instancje obiektów należących do tej samej grupy tworzone są w tej samej maszynie wirtualnej. Deskryptor grupy aktywacji (ActivationGroupDesc) dostarcza informacji niezbędnych do zidentyfikowania lub uruchomienia właściwej maszyny wirtualnej (JVM). Aktywator (np. rmid) nadzoruje aktywację obiektów utrzymuje bazę informacji o obiektach aktywowalnych deskryptory aktywacji (klasa ActivationDesc) identyfikowane przez identyfikatory aktywacji (klasa ActivationID), zarządza maszynami wirtualnymi, w których udostępniane są obiekty. Aktywator funkcjonuje według następujących zasad: działa zawsze podczas pracy systemu, nie aktywuje (reaktywuje) obiektów, które są już aktywne. Deskryptor aktywacji dostarcza aktywatorowi informacji niezbędnych do utworzenia instancji aktywowanego obiektu. Przechowuje on następujące informacje opisujące obiekt: identyfikator grupy aktywacji obiektu nazwa klasy obiektu ścieżka do implementacji obiektu (codebase URL path) dane inicjalizujące (MarshalledObject<?>) Dariusz Wawrzyniak 5

Id. aktyw. zawiera informacje o obiekcie aktywowalnym: zdalną referencję do aktywatora obiektu, unikalny identyfikator obiektu. Identyfikator aktywacji powstaje w wyniku rejestracji obiektu w systemie aktywacji. Rejestracja obiektu w systemie aktywacji odbywa się w jeden z następujących sposobów: przez wywołanie metody Activatable.register, przez użycie odpowiedniego konstruktora klasy Activatable, który rejestruje i eksportuje obiekt, przez wywołanie Activatable.exportObject Dariusz Wawrzyniak 6