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

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

Aplikacje RMI

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

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

Podejście obiektowe do budowy systemów rozproszonych

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

Remote Method Invocation 17 listopada 2010

Aplikacje RMI Lab4

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych

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

Podejście obiektowe do budowy systemów rozproszonych

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

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

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

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

Programowanie rozproszone w języku Java

Java programowanie w sieci. java.net RMI

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

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

Systemy Rozproszone - Ćwiczenie 6

Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni przez sieć - obiekty URL

Wykład 7 Tworzenie łącz w apletach, wątki, serializacja obiektów, gniazda

STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE

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

Bezpieczne uruchamianie apletów wg

Aplikacja wielowątkowa prosty komunikator

Tworzenia aplikacji rozproszonej RMI

Remote Method Invocation

Aplikacja wielow tkowa prosty komunikator

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

Języki i metody programowania Java INF302W Wykład 4

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

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

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

1 Klasa File. 2 Writer. Programowanie w j zyku Java - Adam Krechowicz. Klasa File zapewnia podstawowe operacje na plikach

Platformy Programistyczne Zagadnienia sieciowe i wątki

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

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

Wykład 2. Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni poprzez sieć - obiekty URL

Dokumentacja do API Javy.

Wykład 7: Pakiety i Interfejsy

Programowanie obiektowe

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

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

JAVA I SIECI. MATERIAŁY:

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

Programowanie obiektowe

Tworzenie i wykorzystanie usług

Podstawy i języki programowania

Wykład 4: Klasy i Metody

Programowanie współbieżne i rozproszone

Programowanie obiektowe

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

Strumienie i serializacja

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

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

Programowanie współbieżne i rozproszone

Przykłady interfejsu TCP i UDP w Javie

KLASY, INTERFEJSY, ITP

WSNHiD, Programowanie 2, Lab. 3. Trwałość danych

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

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

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

Programowanie obiektowe

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

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

Wykład 2: Podstawy Języka

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

Java niezbędnik programisty spotkanie nr 11. Importy statyczne, wejście/wyjście, wyrażenia regularne, serializacja

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

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

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

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

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

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

Podstawy otwartych języków programowania Wyjątki i strumienie I/O

Java. Programowanie Obiektowe Mateusz Cicheński

Tworzenie aplikacji rozproszonej w Sun RPC

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

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

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

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Java, bazy danych i SSL

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

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

Wykład 4: Wejście/wyjście: strumienie Java

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

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

Aplikacje internetowe i rozproszone - laboratorium

1 Atrybuty i metody klasowe

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

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

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

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

Programowanie w Internecie. Java

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Transkrypt:

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 celu przypisania ich do zmiennych, przekazania w liście parametrów do metod) innych aplikacji umieszczonych na innych komputerach w sieciach, pracujących pod innymi systemami operacyjnymi i znajdujących się w różnych środowiskach Java tak, jak obiektów lokalnych. 2) RMI realizuje to za pomocą: przesyłania całych obiektów lub ich fragmentów przez odwołanie lub przez wartość za pomocą mechanizmu serializacji za pośrednictwem ściśle zdefiniowanego protokołu z użyciem gniazd bez bezpośredniego uwidaczniania w programie tych mechanizmów. 3) Architektura trójwarstwowa RMI Klient Aplikacja pośrednia odwołań zdalnych transportowa sieć Serwer Aplikacja szkieletowa odwołań zdalnych transportowa warstwa pośrednia (Stub Layer) po stronie klienta i warstwa szkieletowa (Skeleton Layer) po stronie serwera ukrywają zdalne wywołania metod przed klasami i obiektami zdefiniowanymi lokalnie. Obiekt z warstwy pośredniej stanowi odpowiednik lokalny obiektu zdalnego warstwa odwołań zdalnych (Remote Reference Layer) pakuje wywołania metod, parametrów i zwracanych rezultatów w sposób umożliwiający transport w sieci warstwa transportowa (Transport Layer) właściwe połączenie sieciowe systemów za pomocą TCP, UDP, GCP w połączeniu z SSL 4) Mechanizm RMI jest zazwyczaj wykorzystywany w rozwiązaniach typu klient-serwer. Autor: Zofia Kruczkiewicz, Programowanie w Internecie, część 1 1

