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