Sieciowa komunikacja procesów - RMI
// Przykładowa zawartość plików
//
PolitykaSerwera.txt
i
PolitykaKlienta.txt
grant {
permission java.security.AllPermission;
};
// plik RMI1_Interfejs.java
import java.rmi.*;
public interface RMI1_Interfejs extends Remote {
public String podajDate() throws RemoteException;
}
Opracował: Zbigniew Suski
1
Sieciowa komunikacja procesów - RMI
//plik RMI1_Serwer.java
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
import java.net.*;
import java.util.*;
public class RMI1_Serwer implements RMI1_Interfejs{
private static final int port = 8501;
private final String nazwaSerwera = "RMI1_Serwer"; private Registry reg;
public void RMI1_Serwer() throws RemoteException
{
System.out.println("SERWER: Utworzono obiekt serwera");
}
public void wykonaj()
{
try {
reg = LocateRegistry.getRegistry(Registry.REGISTRY_PORT); System.out.println("SERWER: Zlokalizowano rejestr na porcie "
+ Registry.REGISTRY_PORT);
UnicastRemoteObject.exportObject( this, port );
System.out.println("SERWER: Wyeksportowano obiekt serwera na porcie
" + port);
reg.rebind( nazwaSerwera, this );
System.out.println("SERWER: Zarejestrowano obiekt serwera"); System.out.println("SERWER: Oczekuje na zgloszenia");
}
catch ( RemoteException e) {
System.out.println("SERWER: ");
e.printStackTrace();
System.exit(0);
}
}
public String podajDate() throws RemoteException
{
String data = new Date().toString();
System.out.println("SERWER: Wyslalem date> " + data); return data;
}
public static void main(String[] args)
{
System.setSecurityManager( new RMISecurityManager() ); System.out.println("\nSERWER: Zainstalowano zarzadce bezpieczenstwa");
// Utworzenie dostawcy usługi
new RMI1_Serwer().wykonaj();
}
}
Opracował: Zbigniew Suski
2
Sieciowa komunikacja procesów - RMI
//plik RMI1_Klient.java
import java.rmi.*;
import java.rmi.registry.*;
import java.net.*;
public class RMI1_Klient {
private static final String nazwaSerwera = "RMI1_Serwer"; private static RMI1_Interfejs interfejs;
private String hostSerwera;
public static void main( String[] args )
{
//
Parametrem wywołania klienta jest nazwa lub adres IP komputera,
//
który przechowuje rejestr. Bez parametru jest przyjmowany localhost System.setSecurityManager( new RMISecurityManager() ); System.out.println("\nKLIENT: Zainstalowano zarzadce bezpieczenstwa"); new RMI1_Klient( args.length !=1 ? "localhost" : args[0] ).wykonaj();
}
public RMI1_Klient( String host )
{
this.hostSerwera = host;
}
public void wykonaj()
{
System.out.println("KLIENT: Wykorzystuje serwer na " + hostSerwera); try {
interfejs = (RMI1_Interfejs)Naming.lookup( "//" +
hostSerwera + '/' + nazwaSerwera);
System.out.println("KLIENT: Utworzono odnosnik do dostawcy"); System.out.println("KLIENT: Pobranie daty"); String data = interfejs.podajDate();
System.out.println("KLIENT: Uzyskano od serwera: " + data);
}
catch ( MalformedURLException ee) {
System.out.println("KLIENT: Niepoprawny URL ???"); System.exit(0);
}
catch ( NotBoundException ee) {
System.out.println("KLIENT: Nie uzyskano połączenia z serwerem"); System.exit(0);
}
catch ( RemoteException ee) {
System.out.println("KLIENT: Zdalny wyjątek ???"); ee.printStackTrace();
System.exit(0);
}
System.out.println("KLIENT: Koniec");
}
}
Opracował: Zbigniew Suski
3