Upload
lynsey
View
58
Download
0
Embed Size (px)
DESCRIPTION
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?. - PowerPoint PPT Presentation
Citation preview
Java RMI (Remote Method Invocation)
Tomasz Łazarczyk s1538
www.si.pjwstk.edu.pl
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.javaimport 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 HelloWorldImpl extends 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!!!”;
}
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 serweraE:\HelloWorld> javac *.javaE:\HelloWorld> rmic HelloWorldImplE:\HelloWorld> start rmiregistryE:\HelloWorld> java -Djava.security.policy=policy.all HelloWorldServer
RMI HelloWorldServer ready...
Przykład prostej aplikacji - serwer
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 ); } }
}
2. Utworzenie pliku polityki (policy file) - policy.all
policy.all grant { permission java.security.AllPermission "", ""; };
3. Skompilowanie klasy, uruchomienie klientaE:\HelloWorld> javac *.javaE:\HelloWorld> java -Djava.security.policy=policy.all HelloWorldClient
Hello World!!!
Przykład prostej aplikacji - klient
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]interface IHelloWorld : IDispatch{HRESULT sayHello ([out, retval] char*);}
[uuid(BC4C0AB3-5A45-11d2-99C5-00A02414C655),]coclass HelloWorld{interface IHelloWorld;};};
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)