Corba Java EJEMPLO

7
CORBA desde Java Diego Sevilla Ruiz Sistemas Distribuidos, 5 o ´ Indice 1. Intr oducci ´ on 1 2. Primeros pasos 1 2.1. Fichero IDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2.2. Cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.3. Imple men taci´ on del servant . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.4. El servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3. Ejecuci´ on 6 4. Revisi´ on 7 1. Introducci´ on Este documento explica los prime ros pasos para usar CORBA desde Jav a. Prime ro se describe un ejemplo sencillo y luego se ofrece un cliente Java para el servidor visto en C++. Con cualquier JDK se pueden realizar los ejemplos propuestos. 2. Primeros pasos Para comprender el funcionamiento de CORBA desde Java, introduciremos un ejemplo sencillo de una aplicaci´ on que dene un IDL, un cliente y un servidor. 2.1. Ficher o IDL El chero IDL,  Calculadora.idl  es el siguiente: 1  module  prueba { 3  interface  Calculadora { 5  double  add( in double  x,  in double  y ) ; 1

Transcript of Corba Java EJEMPLO

Page 1: Corba Java EJEMPLO

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

Page 2: Corba Java EJEMPLO

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

Page 3: Corba Java EJEMPLO

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

Page 4: Corba Java EJEMPLO

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

Page 5: Corba Java EJEMPLO

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

Page 6: Corba Java EJEMPLO

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

Page 7: Corba Java EJEMPLO

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