Professional Documents
Culture Documents
FRQ-DYD50,
/DERUDWRULRGH,QJHQLHUtDGHO6RIWZDUH
&RQWHQLGR
• Antecedentes
• Introducción a los Sistemas Distribuidos
– Sockets
– RPC
• Java RMI
– Características
– Modelo de Objetos Distribuidos
– Visión del Sistema RMI
– Arquitectura RMI
– Pasos para desarrollar aplicaciones en RMI
– Ejemplos:
• P1) Cronometrar transferencia de datos
• P2) Cliente Descarga Códigos de un servidor
• P3) P2 + Polimorfismo y Sobrecarga
1
8QSRFRGHKLVWRULD
¢ 4Xp EXVFDED681"
• Latencias
• Fallos en las comunicaciones
• Concurrencia
• Acceso a memoria
2
6LVWHPDV'LVWULEXLGRV
• Sockets
6RFNHWV
3
6RFNHWV
Servidor
Espera
nuevo (
cliente
!"
Envía datos al servidor
)
4
5HPRWH3URFHGXUH &DOO 53&
&OLHQWH 6HUYLGRU
O R"W"XY T M&Z&VW
1 / 23 1 / 23
¢ 4Xp HV-DYD50,"
Cliente Servidor
red
Máquina Virtual Java Máquina Virtual Java
[
5
&DUDFWHUtVWLFDVGH50,
0
0RGHORGH2EMHWRV'LVWULEXLGRV50,
– Servidor:
– Crear objetos
– Permitir referencias a ellos
– Esperar por peticiones de los clientes
– Cliente:
– Obtener referencia a los objetos remotos
– Invocar a los métodos de los objetos remotos
0 0
6
0RGHORGH2EMHWRV'LVWULEXLGRV50,
• Las aplicaciones de Objetos Distribuidos requieren:
– Localizar objetos remotos:
– El servidor debe registrar el objeto remoto para que los
clientes obtengan sus referencias.
0
9LVLyQGHOVLVWHPD50,
registry
50,
2
1 50,
Cliente
3
50,
Servidor
85
85/
\
/]
0
7
$UTXLWHFWXUDGHO6LVWHPD50,
SDUiPHWURV
Cliente Servidor
UHVXOWDGRV
resultados=obj.metodo(parametros)
Stub Esqueleto
^
0
Stub Esqueleto
i ji k j j q l j r m s np o p i ji k j j q l j r m s np o p
t l tp mw u x v y zr x l s j t l tp mw u x v y zr x l s j
• Características:
– Los objetos se transmiten entre emisor y receptor a través
de una serialización.
– El VWXE implementa la inicialización de la llamada a la capa
de referencia remota, la serialización de los argumentos del
método remoto llamado y la deserialización de los
resultados.
– El esqueleto cumple la función complementaria para el
programa servidor responsable del objeto.
0
8
Arquitectura:........ &DSDGH5HIHUHQFLD5HPRWD
{ | }~ }
Cliente
}
| Servidor
Stub Esqueleto
i ij k j j q l j r m s pn o p i ij k j j q l j r m s pn o p
t l tp mw u x v y zr x l s j t l tp mw u x v y zr x l s j
0
Arquitectura:........ &DSDGH7UDQVSRUWH
{ | }~ }
Cliente
}
| Servidor
Stub Esqueleto
i ji k j j q l j r m s np o p i ji k j j q l j r m s np o p
t l tp mw u x v y zr x l s j t l tp mw u x v y zr x l s j
) 0
9
3DVRVSDUDHVFULELUDSOLFDFLRQHVFRQ-DYD50,
^ 0
N
< N 0U0^
¦ 0
0 ¥ ¤ 0^
^ 0 ^U 0
< N ^ 0 ^
´
±²U³<² «
°
§
¨ª© «
^¢^¢£ ¡
^¢^¢£ ® ¡
^¢^¢£ ¡
^¢^¢£
0
,QVWUXFFLRQHVSDUD&203,/ $5ODVDSOLFDFLRQHV
¶
{ | }~ }
Cliente
}
| Servidor
Stub Esqueleto
i ji k j j q l j r m s np o p i ji k j j q l j r m s np o p
t l tp wm u x v y zr x l s j t l tp wm u x v y zr x l s j
µ 0
10
,QVWUXFFLRQHVSDUD(-(&87$5ODVDSOLFDFLRQHV
• Ejecutar servidor:
MDYD'MDYDVHFXULW\SROLF\ PLMDYDSROLF\ PL6HUY
rmiregistry
• Ejecutar cliente:
MDYDPL&OLHQWH
¹ º0»
2 ¹ º0»
1
miCliente
3 ¹ º0»
miServidor
¹ ½ ¾¿À
¼
·0¸ 0
6HJXULGDGHQ50,
grant {
permission java.net.SocketPermission "*:1024-65535","connect, accept";
permission java.net.SocketPermission "*:80", "connect";
}
· 0
11
(MHPSORV3UiFWLFRV
30HGLUWLHPSRVHQWUDQVIHUHQFLDGHGDWRV
3&OLHQWHGHVFDUJDFyGLJRVGHXQVHUYLGRU
333ROLPRUILVPR\6REUHFDUJD
·0· 0
30HGLUWLHPSRVHQWUDQVIHUHQFLDGHGDWRV
• 2%-(7,92
– Transferencia de datos entre dos ordenadores haciendo uso
de RMI.
• 3$626:
– Crear el servicio para el cliente ---> interfaz
– Implementar los servicios ---------> implements ...
– Crear el servidor
– Crear el cliente
• (63(&,),&$&,Ï1:
– Tomar los tiempos de transferencia de enteros entre dos
máquinas en un rango entre 1 y 1048576 enteros.
·0Á 0
12
(VTXHPDGHODSUiFWLFD
initSend
ok
getData(Size)
buffer[...]
miCliente Server
miServidor
·
0
,QWHUID]5HPRWD
·0Â 0
13
,PSOHPHQWDFLyQGHOD,QWHUID]
·0Ã 0
&RGLILFDUHO6HUYLGRU
import java.rmi.*;
import java.rmi.server.*;
·0Ä 0
14
&RGLILFDUHO&OLHQWH
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
// Iniciar cronómetro o
buffer = Obj.getData(size); k
getData(Size)
// Parar cronómetro
} buffer[...]
miCliente Server
} // del main
miServidor
} // de la clase TransferRMIClient
·0 0
&203,/ $5
¶
• Compilar servidor:
MDYDF 7UDQVIHU50,6HUYHUMDYD
• Compilar el Cliente:
MDYDF 7UDQVIHU50,&OLHQWMDYD
Stub Esqueleto
i ji k j j q l j r m s np o p i ji k j j q l j r m s np o p
t l tp wm u x v y zr x l s j t l tp wm u x v y zr x l s j
·0µ 0
15
(-(&87$5
• Ejecutar el servicio de registro de objetos:
VWDUW UPLUHJLVWU\ (windows), UPLUHJLVWU\ (unix)
• Ejecutar servidor:
MDYD'MDYDVHFXULW\SROLF\ PLMDYDSROLF\ 7UDQVIHU50,6HUYHU
Å
ÆÇ
È É0Ê Ç^Ë ÌUÍ
Å
ÎÏ"Ð Í0ÑÒ&ÎÓÔ
ÕÖÖÖÖÖÖ
ÕÖÖÖÖÖ
í ÕÖÖÖÖ JServlets
JRMI
åë ì ÕÖÖÖ CORBA
éè
æê ÕÖÖ
ãä åæç ÕÖ
Õ
1 10 100 1000 10000 100000 1E+06 1E+07
× Ø Ù Ø Ú Û ÜÝ Þ ßÝ àÛ á â
Á0¸ 0
2EMHWRVYLDMHURV
• Una de las características más interesantes de Java RMI es la
capacidad por descargar software en tiempo de ejecución.
ù úû ò
ô ùü0ýò
ô þúû ÿ ÷ñ ò
ù úû ò
ô ù
î>ï ð&ñ ï òó0ô ò Server
16
9LVLyQGHODGHVFDUJDGHFyGLJR
0100
0011
1 1111
1 1111
1 1100
0 0101
métodos
Á0· 0
3&OLHQWHGHVFDUJDFyGLJRVGHXQVHUYLGRU
• 2%-(7,92
– Paso de objetos entre cliente y servidor para la ejecución de
tareas en el cliente que originalmente están en el servidor.
• 3$626:
– Crear el servicio para el cliente ---> interfaz con las tareas
– Implementar los servicios ---------> implements ...
– Crear el servidor
– Crear el cliente
• (63(&,),&$&,Ï1:
– Ejecutar la aplicación.
– Modificarla para incorporar nuevas tareas.
Á0Á 0
17
(MHFXFLyQGHGLIHUHQWHVWDUHDV
&' # !() *,+.-/10 * + *!5 0:*,; <= >
! "
# $
%
2 3 4 6
7 89 ?
*,+.-A@B@ * + *,+CD+ = >
2
*,+.-EGF 3 4 * + ?
*
EH;JII =>
2 34 4!K ?
TXLFN6RUW
LAMON PJQ RSAT U
Z![\Z
V T W WJXY % %
*UHHG\
Á
0
quickSort
B&B
Greedy
Á0Â 0
18
,PSOHPHQWDFLyQGHODVWDUHDV
19
&RGLILFDUHO&OLHQWH] ' # !()Oc d `"`e
&203,/ ¥ $5
• Compilar servidor:
MDYDF 6HUYHUMDYD
• Compilar el Cliente:
MDYDF &OLHQWMDYD
Stub Esqueleto
¦ §¦ ¨ § § ® © § ¯ ª ° « ¬ ¦ §¦ ¨ § § ® © § ¯ ª ° « ¬
± © ± ´ª ² µ ³ ¶ ·¯ µ © ° § ± © ± ´ª ² µ ³ ¶ ·¯ µ © ° §
Á0µ 0
20
(-(&87$5
• (MHFXWDUHOVHUYLFLRGHUHJLVWURGHREMHWRV
VWDUW UPLUHJLVWU\ ZLQGRZV UPLUHJLVWU\ XQL[
• (MHFXWDUVHUYLGRU
MDYD'MDYDVHFXULW\SROLF\ PLMDYDSROLF\ 6HUYHU
• (MHFXWDUFOLHQWH
MDYD&OLHQW
¸ 0
333ROLPRUILVPR\6REUHFDUJD
0
21
3ROLPRU\6REUHFDU³5(0272´
// Objeto Tarea del que se derivan las demás tareas (7DUHD.java)
import java.io.*;
public class 7DUHDimplements java.io.Serializable {
String msg;
public Tarea() {
super();
}
public Tarea(String msg) {
this.msg = msg;
}
public void computo() {
System.out.println("Ejecutando la tarea " + msg);
}
}
· 0
3ROLPRU\6REUHFDU Ò ÓÕÔÖ ×ÓØ×ÙÚ ÛÜÚ ÛÜ ×ÛÝØÞßÓ1ß1× àÚ ×ÙÝá âÙØã× b!`! `
22
3ROLPRU\6REUHFDU Ò ÓÕÔÖ ×ÓØ×ÙÚ ÛÞá âÙ1Ò ÙÚ ×Ü ç Ûèé×ÙD×Öê×Ü ë.×Ü
public class Server extends UnicastRemoteObject implements InterfazTarea {
public static final void main(String[] args) {
try {
Server runner = new Server();
Naming.rebind("jobs_server",runner);
} catch (Exception e) {
System.exit(1);
}
}
Ê ' # & b!`! ` $
% # &.:% ) e
~
}~ ] {
return (new quickSort());
}
Ê ' # & b!`! ` $
% e
~
D] {
return (new bAb());
}
Ê ' # & b!`! ` $
% $! e
~
] {
return (new Greedy());
}
}
ääAå äæ
23
&yGLJRV
30HGLUWLHPSRVHQWUDQVIHUHQFLDGHGDWRV
cï
Ejercicios_RMIï Tiempos_en_Transferencia_Datos/....
3&OLHQWHGHVFDUJDFyGLJRVGHXQVHUYLGRU
./Ejercicios_RMI/Carga_Remota_de_Codigo/Tareas_simple/....
333ROLPRUILVPR\6REUHFDUJD
./Ejercicios_RMI/Carga_Remota_de_Codigo/Tareas_extendido/....
äîOå äæ
0XQGR-DYD
Máquina Virtual Java
äðOå äæ
24
5HIHUHQFLDVELEOLRJUiILFDV
• Información on-line de Sun (ñBòóôõ òö÷òõ øôùú û!üôýþõ ÿ ôû!òýÿ ÿ ýþõ ÿ ôû ). www.sun.com
• Orfali R. & Harkey D. Client/Server Programming with JAVA and CORBA. Ed. Wiley,
segunda edición.
• Daniel J. Berg & J. Steven Fritzinger, Advanced Techniques for Java Developers, Ed.
Wiley, primera edición. 1998.
• J. Jaworski. Java 1.2. al descubierto. Ed. Prentice Hall, primera edición. 1999.
äæOå äæ
25