Está en la página 1de 11

Programación de Servicios Web

Ejemplo de desarrollo de
un servicio de calculadora
sobre RMI

1
Diseño del servicio
• Se aplica el patrón de distribución proxy a partir del
servicio existente (local) y la definición de una
interfaz

Cliente

ICalculadora

Calculadora

2
Diseño del servicio
• Se crean las implementaciones necesarias y el
servidor que distribuye el objeto remoto

rmiRegistry Servidor

Cliente CalculadoraImpl

ObjetoRemoto
ICalculadora

Stub

3 RMI
Objeto a distribuir
public class Calculadora {

public double sumar (double a, double b) {


return (a+b);

public double multipiclar (double a, double b) {


return (a*b);

4
Declaración de la interfaz remota
import java.rmi.*;

public interface ICalculadora extends Remote {


public double sumar (double a, double b) throws
RemoteException;
public double multiplicar (double a, double b)
throws RemoteException;
}

5
Implementación objeto remoto
import java.rmi.*;
public class CalculadoraImpl implements ICalculadora{

Calculadora c = new Calculadora ();

public double sumar (double a, double b) {

return c.sumar(a, b);


}

public double multiplicar (double a, double b) {

return c.multipiclar(a, b);


}

6
Implementación servidor
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;

public class Server {


public static void main(String[] args) {
try {
//Creación objeto remoto
ICalculadora obj = new CalculadoraImpl();
//creación stub, exporta obj remoto sobre puerto anónimo (0)
ICalculadora stub =
(ICalculadora)UnicastRemoteObject.exportObject(obj,0);
//localización servicio de registro
Registry registry = LocateRegistry.getRegistry();
//registrar servicio
registry.bind("Calculadora", stub); //explicar rebind
7
System.out.println ("Servidor iniciado...");
Implementación servidor
}catch (Exception e) {

System.out.println ("Error en servidor: "+e.getMessage());


e.printStackTrace();
}

8
Implementación cliente
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Cliente {
public static void main(String[] args) {
try {
Registry registry =
LocateRegistry.getRegistry("localhost");
ICalculadora stub =
(ICalculadora)registry.lookup("calculadora");
double respuesta = stub.sumar(3, 5);
System.out.println ("Respuesta suma: "+respuesta);
respuesta = stub.multiplicar(3, 5);
System.out.println ("Respuesta multiplicación:
"+respuesta);
}catch (Exception e) {
System.out.println ("Client error: "+e.toString());
e.printStackTrace();
9 } }}
Ejecución del servicio
1. Ejecutar el servicio de nombres (desde el mismo
directorio donde se encuentre el servidor)
start rmiregistry
2. Ejecutar el servidor
start java Server (nombre de la clase del
servidor)
3. Invocar el cliente
java Cliente

10
Documentación
• https://docs.oracle.com/en/java/javase/15/docs/sp
ecs/rmi/index.html
• https://docs.oracle.com/javase/tutorial/rmi/index.
html
• https://docs.oracle.com/en/java/javase/15/docs/sp
ecs/man/rmiregistry.html
• https://docs.oracle.com/en/java/javase/15/docs/a
pi/java.rmi/java/rmi/package-summary.html

11

También podría gustarte