1. Crear una interfaz remota que defina el contrato
del servicio remoto

New->RMI->Remote

Name: ICalculadora

2. Agregar las siguientes definiciones de metodos
(entre Remote { ...  })

public double sumar(double a, double b) 
throws java.rmi.RemoteException;
public double restar(double a, double b) 
throws java.rmi.RemoteException;
public double multiplicar(double a, double b) 
throws java.rmi.RemoteException;
public double dividir(double a, double b) 
throws java.rmi.RemoteException;

Compilar la interfaz

3. Crear la logica del servicio
New->RMI->UnicastRemoteObject

Name: Calculadora
(Next)

Seleccionar Use an Existing Remote Interface e indicar
Existing Interface: ICalculadora
(Next)

Implementation Name : ICalculadorImpl
(Finish)

4. Codificar la logica del servicio
Buscar los metodos que se llaman sumar, restar, multiplicar y dividir y
poner el siguiente codigo:
public double sumar(double a, double b) throws java.rmi.RemoteException {
        return a+b;
    }
    
public double restar(double a, double b) throws java.rmi.RemoteException {
        return a-b;
    }
    
public double multiplicar(double a, double b) throws java.rmi.RemoteException {
        return a*b;
    }
public double dividir(double a, double b) throws java.rmi.RemoteException
{
	return a/b;
}

Compilar (esto genera la clase ICalculadorImpl_Stub)

5. Crear el componente cliente

New->Java Classes-> Class

Name: CalculadoraBean

6. Agregar las siguientes propiedades
(Seleccionar CalculadoraBean, expandir, Expandir class CalculadoraBean
y Seleccionar Bean Patterns, con boton derecho activar Add->Property)

Name: host
Type: String
Option
	Generate Field (checar)
	Generate Return Statement (checar)
	Generate Set Statement (checar)

Name: puerto
Type: int
Option
	Generate Field (checar)
	Generate Return Statement (checar)
	Generate Set Statement (checar)

Name: servicio
Type: String
Option
	Generate Field (checar)
	Generate Return Statement (checar)
	Generate Set Statement (checar)

7. Buscar el codigo del constructor y poner

  /** Creates a new instance of CalculadoraBean */
    public CalculadoraBean() {
          
    }
    private ICalculadora calc;
    

8. Agregar un metodo denominado conectar, con
el siguiente codigo

 public void conectar() {
        try
        {
	    System.setSecurityManager(new java.rmi.RMISecurityManager());
            ICalculadora calc= (ICalculadora)
            java.rmi.Naming.lookup("rmi://"+this.getHost()+":"+this.getPuerto()+
            "/"+this.getServicio());
        } catch (Exception ex)
        {
            
            ex.printStackTrace();
        }
    }

9. Agregar una nueva interfaz denominada IVistaCalculadora
(New->Java Classes->Interface) y agregar el siguiente codigo

  public double operando1();
  public double operando2();
  public void resultado(double res);
  public int operador();
  public static int SUMAR=1;
  public static int RESTAR=2;
  public static int MULTIPLICAR=3;
  public static int DIVIDIR=4;

10. En la clase CalculadoraBean agregar la siguiente propiedad
Name:  vista
Type: IVistaCalculadora
Option
	Generate Field (checar)
	Generate Return Statement (checar)
	Generate Set Statement (checar)

11. Agregar el siguiente codigo, procesar
    
    public void procesar() {
        if (this.calc!=null && this.vista!=null) {
            try {
                int operador= this.vista.operador();
                double res;
                switch (operador) {
                    case IVistaCalculadora.SUMAR:
                        res=
                        this.calc.sumar(this.vista.operando1(),
                        this.vista.operando2());
                        break;
                    case IVistaCalculadora.RESTAR:
                        res=
                        this.calc.restar(this.vista.operando1(),
                        this.vista.operando2());
                        
                        break;
                    case IVistaCalculadora.MULTIPLICAR:
                        res=
                        this.calc.multiplicar(this.vista.operando1(),
                        this.vista.operando2());
                        
                        break;
                    case IVistaCalculadora.DIVIDIR:
                        res=
                        this.calc.dividir(this.vista.operando1(),
                        this.vista.operando2());
                        
                        break;
                    default:
                        res=0;
                        break;
                        
                }
                this.vista.resultado(res);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

12. Crear un GUI 
New->Java GUI Form -> JFrame
Name : GUICalc
(Next)
Interfaces Implementes
IVistaCalculadora


Poner Form Layout a Null y Form Size Policy a Generate Code

13. Dibujar 3 campos de texto, 4 botones con los simbolos de +,-,*,/
y un boton que diga conectar

14. Agregar CalculadoraBean a la paleta de componentes, categoria Beans


15. Agregar a la Forma GUICalc, el Bean CalculadoraBean
Configurar sus propiedades
host: localhost
puerto: 1099
servicio: ICalculadoraImpl

16. Ensamblar los componentes
El boton Conectar debe invocar al metodo conectar de CalculadoraBean
El boton +,-,* y / deben invocar al metodo procesar de CalculadoraBean

17. El codigo generado para cada conexion debe quedar de 
la siguiente manera


