Podstatou volania RMI je možnosť ľahkého využívania vzdialených
objektov. Jedinou vecou naviac je to, že v programovom kóde klienta musíte vyhľadať
a načítať vzdialene rozhranie servera. Od tejto chvíle je to už bežné
programovanie v jazyku Java: Odosielanie sprav objektom. Pozrite sa
teraz na program, ktorý využíva objekt PerfectTime
:
//Pouziva vzdialeny objekt PerfectTime.
package c15;
import java.rmi.*;
import java.rmi.registry.*;
public class DisplayPerfectTime {
public static void main(String[] args)
throws Exception {
LocateRegistry.createRegistry(2005);
System.setSecurityManager(new RMISecurityManager());
PerfectTimeI presnyCas = (PerfectTimeI)Naming.lookup("//perun:2005/PerfectTime");
for(int i = 0; i < 10; i++)
System.out.println("PresnyCas = " + presnyCas.GetPerfectTime());
}
}
Reťazec identifikátora je rovnaký ako reťazec ktorý sme použili
pri registrácii objektu pomocou triedy Naming
. Prvá časť označuje adresu URL
a číslo portu. Vzhľadom k tomu, že používame adresu URL, môžete tiež určiť ľubovoľný
počítač v sieti Internet.
Všetko, čo je vrátené metódou Naming.lookup()
, musí byť pretypované na vzdialene
rozhranie, v žiadnom prípade nie na triedu. Keby ste položili triedu,
program by vygeneroval výnimku.
Na príklade nasledujúceho príkazu sa môžete presvedčiť, že akonáhle získate
odkaz na vzdialený objekt nebude sa programovanie ďalšej časti programu od
programovania ľubovoľného miestneho objektu nijako odlišovať(s jedinou výnimkou:
vzdialene metódy môžu vyvolať výnimku typu RemoteException
).
Aj po vykonaní všetkých týchto pokynov nám to nebude fungovať. To môžeme jednoducho vyriešiť.
Stačí pridať súbor s názvom java.policy
a to ako na stranu klienta tak aj na stranu
servera. Ukážka takýchto súborov je na nasledujúcich riadkoch.
grant { permission java.net.SocketPermission "*:1024-65535", "connect,accept"; permission java.net.SocketPermission "*:80", "connect"; };
V nasledujúcom príklade je cesta k triedam len ako príklad. Je potrebné si dať vlastnú cestu k svojim triedam
grant { permission java.net.SocketPermission "*:1024-65535", "connect,accept"; permission java.io.FilePermission "c:\\home\\ann\\public_html\\classes\\-", "read"; permission java.io.FilePermission "c:\\home\\jones\\public_html\\classes\\-", "read"; };
Samotné spustenie programu po vykonaní všetkých hore uvedených inštrukcií je nasledovné:
java -Djava.security.policy=java.policy c15.PerfectTime