Académique Documents
Professionnel Documents
Culture Documents
Jos M. Drake
Notas:
Posibilidades que ofrece Java para la comunicacin en red: Socket,RMI y URL.
Client Middleware
RPC
Server
Estilo RPC
(Remote Procedure Call)
Node local
Node remote
Estilo DOO
(Distributed Object Oriented)
Node local
Node remote
Jos M. Drake
Notas:
RMI (Remote Method Invocation) es la solucin Java para la comunicacin de objetos Java distribuidos.
Solucin simple (Fcil de uso) Solucin natural (Se comporta como se espera que haga)
Jos M. Drake
Notas:
Objetivos de RMI
Proporcionar un middelware para el desarrollo de aplicaciones distribuida manteniendo un estilo Java puro y ortodoxo:
Facilita la interaccin de objetos instanciados en diferente JVM mediante el paradigma de invocacin de mtodos de los objetos. Integra el modelo de objetos distribuidos en el lenguaje Java de una forma natural y manteniendo la semntica que le es propia. Capacita para escribir aplicaciones distribuidas tan simple como sea posible. Mantiene y preserva en aplicaciones distribuidas el tipado fuerte propio de Java. Proporciona diferentes modelos de persistencia de objetos distribuidos (objetos vivos, objetos persistentes, objetos con activacin dbil) para conseguir la escalabilidad de las aplicaciones. Introduce los niveles de seguridad necesarios para garantizar la integridad de las aplicaciones distribuidas.
Jos M. Drake
Notas:
Inconvenientes:
El paso de parmetros por valor implica tiempo para hacer la serializacin, enviar los objetos serializados a travs de la red y luego volver a recomponer los objetos en el destino.
Jos M. Drake
Notas:
Procesador remoto
Cliente
Localiza
(RMI) (RMI)
Servidor Registro
Registra (RMI)
Jos M. Drake
Notas:
Comunicar con objetos remotos: Un objeto que disponga de la referencia remota (stub) de un objeto que ofrezca una interfaz remota, puede invocar los mtodos remotos sobre l, en una forma similar a la invocacin de cualquier mtodo pblicos. Descargar objetos remotos: RMI ofrece mecanismos para transferir por valor los objetos que se pasan como parmetro de los mtodos que se invocan. Esta transferencia incluye la transferencia de su cdigo (bytecodes) y de su estado.
Jos M. Drake
Notas:
Diferencias:
Los clientes interaccionan con los objetos remotos a travs de las interfaces remotas, no a travs de implementaciones o interfaces estndares. Los objetos que se pasan como parmetros de mtodos que no son remotos se pasan por copia (valor) y nunca por referencia. Los objetos que se pasan como parmetros de mtodos que se referencian por sus interfaces remotas se pasan por referencia y nunca por valor. La semntica de los mtodos heredados de Object es especializada para los objetos remotos. Las invocaciones de objetos remoto pueden lanzar excepciones adicionales que son propias de los mecanismos de comunicacin,
Jos M. Drake
Notas:
Remote
<<exceptionClass>>
IOException
<<abstract class>>
RemoteObject
<<exceptionClass>>
RemoteException
<<abstract class>>
RemoteSever
<<abstract class>>
<<class>>
Activatable
UnicastRemoteServer
Jos M. Drake
Notas:
Arquitectura de RMI
javac Client Server Client Stub Skeleton Stub Skeleton Server
RMI reference layer RMI transport layer TCP/IP Client Stub javac Server Skeleton
RMI
Jos M. Drake
10
Notas:
10
return
call
lookup
stub
8.
Jos M. Drake
11
Notas:
11
Stub y skeleton
call skeleton
RMI Client
Stub
RMI Server
return
1. Uncliente invoca un mtodo remoto invocando localmente el mismo mtodo en el stub. 2. The stub genera un mensaje que contiene: la referencia al mtodo y un stream de bytes que resulta de secuencializar los parmetros del mtodo. 3. El stub crea dinmicamente un socket y establece la conexin con el skeleton. 4. El skeleton recibe el mensaje los decodifica y delega en un thread la invocacin del mtodo del servidor. Quedando dispuesto de nuevo a la recepcin de un nuevo mensaje (no siempre es multithread). 5. El thread genera un mensaje con el stream de bytes que corresponde a la secuencilizacin de los resultados de la invocacin. 6. El thread enva por el socket abierto el mensaje de retorno. 7. El stub decodifica el mensaje y concluye la invocacin inicial retornando los resultados al cliente.
Jos M. Drake
12
Notas:
12
Jos M. Drake
13
Notas:
13
Ejemplo HolaMundo
ClienteHola
elServidor + main()
<<RemoteInterface>>
Hola
di_hola()
ServidorHola
+ di_hola()
rmiRegistry
+ bind() + lookup()
Jos M. Drake
14
Notas:
14
Es una interfaz remota porque extiende a la interfaz Remote Todos los mtodos de la interfaz remota debe lanzar explcitamente la excepcin RemoteException
Jos M. Drake
15
Notas:
15
16
Notas:
16
17
Notas:
17
Jos M. Drake
18
Notas:
18
Desde Windows:
O desde Eclipse:
Jos M. Drake
19
Notas:
19
20
Notas:
20
Jos M. Drake
21
Notas:
21
Remote
<<exceptionClass>>
IOException
<<abstract class>>
RemoteObject
<<exceptionClass>>
RemoteException
<<abstract class>>
RemoteSever
<<abstract class>>
<<class>>
Activatable
UnicastRemoteServer
Jos M. Drake
22
Notas:
22
Interfaz java.rmi.Remote
Una interfaz remota es aquella que ofrece mtodos que pueden ser invocado por clientes instanciados en otra JVM. Para que una interfaz sea remota se requiere:
Debe extender directa o indirectamente a la interfaz java.rmi.Remote Todos los mtodos que se declaran en ella deben satisfacer los siguientes requisitos:
z Los mtodos remotos deben incluir la declaracin de la excepcin java.rmi.RemoteException. z Los parmetros o valores de retorno de los mtodos remotos, que hagan referencia a objetos remotos deben ser declarados por su interfaz remota.
La interfaz java.rmi.Remote es la interfaz raz que debe ser extendida por cualquier interfaz que se declara como remota.
No declara ningn mtodo.
Una interfaz remota puede extender otras muchas interfaces, sean o no sean remotas, siempre que los mtodos definidos en ellas satisfagan los criterios de los mtodos remotos.
Procodis07: VII.1- RMI: Remote Method Invocation Jos M. Drake
23
Notas:
23
Remote
<interface>>
BanckAccount
<interface>>
Remote
<interface>>
Alfa
<interface>>
Beta
24
Notas:
24
Clase java.rmi.RemoteException
Es la clase raz de las excepciones que puede lanzar el middleware RMI durante una invocacin de un mtodo remoto. Es lanzada cuando la invocacin de un mtodo remoto falla por alguna razn propia del mecanismo RMI (no de la lgica de negocio del servidor), tales como:
Fallos en la comunicacin. Fallos en los procesos de serializacin o recomposicin de los parmetros o resultados. Errores de protocolo.
Es una excepcin chequeada y no una RuntimeException, y por tanto su lanzamiento debe ser declarado en todos los mtodos remotos, y su gestin es chequeada por el compilador.
Procodis07: VII.1- RMI: Remote Method Invocation Jos M. Drake
25
Notas:
25
26
Notas:
26
Jos M. Drake
27
Notas:
27
Clase java.rmi.server.UnicastRemoteObject
Define un objeto remoto concreto cuya referencia slo es vlida mientras que el thread del server est vivo (alive) Sirve para implementar un objeto remoto, esto es un objeto que implementa una o varias interfaces remotas. La clase UnicastRemote Objectr proporciona los mtodos para crear objetos remotos y exportarlos (Hacerlos disponibles para los clientes remotos). Exportar un objeto remoto es declararlo en RMI para que quede a la escucha de un determinado socket TCP . Varios objetos remotos pueden quedar a la espera de un mismo socket TCP. Un objeto remoto puede definir nuevos mtodos pblicos, pero esto no son remotos y slo pueden ser invocados localmente.
Procodis07: VII.1- RMI: Remote Method Invocation Jos M. Drake
28
Notas:
28
Jos M. Drake
29
Notas:
29
Jos M. Drake
30
Notas:
30
Jos M. Drake
31
Notas:
31
32
Notas:
32
Jos M. Drake
33
Notas:
33
Jos M. Drake
34
Notas:
34
Paso de objetos remotos en invocaciones de mtodos remotos Cuando se pasa un objeto remoto como un parmetro, o se retorna como resultado, slo se transfiere el stub al objeto. A travs de l, el que lo posee puede invocar remotamente el objeto pasado. Un objeto remoto no es pasado nunca por copia.
Jos M. Drake
35
Notas:
35
Jos M. Drake
36
Notas:
36
Interfaz Registry
La interfaz registry define los mtodos que ofrece un objeto de tipo registry para almacenar y recuperar objetos remotos identificados con nombres como claves. void bind(String name, Remote obj) // Binds a remote reference to the specified name in this registry. String[] list() // Returns an array of the names bound in this registry. Remote lookup(String name) // Returns the remote reference bound to the specified name in the registry. void rebind(String name, Remote obj) // Replaces the binding for the specified name in this registry with the //supplied remote reference. void unbind(String name) // Removes the binding for the specified name in this registry.
Jos M. Drake
37
Notas:
37
Clase LocateRegistry
Se utiliza para obtener la referencia (obtener el stub) de un registro sobre un procesador determinado
static Registry createRegistry(int port) // Creates and exports a Registry instance on the local host that accepts requests on the port. static Registry createRegistry(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) // Creates and exports a Registry instance on the local host that uses custom socket factories // for communication with that instance. static Registry getRegistry() // Returns a reference to the the remote object Registry for the local host on the port 1099. static Registry getRegistry(int port) // Returns a reference to the the remote object Registry for the local host on the port. static Registry getRegistry(String host) // Returns a reference to the remote object Registry on the specified host on the port 1099. static Registry getRegistry(String host, int port) // Returns a reference to the remote object Registry on the specified host and port. static Registry getRegistry(String host, int port, RMIClientSocketFactory csf) // Returns a locally created remote reference to the remote object Registry on the specified // host and port.
Jos M. Drake
38
Notas:
38