160 likes | 309 Views
www.si.pjwstk.edu.pl. Java RMI (Remote Method Invocation). Tomasz Łazarczyk s1538. Plan wykładu. Co to jest RMI? Przykład prostej aplikacji Porównanie RMI z CORBA, DCOM Praca magisterska. Tomasz Łazarczyk s_1538. Co to jest RMI?.
E N D
www.si.pjwstk.edu.pl Java RMI (Remote Method Invocation) Tomasz Łazarczyk s1538
Plan wykładu • Co to jest RMI? • Przykład prostej aplikacji • Porównanie RMI z CORBA, DCOM • Praca magisterska Tomasz Łazarczyk s_1538
Co to jest RMI? RMI(Remote Method Invocation) jest tworem podobnym do RPC (Remote Procedure Calls). Gdy RPC pozwala wywoływać procedury poprzez sieć, RMI wywołuje metody jakiegoś obiektu poprzez sieć. W modelu tym serwer określa obiekty, które mogą być zdalnie wywołane przez klienta. Klient jest w stanie wywołać metodę takiego zdalnego obiektu, tak jak gdyby był on dostępny w przestrzeni tej samej wirtualnej maszyny. RMI ukrywa przed użytkownikiem warstwę komunikacyjną (przesyłanie argumentów metod oraz zwracanych wartości). W Java-RMI argument oraz wartość zwracana może być dowolnego typem prostym lub innym obiektem implementującym interfejs Serializable.
Co to jest RMI? • Procesy, które uczestniczą w RMI: • Klient - proces, który wywołuje zdalnie metodę obiektów serwera • Server - proces, który zarządza zdalnymi obiektami. Zdalny obiekt jest zwykłym obiektem, który znajduje się w przestrzeni adresowej serwera • Rejestr obiektów - umożliwia on odbiorcom uzyskiwanie dostępu do do zarejestrowanych w nim obiektów. Gdy obiekt został zarejestrowany, w celu uzyskania do niego dostępu wystarczy odwołać się po jego nazwie
Przykład prostej aplikacji • Schemat postępowania: • stworzenie serwera • stworzenie klienta • uruchomienie klasy serwera • uruchomienie klasy klienta
Przykład prostej aplikacji - serwer Implementacja serwera - kroki postępowania: 1. Zaprojektowanie interfejsu 2. Implementacja interfejsu 3. Zaprojektowanie aplikacji uruchamiającej serwer 4. Utworzenie pliku polityki (policy file) 5. Skompilowanie klas, uruchomienie rejestru RMI oraz serwera
Przykład prostej aplikacji - serwer 1. Zaprojektowanie interfejsu - HelloWorld.java import java.util.*; import java.rmi.*; public interface HelloWorld extends java.rmi.Remote { public String sayHello()throws RemoteException; }
Przykład prostej aplikacji - serwer 2. Implementacja interfejsu - HelloWorldImpl.java import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class HelloWorldImplextends UnicastRemoteObject implements HelloWorld { public HelloWorldImpl( String name ) throws RemoteException { try { Naming.rebind( name, this );} catch( Exception e ) { System.out.println( e ); } } public String sayHello() { return “Hello World!!!”; }
Przykład prostej aplikacji - serwer 3. Zaprojektowanie aplikacji uruchamiającej serwer - HelloWorldServer.java import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class HelloWorldServer { public static void main(String[] args) throws Exception { if(System.getSecurityManager() == null) { System.setSecurityManager( new RMISecurityManager() ); } HelloWorldImpl myObject = new HelloWorldImpl( ”HELLO" ); System.out.println( "RMI HelloWorld ready..." ); } }
Przykład prostej aplikacji - serwer 4. Utworzenie pliku polityki (policy file) - policy.all policy.all grant { permission java.security.AllPermission "", ""; }; 5. Skompilowanie klas, uruchomienie rejestru RMI oraz serwera E:\HelloWorld> javac *.javaE:\HelloWorld> rmic HelloWorldImplE:\HelloWorld> start rmiregistryE:\HelloWorld> java -Djava.security.policy=policy.all HelloWorldServer RMI HelloWorldServer ready...
Przykład prostej aplikacji - klient Implementacja klienta - kroki postępowania: 1. Implementacja klienta 2. Utworzenie pliku polityki (policy file) 3. Skompilowanie klasy, uruchomienie klienta
Przykład prostej aplikacji - klient 1. Implementacja klienta - HelloWorldClient.java import java.rmi.*; import java.rmi.registry.*; public class HelloWorldClient { public static void main(String[] args) { try { if(System.getSecurityManager() == null) { System.setSecurityManager( new RMISecurityManager() ); } HelloWorld hello = (HelloWorld)Naming.lookup("rmi://localhost/HELLO");System.out.println(hello.sayHello()); } catch( Exception e ) { System.out.println( e ); } } }
Przykład prostej aplikacji - klient 2. Utworzenie pliku polityki (policy file) - policy.all policy.all grant { permission java.security.AllPermission "", ""; }; 3. Skompilowanie klasy, uruchomienie klienta E:\HelloWorld> javac *.javaE:\HelloWorld> java -Djava.security.policy=policy.all HelloWorldClient Hello World!!!
Porównanie RMI z CORBA, DCOM • Java-RMI jest silnie powiązane z językiem Java. Nie występuje tutaj przekształcanie interfejsów na IDL, po to wywołać zdalnie metodę. To odróżnia RMI od DCOM czy CORBA,gdzie takie przekształcenie jest niezbędne. • Ze względu na silnie powiązanie z językiem Java-RMI potrafi współdziałać z klasami dziedziczącymi. Nie potrafi tego ani DCOM ani CORBI, ponieważ są to podejścia typowo statyczne . • To implikuje fakt, że parametry przesyłane podczas wołania metod pomiędzy wirtualnymi maszynami mogą być zwykłymi obiektami Javy. Niemożliwe w DCOM CORBA. • Ponadto Java-RMI wspiera Distributed Garbage Collection, który rodziela się na lokalne Garbage Collectory w każdej z maszyn wirtualnych
Porównanie RMI z CORBA, DCOM DCOM - HelloWorldLib.idl[uuid(7371a240-2e51-11d0-b4c1-444553540000),version(1.0)]library HelloWorldl{importlib("stdole32.tlb");[uuid(BC4C0AB0-5A45-11d2-99C5-00A02414C655),dual]interfaceIHelloWorld : IDispatch{HRESULTsayHello ([out, retval] char*);}[uuid(BC4C0AB3-5A45-11d2-99C5-00A02414C655),]coclassHelloWorld{interfaceIHelloWorld;};}; CORBA - HelloWorld.idl interface HelloWorld{ string sayHello();};}; JAVA - HelloWorld.java import java.rmi.*;import java.util.*;public interface HelloWorld extends java.rmi.Remote{ public String sayHello() throws RemoteException;}
Praca magisterska Temat pracy magisterskiej: Bill Of Material - baza danych na zdalnym komputerze (dostęp przez RMI, a następnie JDBC)