Trabalho em sala.
Sistemas distribuídos.
Data: 19/04/2010
Valor
: 2 pontos.
Observe os códigos
Observe, entenda as estruturas de classes, a interface, o funcionamento do cliente e do servidor. Depois comente os códigos explicando detalhadamente seu funcionamento.
Interface
import java.rmi.*;
public interface InterfaceServidorMat extends Remote
{
public double soma(double a, double b) throws RemoteException;
public double subtrai(double a, double b) throws RemoteException;
public double multiplica(double a, double b) throws RemoteException;
public double divide(double a, double b) throws RemoteException;
}
Classes
import java.rmi.*;
import java.rmi.server.*;
public class ServidorMat extends UnicastRemoteObject implements InterfaceServidorMat
{
public ServidorMat() throws RemoteException
{
System.out.println("Novo Servidor instanciado...");
}
public double soma(double a, double b) throws RemoteException
{
return a+b;
}
public double subtrai(double a, double b) throws RemoteException
{
return a-b;
}
public double multiplica(double a, double b) throws RemoteException
{
return a*b;
}
public double divide(double a, double b) throws RemoteException
{
return a/b;
}
}
Servidor
import java.rmi.*;
public class ArrancaServidor
{
public static void main(String argv[])
{
try
{
System.out.println("Arrancando servidor...");
Naming.rebind("ServidorMat_1", new ServidorMat());
}
catch (Exception e)
{
System.out.println("Ocorreu um problema no arranque do servidor.\n"+e.toString());
}
}
}
Cliente
import java.rmi.*;
public class Cliente
{
public Cliente()
{
System.out.println("Arrancando o Cliente...");
// Vamos tentar ir aceder ao Servidor de Registos para recolher a interface
try
{
msi = (InterfaceServidorMat) Naming.lookup("rmi://127.0.0.1/ServidorMat_1");
}
catch (Exception e)
{
System.out.println("Falhou o arranque do Cliente.\n"+e);
System.out.println("Certifique-se que tanto o Servidor de Registos como a Aplicação Servidora estão a correr correctamente.\n");
System.exit(0);
}
}
public double area(double a, double b) throws RemoteException
{
return msi.multiplica(a,b);
}
public double perimetro(double a, double b) throws RemoteException
{
double metade = msi.soma(a,b);
return msi.multiplica(2.0,metade);
}
public static void main (String[] argv)
{
Cliente c = new Cliente();
try
{
System.out.println("Area: " + c.area(20.0,40.0));
System.out.println("Perimetro: " + c.perimetro(20.0,40.0));
}
catch (Exception e)
{
System.out.println("Excepção durante chamadas remotas:" +e);
}
}
private InterfaceServidorMat msi; // A interface para o objecto remoto
}