Procedura tworzenia aplikacji korzystającej z RMI w katalogu np. c:\j2sdk1.4.2_04\jre\lib\security należy w pliku java.policy zmienić następującą linię (która pozwoli uruchomić serwer na lokalnym komputerze) permission java.net.socketpermission "localhost:1024-", "listen"; na permission java.net.socketpermission "localhost:1024-", "listen, accept, connect"; wykonanie pliku policy.txt o zawartości: grant { permission java.security.allpermission; ; utworzenie interfejsu udostępniającego zdalnie obiekty i metody, który: rozszerza interfejs java.rmi.remote np. public interface RMI_Interfejs_Wiadomosc extends Remote deklaruje metody umieszczone w interfejsie, które muszą zgłaszać wyjątek java.rmi.remoteexcetion (throws java.rmi.remoteexception) np. public void zapiszwiadomosc(string s) throws RemoteException; utworzenie klasy implementującej powyższy interfejs, która dziedziczy po klasie java.rmi.unicastremoteobject jest to klasa, której obiekt może być wywołany zdalnie po stronie klienta np. public class RMI_Wiadomosc extends UnicastRemoteObject implements RMI_Interfejs_Wiadomosc Autor: Zofia Kruczkiewicz, Programowanie w Internecie, część 1 2

kompilacja i utworzenie bajtkodu klasy obiektu zdalnego np. RMI_Wiadomosc.class kompilacja za pomocą kompilatora rmic bajtokodu klasy obiektu, który może być wywołany zdalnie np. rmic RMI_Wiadomosc i wykonanie warstw: RMI_Wiadomosc_Stub.class oraz RMI_Wiadomosc_Skel.class umożliwienie połączeń serwera w sieci za pomocą programu rmiregis, który łączy aplikację serwera z siecią i przypisuje ją do odpowiedniego portu (domyślnie 1099), co umożliwia tworzenie połączeń zdalnych (należy przy uruchamianiu tego programu usunąć dostęp do plików RMI_Wiadomosc_Stub.class oraz RMI_Wiadomosc_Skel.class za pomocą zmiennej środowiskowej CLASSPATH) Plik wsadowy RMI.bat wywołujący kompilator rmic oraz rmiregis utworzenie aplikacji serwera, który inicjuje obiekt klasy z poprzedniego kroku i udostępnia go aplikacji klienta: //ładowanie zarządcy RMI System.setSecurityManager(new RMISecurityManager()); //utworzenie obiektu, który może być wywołany zdalnie RMI_Wiadomosc wiadomosc = new RMI_Wiadomosc(); //udostępnienie obiektu zdalnego pod nazwą RMI_Wiadomosc Naming.rebind("RMI_Wiadomosc", wiadomosc); Pierwszy parametr metody rebind dotyczy nazwy obiektu zdalnego wywołanego na lokalnym komputerze i domyślnym porcie o numerze 1099. Pełna nazwa obiektu zdalnego ma postać: rmi://host:port/nazwa_obiektu np. rmi://sprocket.ict.pwr.wroc.pl/java:1250/rmi_wiadomosc czyli Naming.rebind("rmi://sprocket.ict.pwr.wroc.pl/java:1250/RMI_Wiadomosc", wiadomosc); uruchomienie aplikacji serwera z komputera o podanym adresie java.exe" -Djava.rmi.sever.codebase=http://sprocket.ict.pwr.wroc.pl/java RMI_Server Autor: Zofia Kruczkiewicz, Programowanie w Internecie, część 1 3

lub uruchomienie aplikacji serwera z lokalnego komputera i domyślnego portu z usunięciem zabezpieczeń (np. w celu umożliwienia operacji we/wy) java.exe" -Djava.security.policy=policy.txt RMI_Server lub uruchomienie aplikacji serwera z komputera o podanym adresie z usunięciem zabezpieczeń (np. w celu umożliwienia operacji we/wy) java.exe" -Djava.rmi.sever.codebase=http://sprocket.ict.pwr.wroc.pl/java RMI_Server -Djava.security.policy=policy.txt RMI_Server utworzenia aplikacji klienta, która wywołuje zdalnie obiekty udostępnione na serwerze (musi posiadać referencję do obiektu zdalnego np. wiadomosc) np. //ładowanie zarządcy RMI System.setSecurityManager(new RMISecurityManager()); //udostępnienie obiektu zdalnego wiadomosc pod nazwą RMI_Wiadomosc w aplikacji klienta //na lokalnym komputerze i domyślnym porcie 1099 klient.wiadomosc=(rmi_interfejs_wiadomosc) Naming.lookup("RMI_Wiadomosc"); lub //udostępnienie obiektu zdalnego wiadomosc pod nazwą RMI_Wiadomosc z komputera //serwera o podanym adresie i numerze portu, w aplikacji klienta klient.wiadomosc =(RMI_Interfejs_Wiadomosc) Naming.lookup ("rmi://sprocket.ict.pwr.wroc.pl/java:1250/rmi_wiadomosc"); //wywołanie metody zdalnego obiektu wiadomosc klient.wiadomosc.zapiszwiadomosc("... " ); //wykonanie nowego obiektu wiadomosc_nowa z użyciem klasy obiektu zdalnego RMI_Interfejs_Wiadomosc wiadomosc_nowa = (RMI_Interfejs_Wiadomosc)strumienobiektow.readObject(); //wywołanie metody nowego obiektu klasy obiektu zdalnego wiadomosc_nowa.odczytajwiadomosc(s); uruchomienie aplikacji klienta z usunięciem zabezpieczeń (np. w celu umożliwienia operacji we/wy) podobnie jak dla aplikacji serwera java.exe" -Djava.security.policy=policy.txt RMI_ Klient Autor: Zofia Kruczkiewicz, Programowanie w Internecie, część 1 4

Zawartość katalogu aplikacji uruchomionej na lokalnym komputerze i domyślnym porcie 1099 Uruchomienie aplikacji na lokalnym komputerze i domyślnym porcie 1099 1) wykonanie pliku wsadowego RMI.bat Autor: Zofia Kruczkiewicz, Programowanie w Internecie, część 1 5

