Publicado el 27 de Febrero del 2017
1.163 visualizaciones desde el 27 de Febrero del 2017
266,2 KB
37 paginas
Creado hace 19a (21/03/2006)
Java RMI
las RPC de Java. Parte I
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y Programación
Universidad Complutense de Madrid
21 de marzo de 2006
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
RMI y RPC
RPC: Remote Procedure Call.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
RMI y RPC
RPC: Remote Procedure Call.
RMI: Remote Method Invocation.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
RMI y RPC
RPC: Remote Procedure Call.
RMI: Remote Method Invocation.
Llamada a métodos (procedimientos, funciones) que están en otra
máquina abstracta,
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
RMI y RPC
RPC: Remote Procedure Call.
RMI: Remote Method Invocation.
Llamada a métodos (procedimientos, funciones) que están en otra
máquina abstracta,
de la misma máquina,
de una máquina remota.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Definición de objetos remotos
El cliente y el servidor deben conocer un interfaz común. El
cliente sólo conoce el interfaz.
El servidor debe implementar el interfaz java.rmi.Remote.
p a c k a g e
e j e m p l o s R M I . hebras ;
import java . rmi . Remote ;
import java . rmi . R e m o t e E x c e p t i o n ;
public i n t e r f a c e P r u e b a 1 e x t e n d s Remote {
public int mete ( String s ) throws R e m o t e E x c e p t i o n , I n t e r r u p t e d E x c e p t i o n ;
public int saca ()
throws R e m o t e E x c e p t i o n ;
}
1
2
3
4
5
6
7
8
9
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Servidor
p a c k a g e
e j e m p l o s R M I . hebras ;
import java . rmi . server . U n i c a s t R e m o t e O b j e c t ;
import java . rmi . R e m o t e E x c e p t i o n ;
import java . rmi . R M I S e c u r i t y M a n a g e r ;
import java . rmi . Naming ;
public class P r u e b a 1 I m p l e x t e n d s U n i c a s t R e m o t e O b j e c t i m p l e m e n t s P r u e b a 1 {
p r i v a t e int h a n E n t r a d o ;
public s y n c h r o n i z e d int
mete ( String s )
throws R e m o t e E x c e p t i o n , I n t e r r u p t e d E x c e p t i o n {
h a n E n t r a d o ++;
System . out . p r i n t l n ( " E n t r a n d o : " + s + " : " + " han e n t r a d o : " + h a n E n t r a d o );
wait ();
System . out . p r i n t l n ( " S a l i e n d o : " + s + " : " + " hay dentro : " + h a n E n t r a d o );
return h a n E n t r a d o ;
}
public s y n c h r o n i z e d int
saca ()
throws R e m o t e E x c e p t i o n {
System . out . p r i n t l n ( " s a c a n d o ... " );
notify ();
return h a n E n t r a d o ;
}
public P r u e b a 1 I m p l () throws R e m o t e E x c e p t i o n {
h a n E n t r a d o = 0;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Cliente I
Problema: El cliente sólo conoce un interfaz.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Cliente II
Problema: El cliente sólo conoce un interfaz.¿Cómo construye un
objeto al cual invocar?
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Cliente III
Problema: El cliente sólo conoce un interfaz.¿Cómo construye un
objeto al cual invocar?
1 Debe buscar un servidor
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Cliente IV
Problema: El cliente sólo conoce un interfaz.¿Cómo construye un
objeto al cual invocar?
1 Debe buscar un servidor y dentro del servidor un nombre:
rmi://127.0.0.1/prueba1.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Cliente V
Problema: El cliente sólo conoce un interfaz.¿Cómo construye un
objeto al cual invocar?
1 Debe buscar un servidor y dentro del servidor un nombre:
rmi://127.0.0.1/prueba1.
2 En el servidor debe darle el objeto.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Cliente VI
Problema: El cliente sólo conoce un interfaz.¿Cómo construye un
objeto al cual invocar?
1 Debe buscar un servidor y dentro del servidor un nombre:
rmi://127.0.0.1/prueba1.
2 En el servidor debe darle el objeto. Fichero Stub.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Cliente VII
p a c k a g e
e j e m p l o s R M I . hebras ;
import java . rmi . N o t B o u n d E x c e p t i o n ;
import java . rmi . R e m o t e E x c e p t i o n ;
import java . rmi . Naming ;
import java . net . M a l f o r m e d U R L E x c e p t i o n ;
public class C l i e n t e 1 {
public static void main ( String args []) throws N o t B o u n d E x c e p t i o n ,
M a l f o r m e d U R L E x c e p t i o n ,
R e m o t e E x c e p t i o n ,
I n t e r r u p t e d E x c e p t i o n {
String url = args [0];
String yo = args [1];
System . out . p r i n t l n ( " B u s c a n d o " + url + " ... " );
P r u e b a 1 pr = ( P r u e b a 1 ) Naming . lookup ( url );
int n = pr . mete ( yo );
System . out . p r i n t l n ( " Han pasado : " + n );
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Cuestiones técnicas
Poner en marcha un servidor, registar un servicio.
Localizar la máquina y llamar al servicio.
En el servidor hay que arrancar el registro
# !/ b i n / sh
. ./ comun . sh
r m i r e g i s t r y &
echo $ ! >> $ P I D F I L E
1
2
3
4
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Registrar el servidor
public static void main ( String [] args ) {
String nombre = args [0];
if ( System . g e t S e c u r i t y M a n a g e r () == null ) {
System . s e t S e c u r i t y M a n a g e r ( new R M I S e c u r i t y M a n a g e r ());
}
try {
P r u e b a 1 s e r v i d o r = new P r u e b a 1 I m p l ();
Naming . rebind ( nombre , s e r v i d o r );
System . out . p r i n t l n ( " S e r v i d o r " + nombre + " f u n c i o n a n d o " );
} catch ( E x c e p t i o n e ) {
System . err . p r i n t l n ( "ó E x c e p c i n en " + nombre + " : " + e . g e t M e s s a g e ());
e . p r i n t S t a c k T r a c e ();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Arrancando todo I
Parte comun
# !/ b i n / sh
c o n t r o l A c c e s o = " - Djava . s e c u r i t y . policy =./ s e r v i d o r . policy "
JAVA = " java $ c o n t r o l A c c e s o "
url = " rmi :// l o c a l h o s t / p r u e b a 1 "
export C L A S S P A T H =~/ Java / c l a s s e s
P I D F I L E = pids
Servidor
# !/ b i n / sh
. ./ comun . sh
$JAVA e j e m p l o s R M I . hebras . P r u e b a 1 I m p l $url &
echo $ ! >> $ P I D F I L E
Para finalizar...
# !/ b i n / sh
. ./ comun . sh
kill -9 ‘ cat $PIDFILE ‘
rm $ P I D F I L E
1
2
3
4
5
6
1
2
3
4
1
2
3
4
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Arrancando todo II
Política de seguridad
grant c o d e b a s e " file :/ home / luis / Java / c l a s s e s / - " {
p e r m i s s i o n java . net . S o c k e t P e r m i s s i o n " *:1024 -65535 " , " connect , accept , r e s o l v e " ;
p e r m i s s i o n java . net . S o c k e t P e r m i s s i o n " *:80 " , " c o n n e c t " ;
};
Clientes
# !/ b i n / sh
. ./ comun . sh
$JAVA e j e m p l o s R M I . hebras . C l i e n t e S a c a 1 $url
$JAVA e j e m p l o s R M I . hebras . C l i e n t e S a c a 1 $url
$JAVA e j e m p l o s R M I . hebras . C l i e n t e S a c a 1 $url
$JAVA e j e m p l o s R M I . hebras . C l i e n t e S a c a 1 $url
# !/ b i n / sh
. ./ comun . sh
$JAVA e j e m p l o s R M I . hebras . C l i e n t e 1 $url A
$JAVA e j e m p l o s R M I . hebras . C l i e n t e 1 $url B
$JAVA e j e m p l o s R M I . hebras . C l i e n t e 1 $url C
$JAVA e j e m p l o s R M I . hebras . C l i e n t e 1 $url D
1
2
3
4
1
2
3
4
5
6
1
2
3
4
5
6
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Arrancando todo III
p a c k a g e
e j e m p l o s R M I . hebras ;
import java . rmi . N o t B o u n d E x c e p t i o n ;
import java . rmi . R e m o t e E x c e p t i o n ;
import java . rmi . Naming ;
import java . net . M a l f o r m e d U R L E x c e p t i o n ;
public class C l i e n t e S a c a 1 {
public static void main ( String args [])
throws N o t B o u n d E x c e p t i o n , M a l f o r m e d U R L E x c e p t i o n ,
R e m o t e E x c e p t i o n , I n t e r r u p t e d E x c e p t i o n {
String url = args [0];
P r u e b a 1 pr = ( P r u e b a 1 ) Naming . lookup ( url );
int n = pr . saca ();
System . out . p r i n t l n ( " Han e n t r a d o : " + n );
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Ficheros Stub
El cliente necesita el objeto remoto, sucedáneo el fichero Stub.
Usage : rmic < options > < class names >
where < options > i n c l u
Comentarios de: Java RMI - las RPC de Java. Parte I (0)
No hay comentarios