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