Invocación a métodos Remotos Un servicio cliente/servidor construido con sockets permite implantar cualquier sistema distribuido Sin embargo, los sockets siempre son dificiles de programar por que se debe controlar la peticion, usar bytes y el programador debe preocuparase por esos detalles. Los sistemas cliente servidor evolucionaron con el fin de lograr transparencia en los servicios remotos. Una manera como se propuso es evitar al programador por preocuparse como invocar a un servicio y como pasar sus parametros. En sí, un servicio en el cual los programadores tienen que declarar que son sus servicios y delegar a un servicio distribuido el control de la comunicacion y se basa en invocar funciones, se conoco como llamadas a procedimientos remotos o RPC (Remote Procedure Call) ---------------------- main| f1() ---------------------- Un RPC tipicamente se construye en lenguaje C y consiste en declar un conjunto de datos y funciones que se "exportan" a un ambiente distribuido para ser invocados. ------ sck ---------------- main|f1() -----> |f1() ------ ---------------- Sin embargo, con la adopción de la tecnología de objetos y componentes, se hizo necesario el hacer objetos remotos o distribuidos, que exportan sus metodos a cualquier objeto cliente. CORBA es un marco de operación para administrar objetos distribuidos Con el nacimiento de Java, se empezo a trabajar en replicar los esfuerzos de RPCs o CORBA, pero siguiendo los principios de Java. Esto dio origen a la Invocación de Métodos Remotos o RMI RMI es el protocolo para que dos objetos Java se comuniquen entre si. Los componentes esenciales son + Una interfaz de programación común, donde se declaran los métodos, parametros, respuestas y excepciones del objeto remoto. + Una clase que implanta la interfaz común y que toma el rol de servidor + Una clase que usa la interfaz comun y que toma el rol de cliente + Una serie de clases auxiliares, generadas automaticamente por RMI, para ayudar en la transparencia de la comunicación + Un servicio de registro de nombres, que permite identificar un servicio remoto por nombre y no puerto TCP