Está en la página 1de 7

CORBA desde Java

Diego Sevilla Ruiz Sistemas Distribuidos, 5o

Indice
1. Introduccin o 2. Primeros pasos 2.1. Fichero IDL . . 2.2. Cliente . . . . . 2.3. Implementacin o 2.4. El servidor . . 3. Ejecucin o 4. Revisin o 1 1 1 2 3 5 6 7

. . . . del . .

. . . . . . . . . . servant . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

1.

Introduccin o

Este 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 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 aplicacin que dene un IDL, un cliente y un servidor. o

2.1.

Fichero IDL
module prueba { interface Calculadora { double add ( in double x , in double y ) ;

El chero IDL, Calculadora.idl es el siguiente:


1

double substract ( in double x , in double y ) ; double multiply ( in double x , in double y ) ; double divide ( in double x , in double y ) ; void storeMemory ( in double x ) ; double readMemory () ; }; };

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 ejecutamos con la opcin ((-fall)), para que genere tanto los stubs como los skeletons: o $ idlj -fall Calculadora.idl Esto genera los cheros de stub y skeleton dentro del subdirectorio ((prueba)): $ ls prueba -C1 CalculadoraHelper.java CalculadoraHolder.java Calculadora.java CalculadoraOperations.java CalculadoraPOA.java _CalculadoraStub.java

2.2.

Cliente

A continuacin se muestra el cliente (Cliente.java): Es un programa que es capaz o de utilizar el objeto Calculadora:
package prueba ;
2

import prueba .*; import org . omg . CORBA .*; import java . io .*;

10

12

