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

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

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada 2010

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

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

Remote Method Invocation

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

Podejście obiektowe do budowy systemów rozproszonych

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

Wywoływanie metod zdalnych

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

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

Aplikacje RMI Lab4

Aplikacja wielowątkowa prosty komunikator

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

Wywoływanie metod zdalnych

Aplikacje RMI

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

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

Aplikacja wielow tkowa prosty komunikator

Java, bazy danych i SSL

Programowanie rozproszone w języku Java

Platformy Programistyczne Zagadnienia sieciowe i wątki

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

JAVA I SIECI. MATERIAŁY:

Systemy Rozproszone - Ćwiczenie 6

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

Java programowanie w sieci. java.net RMI

1. Co można powiedzieć o poniższym kodzie (zakładając, że znajduje się on w jednym pliku A.java)?

Tworzenie i wykorzystanie usług

1. Co można powiedzieć o poniższym kodzie? public class A { void m(int a) { } int m(string s) { return Integer.parseInt(s); }

Programowanie obiektowe

Bezpieczne uruchamianie apletów wg

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

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

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

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

Strumienie i serializacja

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

package pakieta; import pakietb.b; package pakietb; public class B { B(){} public class A { private B b; A(B b) { this.b = b; } }

Przykłady interfejsu TCP i UDP w Javie

Java. Programowanie Obiektowe Mateusz Cicheński

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

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

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

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

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

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

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

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

Tworzenia aplikacji rozproszonej RMI

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

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

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

Programowanie obiektowe

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Programowane refleksyjne i serializacja

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

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

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);

Programowanie w języku Java

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

Programowanie obiektowe

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

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

Podstawy i języki programowania

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

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

Serwer współbieżny połączeniowy

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

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Programowanie współbieżne Laboratorium nr 11

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

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

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

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

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

Programowanie aplikacji w architekturze Klient-Serwer - UDP

Stanowe komponenty sesyjne

Dokumentacja do API Javy.

Wykład 7: Pakiety i Interfejsy

Komunikacja z użyciem gniazd aplikacje klient-serwer

Programowanie współbieżne i rozproszone

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

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

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

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Zaawansowane aplikacje WWW - laboratorium

Ćwiczenie 9 - Zaawansowane metody programowania w sieci komputerowej

Wykład 2: Podstawy Języka

Komponenty sterowane komunikatami

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

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

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

Aplikacje internetowe i rozproszone - laboratorium

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

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

1 Atrybuty i metody klasowe

Transkrypt:

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 tych gniazd dla klienta i serwera RMI ustawianie parametrów gniazd kontrola wywołań metod zdalnych kontrola połączeń z klientami szyfrowanie i kompresja danych implementacja ServerSocket i Socket implementacja RMIClientSocketFactory implementacja RMIServerSocketFactory

1) Zdefiniowanie gniazd i związanych z nimi strumieni wejścia/wyjścia, które pozwalają na szyfrowanie i deszyfrowanie danych XorInputStream.java XorOutputStream.java XorServerSocket.java XorSocket.java

2) Wykonanie fabryki gniazd typu ServerSocket i Socket Implementacja XorClientSocketFactory Implementacja XorServerSocketFactory