2) uruchomienie aplikacji serwera na lokalnym komputerze i domyślnym porcie 1099 3) uruchomienie aplikacji klienta na lokalnym komputerze Autor: Zofia Kruczkiewicz, Programowanie w Internecie, część 1 6

Przykład aplikacji wykorzystującej RMI import java.rmi.*; import java.util.*; public interface RMI_Interfejs_Wiadomosc extends Remote { public void zapiszwiadomosc(string s) throws RemoteException; public void odczytajwiadomosc(string s) throws RemoteException; public String westring() throws RemoteException; import java.io.*; import java.rmi.*; import java.rmi.server.*; import java.util.*; public class RMI_Wiadomosc extends UnicastRemoteObject implements RMI_Interfejs_Wiadomosc { String dane; Date data; public RMI_Wiadomosc() throws RemoteException { super(); public String westring() throws RemoteException {InputStreamReader wejscie = new InputStreamReader( System.in ); BufferedReader bufor = new BufferedReader( wejscie ); System.out.print("Podaj wiadomosc: "); { return bufor.readline(); catch (IOException e) { System.err.println("Blad IO String"); return ""; public void zapiszwiadomosc(string s) throws RemoteException { System.out.println(s); data = new Date(); System.out.println(data); dane =westring(); public void odczytajwiadomosc(string s) throws RemoteException { System.out.println(s); System.out.println(data); System.out.println(dane); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, część 1 7

import java.rmi.*; import java.rmi.server.*; public class RMI_Server { public static void main(string[] args) { System.setSecurityManager(new RMISecurityManager()); { RMI_Wiadomosc wiadomosc = new RMI_Wiadomosc(); //udostępnienie obiektu zdalnego na komputerze lokalnym i porcie domyślnym Naming.rebind("RMI_Wiadomosc", wiadomosc); System.out.println("Sewer przygotowany do RMI"); catch (Exception e) { System.out.println("Blad "+e); import java.rmi.*; import java.rmi.server.*; import java.rmi.regis.*; import java.io.*; import java.util.*; public class RMI_Klient { RMI_Interfejs_Wiadomosc wiadomosc; void Zapiszobiektydopliku(String s) throws RemoteException { System.out.println(s); { FileOutputStream plikobiektow = new FileOutputStream ("Wiadomosc.obj"); ObjectOutputStream strumienobiektow = new ObjectOutputStream (plikobiektow); strumienobiektow.writeobject(wiadomosc); strumienobiektow.close(); System.out.println("\nObiekt wiadomosc zostal zapisany do pliku"); catch (Exception e) { System.out.println ("Blad zapisu pliku obiektowego"+e); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, część 1 8

void Odczytajobiektyzpliku(String s) throws RemoteException { { FileInputStream plikobiektow = new FileInputStream ("Wiadomosc.obj"); ObjectInputStream strumienobiektow = new ObjectInputStream (plikobiektow); RMI_Interfejs_Wiadomosc wiadomosc_nowa = (RMI_Interfejs_Wiadomosc) strumienobiektow.readobject(); System.out.println("\nObiekt wiadomosc zostal odczytany z pliku"); if (wiadomosc_nowa!= null) wiadomosc_nowa.odczytajwiadomosc(s); strumienobiektow.close(); catch (Exception e) //obsługa min. wyjątków od throws RemoteException; { System.out.println ("Blad odczytu pliku obiektowego"+e); public static void main(string []args) { RMI_Klient klient = new RMI_Klient(); System.setSecurityManager(new RMISecurityManager()); { klient.wiadomosc= (RMI_Interfejs_Wiadomosc) Naming.lookup("RMI_Wiadomosc"); System.out.println("Klient przygotowany do RMI"); klient.wiadomosc.zapiszwiadomosc( "\nklient uzywa metody zapiszwiadomosc obiektu z serwera za pomoca RMI" ); klient.zapiszobiektydopliku( "\nklient zapisuje do pliku obiekt z serwera dostepny za pomoca RMI" ); klient.wiadomosc.odczytajwiadomosc( "\nklient uzywa metody odczytajwiadomosc obiektu z serwera za pomoca RMI" ); klient.odczytajobiektyzpliku( "\nto zawartosc obiektu odczytana przez klienta z pliku za pomoca serializacji" ); catch (Exception e) { System.out.println(e.getMessage()); //obsługa min. wyjątków od throws RemoteException; Autor: Zofia Kruczkiewicz, Programowanie w Internecie, część 1 9