Laboratorium Java – RMI (model UnicastRemoteObject) [2h
Transkrypt
Laboratorium Java – RMI (model UnicastRemoteObject) [2h
Laboratorium Java – RMI (model UnicastRemoteObject) [2h] Odległy interfejs (PerfectTimeI.java): – specyfikuje metody udostępniane przez aplikację serwera import java.rmi.*; public interface PerfectTimeI extends Remote { long getPerfectTime() throws RemoteException; } Klasa Serwera (PerfectTime.java): – implementuje odległy interfejs – instaluje menadżera bezpieczeństwa obsługującego RMI – tworzy egzemplarz odległego obiektu i rejestruje go w serwisie RMI import import import import java.rmi.*; java.rmi.server.*; java.rmi.registry.*; java.net.*; public class PerfectTime extends UnicastRemoteObject implements PerfectTimeI { //implementacja interfejsu public long getPerfectTime() throws RemoteException { return System.currentTimeMillis(); } //konstruktor wyrzucajacy wyjatek public PerfectTime() throws RemoteException { //super(); //wywolywane automatycznie } //rejestracja serwisu RMI public static void main(String[] args) throws Exception { System.setSecurityManager(new RMISecurityManager()); PerfectTime pt = new PerfectTime(); Naming.bind("//peppy:2005/PerfectTime", pt); System.out.println("Ready to do time"); } } Klasa Klienta (DisplayPerfectTime.java): – instaluje menadżera bezpieczeństwa obsługującego RMI – odszukuje i pozyskuje odległy interfejs z serwera import java.rmi.*; import java.rmi.registry.*; public class DisplayPerfectTime { public static void main(String[] args) throws Exception { System.setSecurityManager(new RMISecurityManager()); PerfectTimeI t = (PerfectTimeI) Naming.lookup("//peppy:2005/PerfectTime"); for (int i = 0; i < 10; i++) System.out.println("Perfect time = " + t.getPerfectTime()); } } Laboratorium Java – RMI/URO (Opracowanie: Konrad Kurczyna) 1/2 Uruchamianie: 1. Serwer: – kompilacja źródeł javac *.java – budowanie namiastki (stub) i szkieletu (skeleton) rmic PerfectTime – uruchomienie brokera RMI rmiregistry 2005 – rejestrowanie usługi w rejestrze RMI java -Djava.security.policy=test.policy PerfectTime 2. Klient: – uruchamianie java -Djava.security.policy=test.policy DisplayPerfectTime – specyfikacja położenia plików java -Djava.rmi.server.codebase=http://host/classes/ ... Plik test.policy: – zawiera listę przywilejów dla programu – przykład pliku zezwalającego na wszelkie operacje grant { permission java.security.AllPermission; }; Zadanie: – zapoznać się z dokumentacja JavaAPI – wykonać aplikację kalkulatora realizującego podstawowe operacje matematyczne – (opcjonalnie) utworzyć archiwa jar dla: • serwera – bez namiastek (stub) • klienta – bez szkieletów (skeleton) i klas zdalnych (remote) Laboratorium Java – RMI/URO (Opracowanie: Konrad Kurczyna) 2/2