Používanie vzdialeného objektu

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).

Dôležité informácie

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

Späť