Sieciowa komunikacja procesów - RMI
// Przykładowa zawartość plików
//
PolitykaSerwera.txt
i
PolitykaKlienta.txt
grant {
permission java.security.AllPermission;
};
// plik RMI2_Interfejs.java
import java.rmi.*;
public interface RMI2_Interfejs extends Remote {
public void pokazSamochodu(InterfejsSamochodu interfejs) throws RemoteException;
}
// plik InterfejsSamochodu.java
import java.rmi.*;
import java.io.*;
public interface InterfejsSamochodu extends Serializable {
public String pokazOpisu();
}
//plik Samochod.java
public class Samochod implements InterfejsSamochodu {
protected String marka;
protected String kolor;
public Samochod (String marka, String kolor)
{
this.marka = marka;
this.kolor = kolor;
}
public String pokazOpisu()
{
return "Samochod " + marka + " ma kolor " + kolor;
}
}
===================================================================================
//plik Ciezarowka.java
public class Ciezarowka extends Samochod {
protected int ladownosc;
public Ciezarowka (String marka, String kolor, int ladownosc)
{
super(marka, kolor);
this.ladownosc = ladownosc;
}
public String pokazOpisu()
{
return "\nCiezarowka: " + super.pokazOpisu() + " - " +
"Jej ladownosc wynosi " + ladownosc + " kg\n";
}
}
Opracował: Zbigniew Suski
1
Sieciowa komunikacja procesów - RMI
//plik RMI2_Serwer.java
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
import java.net.*;
public class RMI2_Serwer implements RMI2_Interfejs {
private static final int port = 8502;
private final String nazwaSerwera = "RMI2_Serwer"; private Registry reg;
public static void main(String[] args)
{
System.setSecurityManager( new RMISecurityManager() ); System.out.println("SERWER: Zainstalowano zarzadce bezpieczenstwa");
// Utworzenie dostawcy usługi
try {
new RMI2_Serwer().wykonaj();
}
catch( RemoteException ee) {
}
}
---------------------------------------------------------------------------
public RMI2_Serwer() throws RemoteException
{
System.out.println("SERWER: Utworzono obiekt dostawcy");
}
public void wykonaj()
{
try {
UnicastRemoteObject.exportObject( this, port ); System.out.println("SERWER: Wyeksportowano obiekt dostawcy"); Naming.rebind( nazwaSerwera, this );
System.out.println("SERWER: Zarejestrowano obiekt dostawcy"); System.out.println("SERWER: Oczekiwanie na wywolania klientow\n");
}
catch ( RemoteException ee) {
System.out.println("SERWER: Brak namiastki dostawcy"); ee.printStackTrace();
System.exit(0);
}
catch ( MalformedURLException ee) {
System.out.println("SERWER: Bledny URL"); System.exit(0);
}
}
public void pokazSamochodu(InterfejsSamochodu interfejs) throws RemoteException
{
String opis = interfejs.pokazOpisu();
System.out.println(opis);
}
}
Opracował: Zbigniew Suski
2
Sieciowa komunikacja procesów - RMI
//plik RMI2_Klient.java
import java.rmi.*;
import java.rmi.registry.*;
import java.net.*;
public class RMI2_Klient {
private static final String nazwaSerwera = "RMI2_Serwer"; private static RMI2_Interfejs interfejs;
private String hostSerwera;
private Samochod samochod;
private Ciezarowka ciezarowka;
public static void main( String[] args )
{
System.setSecurityManager( new RMISecurityManager() ); System.out.println("KLIENT: Zainstalowano zarzadce bezpieczenstwa"); new RMI2_Klient( args.length !=1 ? "localhost" : args[0] ).wykonaj();
}
-----------------------------------------------------------------------------
public RMI2_Klient( String host )
{
this.hostSerwera = host;
}
-----------------------------------------------------------------------------
public void wykonaj()
{
System.out.println("KLIENT: Wykorzystuje serwer na " + hostSerwera); try {
interfejs = (RMI2_Interfejs)Naming.lookup( "//" +
hostSerwera + ':' + Registry.REGISTRY_PORT + '/' +
nazwaSerwera);
System.out.println("KLIENT: Utworzono odnosnik do dostawcy"); System.out.println("KLIENT: Wysylam obiekt: samochod "); samochod = new Samochod("Volkswagen", "czarny"); System.out.println("KLIENT: samochod: {" + samochod.marka + "," +
samochod.kolor + "}");
interfejs.pokazSamochodu(samochod);
System.out.println("KLIENT: Wysylam obiekt: ciezarowka "); ciezarowka = new Ciezarowka("Mercedes", "czerwony", 10000); System.out.println("KLIENT: ciezarowka: {" + ciezarowka.marka + ","
+ ciezarowka.kolor + "," + ciezarowka.ladownosc + "}"); interfejs.pokazSamochodu(ciezarowka);
}
catch ( MalformedURLException ee) {
System.out.println("KLIENT: Bledny 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);
}
}
}
Opracował: Zbigniew Suski
3