public class Cliente { public static void main ( String args []) { try { // Iniciar el ORB org . omg . CORBA . ORB orb = org . omg . CORBA . ORB . init ( args , null ) ; // Leer el IOR del fichero File IORFile = new File ( " IOR " ) ; FileReader reader = new FileReader ( IORFile ) ; BufferedReader buf = new BufferedReader ( reader ) ; String IOR = buf . readLine () ;

14

16

18

20

22

24

// Convertir el IOR en un objeto org . omg . CORBA . Object o = orb . string_to_object ( IOR ) ; Calculadora calc = CalculadoraHelper . narrow ( o ) ; // Usar la calculadora System . out . println ( calc . add (2.0 ,3.0) ) ; } catch ( Exception e ) { e . printStackTrace () ; } } }

26

28

30

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 funcin o de librer Esta llamada realiza todas las funciones de inicializacin para el ORB. a. o L nea 24: Se utiliza la operacin del ORB string to object para convertir el o IOR dado en la l nea de comando como primer parmetro en una referencia a un a objeto CORBA. Todos los objetos CORBA heredan de la interfaz CORBA::Object (org.omg.CORBA.Object). L nea 25: El mtodo narrow de la clase CalculadoraHelper (generado automtie a camente) se utiliza para especializar la referencia obtenida a un objeto del tipo espec co. En este caso Calculadora. La funcin devolver en calc la referencia o a especializada a un objeto de tipo Calculadora, o ((null)) si la conversin no se o puede realizar L nea 28: Se realiza la llamada propiamente dicha. La abstraccin proporcionada o por CORBA permite hacer una llamada al objeto remoto como si fuera un objeto local. El resultado se imprime por la pantalla.

2.3.

Implementacin del servant o

Para implementar un objeto CORBA, esto es, para ofrecer sus servicios al mundo, se tienen que implementar dos cosas: El servant que contiene la implementacin de los mtodos del interfaz que se ofrece o e al exterior, y un servidor, que quedar esperando conexiones en un puerto IP. a El servant es simplemente un objeto del lenguaje de programacin (en este caso Java) o que implementa la funcionalidad de los mtodos del objeto CORBA. Este servant es e llamado por el skeleton cuando un cliente llama a un mtodo del objeto CORBA implee mentado por ese servant. El cdigo del servant es el que se muestra a continuacin. Se o o ha implementado las funciones de la calculadora en el chero CalculadoraImpl.java:

package prueba ;
2

class CalculadoraImpl extends CalculadoraPOA { private double memory_ ; public CalculadoraImpl () { memory_ = 0; } public double add ( double x , double y ) { return x + y ; } public double substract ( double x , double y ) { return x - y ; } public double multiply ( double x , double y ) { return x * y ; } public double divide ( double x , double y ) { double result = 0; try { result = x / y ; } catch ( Exception e ) { } return result ;

10

12

14

16

18

20

22

24

26

28

30

32

34

36

38

} public void storeMemory ( double x ) { memory_ = x ; } public double readMemory () { return memory_ ; } }

40

42

44

46

48

De destacar en este chero es: El servant se implementa en una clase CalculadoraImpl. Todas las clases servant

heredan de la clase ((<interfaz>POA)). El interfaz de ese objeto, salvo algunos mtodos adicionales que se explican en la e teor de la asignatura, sigue el denido en el IDL. a

2.4.

El servidor

En cualquier aplicacin CORBA debe existir un servidor que quede esperando las o peticiones sobre los objetos CORBA implementados por l (servants). El servidor es un e programa Java normal que dejar activado un servant para el objeto CORBA. a
1

package prueba ; import org . omg . CORBA .*; import org . omg . PortableServer .*; public class Servidor { public static void main ( String [] args ) { try { // Iniciar el ORB org . omg . CORBA . ORB orb = org . omg . CORBA . ORB . init ( args , null ) ; // Objeto auxiliar org . omg . CORBA . Object o ; // Encontrar el POA ra z POA rootPOA ; o = orb . r e s o l v e _ i n i t i a l _ r e f e r e n c e s ( " RootPOA " ) ; rootPOA = POAHelper . narrow ( o ) ; // Activar el POA rootPOA . the_POAManager () . activate () ; // Crear el objeto implmentaci n o

11

13

15

17

19

21

23

25

27

29

prueba . CalculadoraImpl calcImpl = new prueba . CalculadoraImpl () ; // Registrarlo en el POA o = rootPOA . s e r v a n t _ t o _ r e f e r e n c e ( calcImpl ) ; prueba . Calculadora calc = prueba . CalculadoraHelper . narrow ( o ) ; // Producir la direcci n del objeto o String ior = orb . object_to_string ( calc ) ; System . out . println ( ior ) ; // Esperar llamadas orb . run () ;

31

33

35

37

39

41

43

45

47

} catch ( Exception e ) { e . printStackTrace () ; } } }

49

El servidor contiene casi toda la carga de la dicultad de la programacin con CORBA. o Las tareas que implementa el servidor son las siguientes: L nea 13: El ORB se inicia como en el cliente. L neas 1924: Se obtiene el POA ra El objeto servidor se tiene que registrar en z. un adaptador de objetos (OA). En CORBA, el POA es el adaptador de objetos, que se puede congurar como una jerarqu En este caso, registraremos el objeto a. en el POA ra (RootPOA). Para la mayor de los usos, este adaptador de objetos z a es suciente. Se obtiene el POA Manager. Este manager controla a un conjunto de adaptadores de objetos, permitindoles funcionar, o bien encolar las peticiones e o rechazarlas. Finalmente, se activa el POAManager. L nea 29: Se crea un objeto servant CalculadoraImpl. L nea 32: Se utiliza el mtodo servant to reference del POA para obtener una e referencia 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 funcin del o ORB object to string. L neas 4352: La referencia en formato cadena de caracteres se imprime por pantalla. L nea 42: El ORB se pone a funcionar (esperar peticiones). con la funcin run del o ORB. El servidor queda as esperando las peticiones de los clientes.

3.

Ejecucin o

Una t pica ejecucin del programa podr ser la siguiente: o a $ java prueba.Servidor | tee IOR IOR:000... $ cat IOR IOR:000...

$ java prueba.Cliente 5.0

4.

Revisin o

$Id: corba-java.tex 1591 2006-12-12 09:58:08Z dsevilla $

También podría gustarte