Publicado el 31 de Julio del 2017
777 visualizaciones desde el 31 de Julio del 2017
118,6 KB
15 paginas
Creado hace 19a (27/03/2006)
Java RMI
las RPC de Java. Parte II
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y Programación
Universidad Complutense de Madrid
27 de marzo de 2006
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Distribución de clases I
Es conveniente distinguir:
servidor . Necesarias para el registro (rmiregistry) y el
servidor.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Distribución de clases II
Es conveniente distinguir:
servidor . Necesarias para el registro (rmiregistry) y el
servidor.servidor.jar
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Distribución de clases III
Es conveniente distinguir:
servidor . Necesarias para el registro (rmiregistry) y el
servidor.servidor.jar
cliente Necesita, al menos el interfaz del
servidor.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Distribución de clases IV
Es conveniente distinguir:
servidor . Necesarias para el registro (rmiregistry) y el
servidor.servidor.jar
cliente Necesita, al menos el interfaz del
servidor.cliente.jar
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Distribución de clases V
Es conveniente distinguir:
servidor . Necesarias para el registro (rmiregistry) y el
servidor.servidor.jar
cliente Necesita, al menos el interfaz del
servidor.cliente.jar
stub Necesarios para el resgistro, el servidor y los clientes.
cliente.jar
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Distribución de clases VI
Es conveniente distinguir:
servidor . Necesarias para el registro (rmiregistry) y el
servidor.servidor.jar
cliente Necesita, al menos el interfaz del
servidor.cliente.jar
stub Necesarios para el resgistro, el servidor y los clientes.
cliente.jar
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Distribución de clases VII
< target name = " d i s t r i b u y e " d e p e n d s = " compile , c o m p i l e _ s t u b " >
< jar j a r f i l e = " c a n a l e s _ s t u b . jar "
b a s e d i r = " ${ build } " c o m p r e s s = " yes "
i n c l u d e s = " e j e m p l o s R M I /${ nombre }/ G e s t o r A n t a r e s _ S t u b . class ,
e j e m p l o s R M I /${ nombre }/ C a n a l S i n c _ S t u b . class " / >
< jar j a r f i l e = " s e r v i d o r . jar " c o m p r e s s = " yes "
b a s e d i r = " ${ build } "
i n c l u d e s = " e j e m p l o s R M I /${ nombre }/ Canal . class ,
e j e m p l o s R M I /${ nombre }/ G e s t o r A n t a r e s . class ,
e j e m p l o s R M I /${ nombre }/ G e s t o r A n t a r e s _ S t u b . class ,
e j e m p l o s R M I /${ nombre }/ Gestor . class "
/ >
< jar j a r f i l e = " c l i e n t e . jar " c o m p r e s s = " yes "
b a s e d i r = " ${ build } "
i n c l u d e s = " e j e m p l o s R M I /${ nombre }/ ,
e j e m p l o s R M I /${ nombre }/ Canal . class ,
e j e m p l o s R M I /${ nombre }/ C a n a l S i n c . class ,
e j e m p l o s R M I /${ nombre }/ Envia . class ,
e j e m p l o s R M I /${ nombre }/ Gestor . class ,
e j e m p l o s R M I /${ nombre }/ Prueba . class ,
e j e m p l o s R M I /${ nombre }/ Recibe . class "
/ >
</ target >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Distribución de clases VIII
# !/ b i n / sh
. ./ comun . sh
export C L A S S P A T H = s e r v i d o r . jar
CLASE = G e s t o r A n t a r e s
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 "
url = " rmi :// " 1 2 7 . 0 . 0 . 1 : $ p u e r t o / gestor
$JAVA $ c o n t r o l A c c e s o e j e m p l o s R M I . c a n a l e s . G e s t o r A n t a r e s $url &
echo $ ! >> $ P I D F I L E
1
2
3
4
5
6
7
8
9
# !/ b i n / sh
. ./ comun . sh
export C L A S S P A T H = c l i e n t e . jar
r m i S e r v e r = " - Djava . rmi . server . c o d e b a s e = http :// a n t a r e s . sip . ucm . es /~ luis / clases / c a n a l e s _ s t u
c o n t r o l A c c e s o = " - Djava . s e c u r i t y . policy =./ c l i e n t e . policy "
url = " rmi : / / 1 2 7 . 0 . 0 . 1 : $ p u e r t o / gestor "
$JAVA $ c o n t r o l A c c e s o $ r m i S e r v e r e j e m p l o s R M I . c a n a l e s . Prueba $url e : ae : a e : be : b &
echo $ ! >> $ P I D F I L E
$JAVA $ c o n t r o l A c c e s o $ r m i S e r v e r e j e m p l o s R M I . c a n a l e s . Prueba $url r : ar : a r : br : b &
echo $ ! >> $ P I D F I L E
1
2
3
4
5
6
7
8
9
10
11
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Parametros I
Objetos normales: Son parámetros por valor.
¡NO siguen la regla general de Java!.
Se deben poder serializar: deben implementar
java.io.Serializable.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Parametros II
Objetos remotos: Se comportan como los objetos normales: por
referencia.
¡No viajan! se quedan en el cliente.
El cliente necesita el Stub en su CLASSPATH.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Parametros III
p a c k a g e s o p o r t e ;
import java . io . S e r i a l i z a b l e ;
public class Entero i m p l e m e n t s O b j e t o C o m p a r a b l e , S e r i a l i z a b l e {
public Entero ( int x )
{
c o n t e n i d o = x ;
}
public void inc () {
c o n t e n i d o ++;
}
}
1
2
3
4
5
6
7
8
9
10
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Parametros IV
p a c k a g e e j e m p l o s R M I . tienda ;
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 O b j e t o R e m o t o e x t e n d s Remote {
public void m o d i f i c a ()
public double valor () throws R e m o t e E x c e p t i o n ;
throws R e m o t e E x c e p t i o n ;
}
p a c k a g e e j e m p l o s R M I . tienda ;
import java . rmi . R e m o t e E x c e p t i o n ;
import java . rmi . server . U n i c a s t R e m o t e O b j e c t ;
public class E n t e r o R e m o t o 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 O b j e t o R e m o t o {
p r i v a t e int c o n t e n i d o ;
public E n t e r o R e m o t o ( int n ) throws R e m o t e E x c e p t i o n {
c o n t e n i d o = n ;
}
public void m o d i f i c a () throws R e m o t e E x c e p t i o n {
c o n t e n i d o ++;
}
public double valor () {
return c o n t e n i d o ;
}
}
1
2
3
4
5
6
7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Parametros V
p a c k a g e e j e m p l o s R M I . tienda ;
import java . rmi . Remote ;
import java . rmi . R e m o t e E x c e p t i o n ;
import s o p o r t e . Entero ;
public i n t e r f a c e S e r v i d o r T i e n d a e x t e n d s Remote {
public a b s t r a c t double precio ( Entero o )
public a b s t r a c t double precio ( O b j e t o R e m o t o o )
throws R e m o t e E x c e p t i o n ;
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
10
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Java RMI
Parametros VI
public class T i e n d a I n c 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 S e r v i d o r T i e n d a {
p r i v a t e String nombre ;
public T i e n d a I n c ( String _ n o m b r e ) throws R e m o t e E x c e p t i o n {
nombre = _ n o m b r e ;
}
public double precio ( Entero n )
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 ( " Valor en servidor -1: " + n . valor ());
n . inc ();
System . out . p r i n t l n ( " Valor en servidor -2: " + n . valor ());
return n . valor ();
}
public double precio ( O b j e t o R e m o t o n )
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 ( " Valor en servidor -1: " + n . valor ());
n . m o d i f i c a ();
System . out . p r i n t l n ( " Valor en servidor -2: " + n . valor ());
return n . valor ()*2;
}
}
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
Comentarios de: Java RMI - las RPC de Java. Parte II (0)
No hay comentarios