Knoppia

Wiki de Informática y otras historias

Herramientas de usuario

Herramientas del sitio


dad:rmi

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
Última revisiónAmbos lados, revisión siguiente
dad:rmi [2023/11/27 12:16] thejuanvisudad:rmi [2024/01/06 20:35] thejuanvisu
Línea 71: Línea 71:
     * Interface     * Interface
     * Stubs     * Stubs
 +
 +===== Implementación Servidor =====
 +En este ejemplo implementaremos una calculadora en un servidor que será utilizada por un cliente.
 +==== Interfaz Servidor ====
 +La interfaz debe heredar de java.rmi.Remote
 +<code java InterfazSertvidor.jar>
 +public interface InterfazServidor extends java.rmi.Remote{
 +public long sumar(long a, long b)
 +  throws java.rm.RemoteException;
 +  
 +public long restar (long a, long b)
 +  throws java.rm.RemoteException;
 +  
 +public long multiplicar ()
 +  throws java.rmi.RemoteException;
 +
 +public long dividir()
 +  throws java.rmi.RemoteException;
 +  
 +}
 +</code>
 +
 +==== Implementación Servidor ====
 +
 +Aquí implementaremos las funciones de la interfaz del servidor. Se debe heredar de UnicastRemoteObject con un Extends e indicar que se va a implementar la interface anterior con Implements:
 +
 +<code java ImplementacionInterfaceServidor.jar>
 +
 +public class ImplementacionInterfaceServidor extends UnicastRemoteObject implements InterfazServidor{
 +  private static final long serialVersionUID = 1L;
 +  
 +  public implementacion() throws RemoteException{
 +    super();
 +  }
 +  
 +  public long sumar(long a, long b) throws RemoteException{
 +    return a+b;
 +  }
 +  
 +  public long restar(long a, long b) throws RemoteException{
 +    return a-b;
 +  }
 +  
 +  public long multiplicar (long a, long b) throws RemoteException{
 +    return a*b;
 +  }
 +  
 +  public long dividir (long a, long b) throws RemoteExcepcion{
 +    return a/b;
 +  }
 +  
 +}
 +
 +</code>
 +
 +==== Implementación servidor ====
 +
 +<code java Server.jar>
 +
 +public class Server(){
 +  public server(){
 +    try{
 +      
 +      //creamos el servicio en el puerto 1099
 +      LocateRegistry.createRegistry(1099);
 +      //creamos un nuevo objeto con la funcionalidad
 +      InterfazServidor is = new ImplementacionInterfaceServidor();
 +      //Vinculamos el objeto a un nombre de servicio poniendo la URL de este y el objeto
 +      //Ejemplo de URL("RMI://localhost:1099/Nombre_del_Servicio")
 +      Naming.rebind("RMI://localhost:1099/CalculatorService", is);//este sería el Stub
 +    
 +    }catch (Exception e){
 +      System.out.println("Error en el servidor: " + e);
 +    }
 +  }
 +  
 +  public static void main(String args[]){
 +    new Server();
 +  }
 +  
 +}
 +
 +</code>
 +
 +===== Implementación Cliente =====
 +<code java Client.jar>
 +
 +public class Client{
 +  public static void main(String[] args){
 +    try{
 +      //Con Naminglookup(URL del RMI) el cliente busca el servicio
 +      //Formato de la URL: RMI://localhost:puerto/nombre_del_servicio
 +      InterfazServidor is = (InterfazServidor)Naming.lookup("RMI://localhost:1099/CalculatorService");//esto es un Stub
 +      
 +      System.out.println(is.sumar(3,4));
 +      System.out.println(is.restar(7,2));
 +      System.out.println(is.multiplicar(8,5));
 +      System.out.println(is.dividir(4,2));
 +    }catch(Exception e){
 +      System.out.println("Error en el cliente");
 +      e.printStackTrace();
 +    }
 +    
 +  }
 +}
 +
 +</code>
 +
 +===== Soluciones a Errores comunes =====
 +==== Unable to make public abstract boolean ====
 +En el archivo module-info.java debemos revisar que se esté exportando el paquete
 +<code>
 +module nombre_proyecto {
 +    exports nombre_paquete;
 +}
 +
 +</code>
  
dad/rmi.txt · Última modificación: 2024/01/06 20:35 por thejuanvisu