corba java ejemplo
Post on 05-Jul-2015
1.154 Views
Preview:
TRANSCRIPT
5/4/2018 Corba Java EJEMPLO - slidepdf.com
http://slidepdf.com/reader/full/corba-java-ejemplo 1/7
CORBA desde Java
Diego Sevilla Ruiz
Sistemas Distribuidos, 5o
Indice
1. Introduccion 1
2. Primeros pasos 1
2.1. Fichero IDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2. Cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.3. Implementacion del servant . . . . . . . . . . . . . . . . . . . . . . . . . . 32.4. El servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3. Ejecucion 6
4. Revision 7
1. IntroduccionEste documento explica los primeros pasos para usar CORBA desde Java. Primero se
describe un ejemplo sencillo y luego se ofrece un cliente Java para el servidor visto enC++. Con cualquier JDK se pueden realizar los ejemplos propuestos.
2. Primeros pasos
Para comprender el funcionamiento de CORBA desde Java, introduciremos un ejemplosencillo de una aplicacion que define un IDL, un cliente y un servidor.
2.1. Fichero IDL
El fichero IDL, Calculadora.idl es el siguiente:
1 module prueba
{
3 interface Calculadora
{
5 double add( i n d o ub l e x , i n d o ub l e y );
1
5/4/2018 Corba Java EJEMPLO - slidepdf.com
http://slidepdf.com/reader/full/corba-java-ejemplo 2/7
double s u b s t r a c t (i n d o ub l e x , i n d o ub l e y) ;
7 double m u l t i p l y (i n d o ub l e x , i n d o ub l e y );
double d i v i d e (i n d o ub l e x , i n d o ub l e y ) ;
9 void s t o r e M e m o r y (i n d o ub l e x ) ;
double r e a d M e m o r y ( ) ;
11 };};
Las funciones son las normales de una calculadora, como se puede ver.Para generar los stubs y skeletons, hay que ejecutar el compilador de IDL. Lo ejecu-
tamos con la opcion ((-fall)), para que genere tanto los stubs como los skeletons:
$ idlj -fall Calculadora.idl
Esto genera los ficheros de stub y skeleton dentro del subdirectorio ((prueba)):
$ ls prueba -C1
CalculadoraHelper.javaCalculadoraHolder.java
Calculadora.java
CalculadoraOperations.java
CalculadoraPOA.java
_CalculadoraStub.java
2.2. Cliente
A continuacion se muestra el cliente (Cliente.java): Es un programa que es capazde utilizar el objeto Calculadora:
package prueba;2
import prueba.*;
4 import o r g . o m g . C O R B A . * ;
import java.io.*;
6
8 p u b l ic c l a ss Cliente
{
10 p u bl i c s t at i c v o id m a i n ( S t r i ng a r g s [ ] )
{
12 tr y {
14 / / I ni ci ar e l O RB
o r g . o m g . C O R BA . O R B o r b = o r g . o m g . C O R BA . O R B . i n i t ( a r gs , null ) ;
16
/ / L ee r e l I OR d el f ic he ro
18 F i le I O RF i le = ne w File( " I O R ") ;
F i l eR e ad e r r e ad e r = ne w F i l e R e a d e r ( I O R F i l e ) ;
20 B u f fe r e dR e a de r b uf = ne w B u f f e r e d R e a d e r ( r e a d e r ) ;
S t ri n g I OR = b uf . r e a dL i ne ( ) ;
22
2
5/4/2018 Corba Java EJEMPLO - slidepdf.com
http://slidepdf.com/reader/full/corba-java-ejemplo 3/7
/ / C on ve rt ir e l I OR e n u n o bj et o
24 o r g . o m g . C O R BA . O b j e c t o = o r b . s t r i n g _ t o _o b j e c t ( I O R ) ;
C a l c u l a do r a c a l c = C a l c u l a d o ra H e l p e r . n a r r o w ( o ) ;
26
/ / U s ar l a c a l cu l a do r a
28 S y s t e m . o u t . p r i n t l n ( c a l c . a d d ( 2 . 0 , 3 . 0 ) ) ;
30 } catch ( E x ce pt io n e ) {
e . p r i n t S t a c k T r a c e ( ) ;
32 }
}
34 }
El cliente realiza las siguientes labores:
Lınea 3: Incluye el paquete con el stub para el tipo de objeto Calculadora.
Lınea 15: Se inicia el ORB. Normalmente, el ORB se implementa como una funcion
de librerıa. Esta llamada realiza todas las funciones de inicializacion para el ORB.Lınea 24: Se utiliza la operacion del ORB string to object para convertir elIOR dado en la lınea de comando como primer parametro en una referencia a unobjeto CORBA. Todos los objetos CORBA heredan de la interfaz CORBA::Object
(org.omg.CORBA.Object).
Lınea 25: El metodo narrow de la clase CalculadoraHelper (generado automati-camente) se utiliza para especializar la referencia obtenida a un objeto del tipoespecıfico. En este caso Calculadora. La funcion devolvera en calc la referenciaespecializada a un objeto de tipo Calculadora, o ((null)) si la conversion no sepuede realizar
Lınea 28: Se realiza la llamada propiamente dicha. La abstraccion proporcionadapor CORBA permite hacer una llamada al objeto remoto como si fuera un objetolocal. El resultado se imprime por la pantalla.
2.3. Implementacion del servant
Para implementar un objeto CORBA, esto es, para ofrecer sus servicios al mundo, setienen que implementar dos cosas:
El servant que contiene la implementacion de los metodos del interfaz que se ofreceal exterior,
y un servidor, que quedara esperando conexiones en un puerto IP.
El servant es simplemente un objeto del lenguaje de programacion (en este caso Java)que implementa la funcionalidad de los metodos del objeto CORBA. Este servant esllamado por el skeleton cuando un cliente llama a un metodo del objeto CORBA imple-mentado por ese servant. El codigo del servant es el que se muestra a continuacion. Seha implementado las funciones de la calculadora en el fichero CalculadoraImpl.java:
3
5/4/2018 Corba Java EJEMPLO - slidepdf.com
http://slidepdf.com/reader/full/corba-java-ejemplo 4/7
package prueba;
2
class CalculadoraImpl extends CalculadoraPOA
4 {
p r i v a te d o u b le memory_;6
public C a l c u l a d o r a I m p l ( )
8 {
m e mo r y_ = 0 ;
10 }
12 p u b l ic d o u b le add( double x , double y)
{
14 return x + y ;
}
16
p u b l ic d o u b le s u b s t r a c t (double x , double y)
18 {
return x - y ;20 }
22 p u b l ic d o u b le m u lt i pl y ( double x , double y)
{
24 return x * y ;
}
26
p u b l ic d o u b le d i vi d e ( double x , double y )
28 {
double r es ul t = 0 ;
30
tr y {
32
r es ul t = x / y ;} catch ( E x c ep t io n e )
34 {
}
36
return result;
38 }
40 p u b l ic v o i d s t o r e M e mo r y ( double x )
{
42 m em or y_ = x ;
}
44
p u b l ic d o u b le r e a d M e m or y ( )
46 {return memory_;
48 }
}
De destacar en este fichero es:
El servant se implementa en una clase CalculadoraImpl. Todas las clases servant
4
5/4/2018 Corba Java EJEMPLO - slidepdf.com
http://slidepdf.com/reader/full/corba-java-ejemplo 5/7
heredan de la clase ((<interfaz>POA)).
El interfaz de ese ob jeto, salvo algunos metodos adicionales que se explican en lateorıa de la asignatura, sigue el definido en el IDL.
2.4. El servidor
En cualquier aplicacion CORBA debe existir un servidor que quede esperando laspeticiones sobre los objetos CORBA implementados por el (servants). El servidor es unprograma Java normal que dejara activado un servant para el objeto CORBA.
1 package prueba;
3 import o r g . o m g . C O R B A . * ;
import o r g . o m g . P o r t a b l e S e r v e r . * ;
5
p u b l ic c l a ss Servidor
7 {
p u bl i c s t at i c v o id m a i n ( S t r i ng [ ] a r g s )
9 {
tr y {
11
/ / I ni ci ar e l O RB
13 o r g . o m g . C O R BA . O R B o r b = o r g . o m g . C O R BA . O R B . i n i t ( a r gs , null ) ;
15 / / O b je t o a u xi l ia r
o r g . o m g . C O R BA . O b j e c t o ;
17
/ / E nc on tr ar e l P OA r a´ ız
19 P OA r o ot P OA ;
o = o rb . r e s o l v e_ i n it i a l _r e f e re n c es ( " R o o t P O A ") ;
21 r o o t P OA = P O A H e l pe r . n a r r o w ( o ) ;
23 / / A ct iv ar e l P OA
r o o t P O A . t h e _ P O A M a n a g e r ( ) . a c t i v a t e ( ) ;
25
/ / C r ea r e l o b je t o i m p lm e n ta c i ´ o n
27
p r u e ba . C a l c u l a d o r a I m p l c a l c I mp l =
29 ne w p r u e b a . C a l c u l a d o r a I m p l ( ) ;
31 / / R eg i st ra r lo e n e l P OA
o = r o o t P OA . s e r v a n t _ t o _ r e f e r e n c e ( c a l c I m pl ) ;
33
p r ue b a . C a lc u la d o ra c a lc =
35 p r u e b a . C a l c u l a d o r a H e l p e r . n a r r o w ( o ) ;
37 / / P r od u ci r l a d i r ec c i´ o n d el o bj et o
S t ri n g i or = o rb . o b j e ct _ t o_ s t ri n g ( c a lc ) ;
39 S y s t e m . o u t . p r i n t l n ( i o r ) ;
41 / / E s pe r ar l l am a da s
o r b . r u n ( ) ;
5
5/4/2018 Corba Java EJEMPLO - slidepdf.com
http://slidepdf.com/reader/full/corba-java-ejemplo 6/7
43
} catch ( E x c ep t io n e )
45 {
e . p r i n t S t a c k T r a c e ( ) ;
47 }
}49 }
El servidor contiene casi toda la carga de la dificultad de la programacion con CORBA.Las tareas que implementa el servidor son las siguientes:
Lınea 13: El ORB se inicia como en el cliente.
Lıneas 19–24: Se obtiene el POA raız. El objeto servidor se tiene que registrar enun adaptador de objetos (OA). En CORBA, el POA es el adaptador de objetos,que se puede configurar como una jerarquıa. En este caso, registraremos el objetoen el POA raız (RootPOA). Para la mayorıa de los usos, este adaptador de ob jetos
es suficiente. Se obtiene el POA Manager . Este manager controla a un conjuntode adaptadores de objetos, permitiendoles funcionar, o bien encolar las peticioneso rechazarlas. Finalmente, se activa el POAManager.
Lınea 29: Se crea un objeto servant CalculadoraImpl.
Lınea 32: Se utiliza el metodo servant to reference del POA para obtener unareferencia CORBA a partir de un servant .
Lınea 35: La referencia se convierte a una referencia de un interfaz Calculadora.Este paso no es necesario, se muestra por completitud.
Lınea 38: La referencia se convierte en una cadena de caracteres con la funcion delORB object to string.
Lıneas 43–52: La referencia en formato cadena de caracteres se imprime por pan-talla.
Lınea 42: El ORB se pone a funcionar (esperar peticiones). con la funcion run delORB. El servidor queda ası esperando las peticiones de los clientes.
3. Ejecucion
Una tıpica ejecucion del programa podrıa ser la siguiente:
$ java prueba.Servidor | tee IOR
IOR:000...
$ cat IOR
IOR:000...
6
5/4/2018 Corba Java EJEMPLO - slidepdf.com
http://slidepdf.com/reader/full/corba-java-ejemplo 7/7
$ java prueba.Cliente
5.0
4. Revision
$Id: corba-java.tex 1591 2006-12-12 09:58:08Z dsevilla $
7
top related