Paso de objetos en RMI Desarrollo de aplicaciones distribuidas Paso de parámetros en RMI Los tipos atómicos se pasan por valor (copia) Los objetos se pueden pasar como argumentos o como resultado de invocación de métodos: X.método1(objeto); Objeto = X.método2(); ¿De que manera se pasan los objetos? Paso de objetos Existen 2 posibilidades: • Los objetos de una clase serializable se pasan por valor. • Los objetos de una clase remota se pasan por referencia. Paso de objetos por valor • Deben implementar la interfaz java.io.Serializable • La definición de la clase debe existir tanto en el cliente como en el servidor. X C X C ANTES S S DESPUES 2 objetos completamente independientes, los cambios de uno no se reflejan en el otro X Paso de objetos por referencia • Los objetos remotos se pasan por referencia. ANTES C X S El cliente conoce la interfaz remota y la clase Stub El servidor conoce la interfaz remota y la clase remota DESPUES C Stub X S Los cambios se reflejan en el objeto original. Usos del paso por valor • Se pueden accesar los atributos públicos de los objetos, no solo los métodos. • Las invocaciones son locales, por lo tanto el desempeño se puede mejorar. Ejemplo Integral Numérica Solicitud de integración Servidor de integrales Cliente Stub f(x) Las invocaciones son remotas Si se pasa f(x) por referencia ! Ejemplo Integral Numérica Solicitud de integración Servidor de integrales Cliente f(x) f(x) f(x) Las invocaciones son locales Si se pasa f(x) por valor ! Usos del paso por referencia • Al no copiar los objetos completos, no representa una sobrecarga muy grande. • Suponga que un servidor RMI debe actualizar a varios clientes. Esto se puede implementar de 2 maneras: – Polling – Callback Polling C Pregunta C Pregunta S Respuesta C Respuesta C Los clientes preguntan al servidor el valor de la variable. Puede leerse varias veces el mismo valor Efectivo solo si la frecuencia de cambios es muy alta Callback • Los clientes se registran: C Registrar C Registrar S C C Callback • El servidor les notifica los cambios cada vez que ocurren C C Actualizar S Actualizar C C Efectivo solo si la frecuencia de cambios es baja