[ Pobierz całość w formacie PDF ]

implementacji metody lookup(), np. w klasie java.rmi.Naming:
Object o = Naming.lookup( rmi://medvis.eti.pg.gda.pl/srednia ),
Object o = Naming.lookup( rmi://medvis.eti.pg.gda.pl/srednia ),
gdzie:
rmi  to nazwa protokołu komunikacji,
medvis.eti.pg.gda.pl - adres serwera na którym pracuje rejestr,
srednia - nazwa przywiÄ…zana do obiektu zdalnego przez serwer.
8-38
Jacek Rumiński - Język JAVA 
Jacek Rumiński - Język JAVA  Rozdział 8
Jacek Rumiński - Język JAVA 
Jacek Rumiński - Język JAVA 
Uzyskiwana w ten sposób zdalna referencja (stub) wskazuje na obiekt klasy Object,
którego typ trzeba rzutować na typ danego interfejsu obiektu zdalnego:
Srednia s = (Srednia) o;
Srednia s = (Srednia) o;
lub razem:
Srednia s = (Srednia) Naming.lookup( rmi://medvis.eti.pg.gda.pl/srednia ).
Srednia s = (Srednia) Naming.lookup( rmi://medvis.eti.pg.gda.pl/srednia ).
Uzyskując w ten sposób referencję obiektu zdalnego można wywołać zdefiniowaną
metodę zdalną. Przykładowy program klienta przedstawiono poniżej:
Przykład 8.19:
//SredniaKlient.java:
import java.rmi.*;
import java.util.*;
public class SredniaKlient{
public static void main(String args[]){
if (System.getSecurityManager()==null)
System.setSecurityManager(new RMISecurityManager());
try{
Random r = new Random();
int n = r.nextInt(50);
Srednia s = (Srednia) Naming.lookup("rmi://medvis.eti.pg.gda.pl/srednia");
Double d = s.policzSrednia(n);
System.out.println("Srednia z kolejnych"+ n+" wartości wynosi: "+d);
}catch (Exception e){
System.out.println("Wystąpił wyjątek: "+ e);
}
}
}// koniec public class SredniaKlient
Na początku metody głównej aplikacji klienta zawarto test wykrywający działanie
systemu zarządzania bezpieczeństwem platformy Javy. Działanie systemu
bezpieczeństwa jest tu konieczne ze względu na określenie możliwości działania
ładowanego przez klienta kodu. Wszystkie programy używające RMI muszą używać
systemu zarządzania bezpieczeństwem inaczej protokół RMI nie przekopiuje
wymaganych klas z serwera. Dla RMI stworzono oddzielnÄ… klasÄ™ systemu
zarządzania bezpieczeństwem, która prawie w całości jest identyczna z klasą
SecurityManager zmieniajÄ…c definicjÄ™ tylko jednej z metod checkPackageAccess().
Tak przygotowany kod należy skompilować:
javac  g SredniaKlient.java
javac  g SredniaKlient.java
8-39
Jacek Rumiński - Język JAVA 
Jacek Rumiński - Język JAVA  Rozdział 8
Jacek Rumiński - Język JAVA 
Jacek Rumiński - Język JAVA 
8.4.5 Uruchamianie systemu.
Zanim będzie można skorzystać z klienta należy uruchomić rejestr. W tym celu
należy wywołać program rmiregistry bez numeru portu, ponieważ w rozpatrywanych
przykładach przyjęty został port domyślny (1099). Dla właściwego działania systemu
przed uruchomieniem rejestru należy wyeliminować z ustawień środowiska terminala,
w którym będzie wywoływany program rmiregistry, ścieżkę dostępu (CLASSPATH)
do stworzonych właśnie klas serwera. Dzięki temu możliwe będzie podanie przy
wywołaniu programu serwera katalogu bazowego wykorzystywanych klas
(CODEBASE). W przeciwnym przypadku  widziane przez program rmiregistry klasy
uniemożliwiłyby ładowanie klas z katalogu podanego w opcji CODEBASE wywołania
programu serwera. Z tego powodu przed można przed wywołaniem programu
rmiregistry podać polecenie w danym shellu terminala Unixa:
unsetenv CLASSPATH (lub dla Win32 unset CLASSPATH).
unsetenv CLASSPATH (lub dla Win32 unset CLASSPATH).
Następnie można wywołać program rmiregistry poprzez podane jego nazwy:
rmiregistry
rmiregistry
Po uruchomieniu rejestru czas na rozpoczęcie pracy przez serwer. Uruchomienie
aplikacji serwera powinno zawierać dodatkowe opcje oznaczające własności:
CODEBASE - podanie katalogu klas serwera
HOSTNAME  podanie nazwy serwera.
Wywołanie programu serwera ma więc postać:
java  Djava.rmi.server.codebase=http://medvis.eti.pg.gda.pl/classes/
java  Djava.rmi.server.codebase=http://medvis.eti.pg.gda.pl/classes/
-Djava.rmi.server.hostname=medvis.eti.pg.gda.pl
-Djava.rmi.server.hostname=medvis.eti.pg.gda.pl
ObliczeniaSrednia
ObliczeniaSrednia
co oznacza, że wymagane klasy znajdują się na serwerze medvis.eti.pg.gda.pl w
katalogu classes. W przypadku braku dostępu programisty do głównego katalogu
serwisu WWW można klasy umieścić w swoim katalogu WWW, np. zależnie od
ustawień serwera WWW: www lub public_html; i wówczas katalog będzie dostępny
pod adresem: ~username/classes/, gdzie: username to nazwa użytkownika w danym
systemie.
Po uruchomieniu serwera można oczywiście wywołać klienta, zakładając że dla
maszyny wirtualnej klienta widziane sÄ… klasy interfejsu obiektu zdalnego oraz klasa
klienta:
java SredniaKlient
java SredniaKlient
Przy standardowych ustawieniach środowiska bezpieczeństwa dla maszyny
wirtualnej klienta jako efekt działania uruchamianej aplikacji otrzymamy komunikat:
Wystąpił wyjątek: java.security.AccessControlException: access denied
Wystąpił wyjątek: java.security.AccessControlException: access denied
(java.net.SocketPermission medvis.eti.pg.gda.pl resolve)
(java.net.SocketPermission medvis.eti.pg.gda.pl resolve)
8-40
Jacek Rumiński - Język JAVA 
Jacek Rumiński - Język JAVA  Rozdział 8
Jacek Rumiński - Język JAVA 
Jacek Rumiński - Język JAVA 
Jest to związane z tym, że dla klienta uruchomiany jest system zarządzania
bezpieczeństwem, który sprawdza pliki zasad bezpieczeństwa. Standardowo
skonfigurowany plik java.policy nie zawiera właściwych uprawnień dla ustalania
połączeń sieciowych (potrzebnych w RMI do wywołania metod i skopiowania stub a). [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • burdelmama.opx.pl