jueves, 29 de agosto de 2013

Invocación Remota

Concepto:



La invocación remota es un modelo de interacción (petición/respuesta) muy habitual en muchas
aplicaciones: un cliente envía un mensaje con una petición al servidor que indica la operación o
método y los argumentos y se detiene en espera de la respuesta. El servidor procesa la
petición y devuelve una respuesta. 



Remote Invocation

Arquitectura:

La arquitectura RMI puede verse como un modelo de cuatro capas.

Primera capa


La primera capa es la de aplicación y se corresponde con la implementación real de las aplicaciones cliente y servidor. Aquí tienen lugar las llamadas a alto nivel para acceder y exportar objetos remotos. Cualquier aplicación que quiera que sus métodos estén disponibles para su acceso por clientes remotos debe declarar dichos métodos en una interfaz que extienda java.rmi.Remote. Dicha interfaz se usa básicamente para "marcar" un objeto como remotamente accesible. Una vez que los métodos han sido implementados, el objeto debe ser exportado. Esto puede hacerse de forma implícita si el objeto extiende la clase UnicastRemoteObject (paquete java.rmi.server), o puede hacerse de forma explícita con una llamada al método exportObject() del mismo paquete.

Segunda capa


La capa 2 es la capa proxy, o capa stub-skeleton. Esta capa es la que interactúa directamente con la capa de aplicación. Todas las llamadas a objetos remotos y acciones junto con sus parámetros y retorno de objetos tienen lugar en esta capa.

Tercera capa

La capa 3 es la de referencia remota, y es responsable del manejo de la parte semántica de las invocaciones remotas. También es responsable de la gestión de la replicación de objetos y realización de tareas específicas de la implementación con los objetos remotos, como el establecimiento de las persistencias semánticas y estrategias adecuadas para la recuperación de conexiones perdidas. En esta capa se espera una conexión de tipo stream (stream-oriented connection) desde la capa de transporte.

Cuarta Capa

La capa 4 es la de transporte. Es la responsable de realizar las conexiones necesarias y manejo del transporte de los datos de una máquina a otra. El protocolo de transporte subyacente para RMI es JRMP (Java Remote Method Protocol), que solamente es "comprendido" por programas Java.




Diseño de la Invocación Remota





11 comentarios:

  1. ¿Cuál es la diferencia entre "Stub" y "Esqueleto"?

    - Jhon Paul Anampa García

    ResponderEliminar
    Respuestas
    1. Stub es un proxy para un objeto remoto que corre en la computadora del cliente.
      Un Skeleton es un proxy para un objeto remoto que corre en el servidor.

      Eliminar
  2. ¿Cuales son los tipos de semántica en una invocación remota?

    Carlos Trejo

    ResponderEliminar
    Respuestas
    1. Los tipos de semántica son tres:

      Semántica tal-vez(maybe):

      el cliente espera un rato y sigue con su procesamiento normal al cabo de un tiempo sin saber que ocurrió:
      Se cayó el servidor
      No llego la solicitud
      Se perdió la respuesta

      Semántica al-menos-una-vez (at-least-once):
      el cliente reintenta tras temporización. El servidor no filtra duplicados. El cliente recibe una o más respuestas. Solo valido para operaciones idempotentes (la reiteración de la misma operación no altera el resultado final).
      Ejemplo operaciones idempotentes: Sumar(a,b); Unión Conjuntos(A,B)
      Ejemplo de operaciones no idempotentes: Concatenar (lista1, lista2).

      Semántica como-mucho-una-vez (at-most-one):
      cliente reintenta tras temporización. El servidor filtra duplicados servicios de historial en servidor.
      El proceso en el servidor se puede ejecutar una o cero veces:
      Una vez: el servidor no cayo y el cliente recibió una respuesta
      Cero veces: el cliente recibe algún tipo de informe de error.

      Eliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. Los RMI proporcionan algún tipo de seguridad?

    ResponderEliminar
    Respuestas
    1. RMI proporciona un mecanismo alterno basado en el protocolo HTTP (confiable para el firewall), para permitir a los clientes que se encuentran detrás del firewall, invocar métodos de objetos que se encuentren del otro lado. Para atravesar el firewall, la capa de transporte de RMI incluye la llamada remota dentro del protocolo HTTP, como el cuerpo de una solicitud POST, mientras que los valores de retorno se reciben en el cuerpo de la respuesta HTTP. La capa de transporte de RMI puede formular la solicitud POST, de alguna de las dos maneras siguientes:

      1. Si el proxy firewall permite entregar una solicitud HTTP directamente sobre cualquier puerto de la máquina destino.

      2. Si el proxy firewall sólo entrega solicitudes HTTP a ciertos puertos HTTP bien conocidos, la llamada se envía a un servidor HTTP que se encuentre escuchando en el puerto 80

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
  5. Hola tengo una pregunta
    ¿Cuales serian las ventajas y los inconvenientes del "RMI" frente al "Socket"?

    ResponderEliminar