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