package examples.rmisocfac; import java.io.*; import java.net.*; import java.rmi.server.*; public class XorClientSocketFactory implements RMIClientSocketFactory, Serializable { private final byte pattern; public XorClientSocketFactory(byte pattern_) { pattern=pattern_; public Socket createsocket(string host, int port) throws IOException { return new XorSocket(host, port, pattern); public int hashcode() {return (int) pattern; public boolean equals(object obj) { return (getclass() == obj.getclass() && pattern == ((XorClientSocketFactory) obj).pattern);

package examples.rmisocfac; import java.io.*; import java.net.*; import java.rmi.server.*; public class XorServerSocketFactory implements RMIServerSocketFactory { private byte pattern; public XorServerSocketFactory(byte pattern) { this.pattern = pattern; public ServerSocket createserversocket(int port) throws IOException { return new XorServerSocket(port, pattern); public int hashcode() { return (int) pattern; public boolean equals(object obj) { return (getclass() == obj.getclass() && pattern == ((XorServerSocketFactory) obj).pattern);

II. Zastosowanie gniazd w aplikacjach RMI Wykonanie interfejsu obiektu zdalnego oraz jego implementacji Wykonanie aplikacji serwera, który tworzy obiekt zdalny, którego referencję zostawia w rejestrze RMI Wykonanie aplikacji klienta, który po otrzymaniu referencji do obiektu zdalnego otrzymuje gniazdo do komunikacji z przydzielonym gniazdem po stronie serwera, zawierającego obiekt zdalny

Interfejs obiektu zdalnego package examples.rmisocfac; import java.util.*; import java.rmi.*; public interface RMI_Interfejs_Wiadomosc extends Remote { public void zapiszwiadomosc(string s) throws RemoteException; public Date odczytajwiadomosc(string s) throws RemoteException; public String westring() throws RemoteException;

Implementacja obiektu zdalnego package examples.rmisocfac; import java.io.*; import java.util.*; import java.rmi.*; import java.rmi.server.*; import java.rmi.registry.*; public class RMI_Wiadomosc implements RMI_Interfejs_Wiadomosc { String dane; Date data;

public void zapiszwiadomosc(string s) throws RemoteException { System.out.println(s); data = new Date(); System.out.println(data); dane =westring(); public Date odczytajwiadomosc(string s) throws RemoteException { System.out.println(s); System.out.println(data); System.out.println(dane); return new Date();

public String westring() throws RemoteException { InputStreamReader wejscie = new InputStreamReader( System.in ); BufferedReader bufor = new BufferedReader( wejscie ); System.out.print("Podaj wiadomosc: "); try { return bufor.readline(); catch (IOException e) { System.err.println("Blad IO String"); return "";

package examples.rmisocfac; import java.io.*; import java.rmi.*; import java.rmi.server.*; import java.rmi.registry.*; Aplikacja serwera public class RMI_Server { public static void main(string[] args) { System.setSecurityManager(new RMISecurityManager()); try { byte pattern = (byte) 0xAC; RMIClientSocketFactory RMIcsf= new XorClientSocketFactory(pattern); RMIServerSocketFactory RMIssf = new XorServerSocketFactory(pattern); RMI_Wiadomosc wiadomosc = new RMI_Wiadomosc();

RMI_Interfejs_Wiadomosc stub = (RMI_Interfejs_Wiadomosc) UnicastRemoteObject.exportObject( wiadomosc, 0, RMIcsf, RMIssf); /Utworzenie rejestru i zrejestrowanie referencji do zdalnego obiektu. LocateRegistry.createRegistry(5002); Registry registry = LocateRegistry.getRegistry(5002); registry.rebind("rmi_wiadomosc", stub); System.out.println("Sewer przygotowany do RMI"); catch (Exception e) { System.out.println("Blad serwera RMI"+e.getMessage()); e.printstacktrace();

Aplikacja klienta package examples.rmisocfac; import java.rmi.*; import java.rmi.registry.*; import java.io.*; import java.util.*; public class RMI_Klient implements Runnable { RMI_Interfejs_Wiadomosc wiadomosc;

void Zapiszobiektydopliku(String s) throws RemoteException {System.out.println(s); try { 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);

void Odczytajobiektyzpliku(String s)throws RemoteException { try { 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) { System.out.println ("Blad odczytu pliku obiektowego"+e);

public void run() { System.setSecurityManager(new RMISecurityManager()); try { Registry registry = LocateRegistry.getRegistry(5002); wiadomosc = (RMI_Interfejs_Wiadomosc) registry.lookup("rmi_wiadomosc"); System.out.println("Klient przygotowany do RMI"); wiadomosc.zapiszwiadomosc( "\nklient uzywa metody zapiszwiadomosc obiektu z serwera za pomoca RMI"); Date data = wiadomosc.odczytajwiadomosc( "\nklient uzywa metody odczytajwiadomosc obiektu z serwera za pomoca RMI" ); System.out.println("Data otrzymana z serwera: "+data); Zapiszobiektydopliku( "\nklient zapisuje do pliku obiekt z serwera dostepny za pomoca RMI"); Odczytajobiektyzpliku( "\nto zawartosc obiektu odczytana przez klienta z pliku za pomoca serializacji");

catch (Exception e) { System.out.println("Blad klienta RMI: " +e.getmessage()); e.printstacktrace(); public static void main(string []args) { RMI_Klient klient = new RMI_Klient(); Thread t= new Thread(klient); t.start();

III. Uruchomienie aplikacji RMI Kompilacja obiektu zdalnego, aplikacji serwera i klienta oraz systemu fabryki gniazd Kompilacja i utworzenie architektury RMI dla obiektu zdalnego za pomocą kompilatora rmic Przygotowanie systemu bezpieczeństwa java.policy do obsługi RMI Uruchomienie serwera z określeniem uprawnień za pomocą pliku policy.txt Uruchomienie aplikacji klienta z określeniem uprawnień za pomocą pliku policy.txt

Pliki wsadowe do uruchamiania poszczególnych części systemu RMI

Określenie warunków bezpieczeństwa działania aplikacji RMI

Przygotowanie systemowego pliku java.policy