Server musí obsahovať potomka triedy UnicastRemoteObject
, ktorá
implementuje vzdialene rozhranie. Tato trieda môže nepochybne obsahovať i ďalšie
metódy; klient však môže získať prístup iba k metódam definovaným prostredníctvom
vzdialeného rozhrania. Platí to samozrejme iba vtedy, keď klient prevezme odkaz
iba na rozhranie, nie na triedu, ktorá toto rozhranie implementuje.
Konštruktor vzdialeného objektu musíte definovať explicitne, a to i v prípade,
kedy objekt bude využívať iba implicitný konštruktor odvolávajúci sa na
implicitný konštruktor bazovej triedy. Tento konštruktor definovať musíte, lebo
musí byť schopný vyvolať výnimku RemoteException
.
Pozrime sa na implementáciu vzdialeného rozhrania PerfectTimeI
:
//: c15:rmi:PerfectTime.java
// Implementacia vzdialeneho objektu PerfectTime.
package c15;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.net.*;
public class PerfectTime extends UnicastRemoteObject implements PerfectTimeI {
//implementace rozhrani
public long getPerfectTime()
throws RemoteException {
return System.currentTimeMillis();
}
//Musi implementovat konstruktor ktory bude schopny vyvolat vynimku RemoteExceptions
public PerfectTime() throws RemoteException {
//super(); //volana automaticky
}
//registracia obsluhy RMI. pripadne vynimky budu odoslane na terminal obrazovky
public static void main(String[] args)
throws Exception {
System.setSecurityManager(new RMISecurityManager());
PerfectTime pt = new PerfectTime();
Naming.bind("//perun:2005/PerfectTime", pt);
System.out.println("Pripraveny zobrazit cas");
}
} ///:~
Metoda main()
tu ošetruje všetky podrobnosti nastavenia servera. Ak obsluhujete objekty RMI,
musíte v určitom okamžiku vykonať určité kroky:
java
, je
trieda RMISecurityManager
.PerfectTime
.