Title: OBJETOS DISTRIBUIDOS
1OBJETOS DISTRIBUIDOS
2Remote Method Invocation
- Es parte de JDK 1.1 o sup.
- RMI directamente integra un modelo de objetos
distribuidos en el lenguaje. - Un objeto RMI es un objeto remoto java cuyos
métodos pueden ser invocados desde otra MV a
través de la red. - Los clientes RMI interactuan con los objetos
remotos vÃa su las interfaces publicadas. - Una invocación RMI pasa los objetos locales en
parámetros por valor en vez de por referencia.
3Remote Method Invocation (cont.)
- RMI usa la serialización de objetos para guardar
el estado actual de un objeto local en un flujo
serial que es pasado como un parámetro dentro de
un mensaje. - RMI pasa una referencia al objeto remoto, no
copiando la implementación remota. - RMI provee interfaces y clases para localizar
objetos remotos, cargarlos y ejecutarlos
seguramente. - RMI actualmente posee un muy primitivo servicio
de nombres (que no es persistente)
4Proceso de desarrollo con RMI
Definir su interfaz remota
1
Implemente la interfaz
2
javac
3
4
rmic
Server class (.class)
Implemente el cliente
Client stub (.class)
Server Skeleton (.class)
8
Iniciar el RMI Registry
javac
5
9
Iniciar objetos del servidor
6
Inicie cliente
10
Registrar objetos remotos
7
51. Definir la interfaz remota
- El servidor de objetos tiene que declarar sus
servicios via una interfaz remota - se hereda de la interfaz java.rmi.remote
- cada método en la interfaz remota tiene que
capturar la excepcion java.rmi.RemoteException
6- // CalcRMI.java
- import java.rmi.
- public interface CalcRMI extends java.rmi.Remote
- int sumar(int a, int b) throuws
java.rmi.RemoteException - int restar(int a, int b) throuws
java.rmi.RemoteException - int multiplicar(int a, int b) throuws
java.rmi.RemoteException - int dividir(int a, int b) throuws
java.rmi.RemoteException
72. Implementar la interfaz remota
- Se debe implementar la interace
- Tiene que derivar esta clase de
java.rmi.UnicastRemoteObject
8- // CalcRMIImpl.java
- import java.rmi.
- public class CalcRMIImpl extends
UnicastRemoteObject implements CalcRMI - public CalcRMIImpl(String name) throws
RemoteException - super()
- try
- Naming.rebind(name, this)
- catch (Exception e)
- System.out.println(Error)
-
-
- public int sumar(int a, int b) throws
RemoteException - return ab
-
93. Compilar la clase del servidor
- Promptgt javac CalcRMI.java
- Promptgt javac CalcRMIImpl.java
104. Correr el compilador de stubs
- RMI provee un compilador de stubs llamado rmic
- Se debe correr rmic contra los archivos .class
para generar los stubs y los skeletons - promptgtrmic CalcRMIImpl
115. Iniciar el RMI Registry en el servidor
- RMI define interfaces para un servicio de nombres
no persistente llamado Registry - promptgtrmiregistry
126. Iniciar los objetos del servidor 7. Registrar
los objetos remotos con el Registry
- Tiene que cargar las clases del servidor y luego
crear instancias de objetos remotos - Se debe un programa servidor que para lanzar los
objetos remotos y se debe poner a ejecutar - promptgt javac CalcRMIServer.java
- promptgtstart java CalcRMIServer
13- import java.rmi.
- import java.rmi.server.
- public class CalcRMIServer
- public static void main(String args)
- try
- CalcRMIImpl calc new CalcRMIImpl(calc)
- System.out.println(CalcRMI Server ready)
- catch (Exception e)
- System.out.println(Error)
-
-
-
148. Escribir el código del cliente
- import java.rmi.
- import java.rmi.registry.
- import java.rmi.server.
- public class CalcRMIClient
- public static void main(String args)
- int a, b, result
- try
- CalcRMI calc (CalcRMI)Naming.lookup(rmi//a
rgs0 / calc) - a 10 b 20
- result calc.sumar(a,b)
- System.out.println(el resultado de la suma
remota es result) - catch (Exception e)
- System.out.println(error)
- System.exit(0)
-
159. Compilar el cliente
- Promptgt javac CalcRMIClient.java
- 10. Ejecutar el cliente
- promptgtjava CalcRMIClient