You are on page 1of 6

ORBacus en Java

Llevando a cabo el Ejemplo en Java


Con el fin de poner en prctica esta aplicacin en Java, la interfaz especificada en IDL se traduce a las clases de Java similares a la forma en que el cdigo C + + fue creado. El ORBacus IDL a Java Traductor jidl se usa de esta manera:
jidl --package hello Hello.idl

Este comando resulta en varios archivos de cdigo fuente de Java en el que se basa la aplicacin real. Los archivos generados son Hello.java, HelloHelper.java, HelloHolder.java, HelloOperations.java, HelloPOA.java y _HelloStub.java, Todo lo generado en un directorio con el nombre hola.

Implementacin del servidor


Clase de implementacin Hola del servidor tiene el siguiente aspecto:
// Java package hello; public class Hello_impl extends HelloPOA { public void say_hello() { System.out.println("Hello World!"); } }

El Hello_impl clase de implementacin debe heredar de la clase generada HelloPOA. Al igual que con la implementacin en C + +, el mtodo decir_hola simplemente imprime "Hello World!" en la salida estndar. Guardar esta clase para el archivo Hello_impl.java en el directorio hola. Tambin tenemos que escribir una clase que posee principal del servidor () y ejecutar () mtodos. Llamamos a este servidor de clase, salvo que el archivo Server.java en el directorio hola:
// Java 2 package hello;
3 4 public class Server 5 { 6 public static void main(String args[]) 7 { 8 java.util.Properties props = System.getProperties(); 9 props.put("org.omg.CORBA.ORBClass", 10 11 12 13 14 15 16 17

"com.ooc.CORBA.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "com.ooc.CORBA.ORBSingleton"); int status = 0; org.omg.CORBA.ORB orb = null; try {

18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

orb = org.omg.CORBA.ORB.init(args, props); status = run(orb); } catch(Exception ex) { ex.printStackTrace(); status = 1; } if(orb != null) { try { orb.destroy(); } catch(Exception ex) { ex.printStackTrace(); status = 1; } } System.exit(status); }

8-11 18

Estas propiedades son necesarias para utilizar el ORB ORBacus en lugar de ORB del JDK.

El ORB se debe inicializar con ORB.init. La clase ORB reside en el paquete org.omg.CORBA. Usted debe importar este paquete, o, como se muestra en este ejemplo, debe utilizar org.omg.CORBA explcitamente.
19

llama a la funcin auxiliar run().

Este cdigo detecta e imprime todas las excepciones CORBA planteadas por ORB.init () o Run ().
21-25

Si el ORB sido creado con xito, se destruye. Esto libera los recursos utilizados por el ORB. Si destroy () lanza una excepcin en CORBA, esta excepcin se detecta y se imprime.
27-38 41

Se devuelve el estado de salida. Si no hubo error, se devuelve 0 o 1 en caso contrario.

Ahora escribimos el mtodo run ():


1 // Java 2 static int run(org.omg.CORBA.ORB orb) 3 throws org.omg.CORBA.UserException 4 { 5 org.omg.PortableServer.POA rootPOA = 6 org.omg.PortableServer.POAHelper.narrow( 7 orb.resolve_initial_references("RootPOA")); 8 9 org.omg.PortableServer.POAManager manager = 10 rootPOA.the_POAManager(); 11 12 Hello_impl helloImpl = new Hello_impl(); 13 Hello hello = helloImpl._this(orb); 14 15 try

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 }

{ String ref = orb.object_to_string(hello); String refFile = "Hello.ref"; java.io.PrintWriter out = new java.io.PrintWriter( new java.io.FileOutputStream(refFile)); out.println(ref); out.close(); } catch(java.io.IOException ex) { ex.printStackTrace(); return 1; } manager.activate(); orb.run(); return 0; }

Una referencia al POA raz se obtiene utilizando la referencia ORB y el POA raz se utiliza para obtener una referencia a su Gerente de POA.
5-10

Un siervo de tipo Hello_impl se crea y se usa para encarnar un objeto CORBA. la Objeto CORBA se libera automticamente cuando no se utiliza.
12-23 15-28

La referencia de objeto es "Stringified" y escribir en un archivo. El servidor entra en su ciclo de eventos para recibir las solicitudes entrantes.

30-31

Aplicacin del Cliente


Guardar a un archivo con el nombre Client.java en el directorio hola:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

// Java package hello; public class Client { public static void main(String args[]) { ... // Same as for the server }

static int run(org.omg.CORBA.ORB orb) { org.omg.CORBA.Object obj = null; try { String refFile = "Hello.ref"; java.io.BufferedReader in = new java.io.BufferedReader( 18 new java.io.FileReader(refFile)); 19 String ref = in.readLine(); 20 obj = orb.string_to_object(ref);

21 22 23 24 25 26 27 28 29 30 31 32 33 34 }

} catch(java.io.IOException ex) { ex.printStackTrace(); return 1; } Hello hello = HelloHelper.narrow(obj); hello.say_hello(); return 0; }

6-9

Este cdigo es el mismo que para el servidor. La referencia de objeto stringified se lee y se convierte en un objeto.

14-26 28

La referencia de objeto se "redujo" a una referencia a un objeto de Hola. Un simple reparto de Java no est permitido aqu, ya que es posible que el cliente tenga que pedir el servidor si el objeto es realmente de tipo Hola. La operacin decir_hola se invoca, haciendo que el servidor se imprime "Hello World!" En la salida estndar.
30

Compilacin
Asegrese de que la variable de entorno CLASSPATH incluye el directorio de trabajo actual, as como el ORBacus de clases de Java, es decir, el archivo OB.jar. Si usted est utilizando el shell Bourne shell de Unix o compatible, usted puede hacer esto con los siguientes comandos:
CLASSPATH=.:your_orbacus_directory/lib/OB.jar:$CLASSPATH export CLASSPATH

Reemplace su _orbacus_directory con el nombre del directorio donde est instalado ORBacus. Si est ejecutando ORBacus en un sistema basado en Windows, puede utilizar el siguiente comando en el intrprete de comandos de Windows:
set CLASSPATH=.;your_orbacus_directory\lib\OB.jar;%CLASSPATH%

Tenga en cuenta que en Windows se debe utilizar "," y no ":" como delimitador.

Para compilar las clases de implementacin y las clases generadas por el ORBacus traductor IDL a Java, usa javac (o el compilador Java de su eleccin):
javac hello/*.java

Ejecutar la aplicacin
El "Hello World" servidor Java se inicia con:
java hello.Server

Y el cliente con:
java hello.Client

Una vez ms, asegrese de que la variable de entorno CLASSPATH incluye el archivo OB.jar. Usted tambin puede utilizar un servidor de C + + junto con un cliente de Java (o vice versa). Esta es una de las principales ventajas de usar CORBA: si se define algo en CORBA IDL, el lenguaje de programacin utilizado para la puesta en prctica es irrelevante. Aplicaciones CORBA pueden hablar entre s, independientemente de la lengua que se escribe plugin.

resumen
En este punto , usted podra estar inclinado a pensar que este es el mtodo ms complicado de la impresin de una cadena que alguna vez te has encontrado en tu carrera como programador . A primera vista, un enfoque basado en CORBA hecho puede parecer complicado. Por otro lado , pensar en los beneficios que este tipo de enfoque tiene para ofrecer. Puede iniciar el servidor y las aplicaciones cliente en diferentes mquinas con exactamente los mismos resultados. En cuanto a la comunicacin entre el cliente y el servidor, usted no tiene que preocuparse acerca de los mtodos o protocolos especficos de la plataforma en todo, siempre hay un ORB CORBA disponibles para la plataforma y lenguaje de programacin de su eleccin. Si es posible, conseguir un poco de experiencia prctica e iniciar el servidor en una mquina, el cliente en otro1. Como se ver, las aplicaciones basadas en CORBA ejecuten indistintamente en entornos locales y de red. Un ltimo punto a tener en cuenta: es probable que no va a utilizar CORBA para desarrollar sistemas tan simples como el nuestro " Hola Mundo ! " Ejemplo . Cuanto ms compleja de las aplicaciones se vuelven (y las aplicaciones de hoy en da son complejas ) , ms se aprender a apreciar que tiene un alto nivel de abstraccin de interfaces clave de sus aplicaciones capturados en CORBA IDL .

A dnde ir desde aqu


Para entender los restantes captulos de este manual, usted debe haber ledo las especificaciones CORBA en [4], [5] y [6]. Usted no ser capaz de entender los captulos siguienbajo sin una buena comprensin de CORBA en general, CORBA IDL y los-a-IDL C + + y asignaciones de IDL a Java.

El Cdigo ORBacus Generadores


ORBacus incluye los siguientes generadores de cdigo:
idl jidl

The ORBACUS IDL-to-C++ Translator The ORBACUS IDL-to-Java Translator

hidl ridl irgen

The ORBACUS IDL-to-HTML Translator The ORBACUS IDL-to-RTF Translator The ORBACUS Interface Repository C++ Code Generator

La inicializacin del ORB Java


La aplicacin ORB incluido en el JDK 1.3 puede ser considerado como un ORB "mnimo", adecuado principalmente para su uso en tareas bsicas orientadas al cliente. Para usar el ORBacus ORB en lugar del ORB predeterminado del JDK, debe iniciar la aplicacin con las siguientes propiedades:
java -Dorg.omg.CORBA.ORBClass=com.ooc.CORBA.ORB \ -Dorg.omg.CORBA.ORBSingletonClass=com.ooc.CORBA.ORBSingleton \ MyApp

Una alternativa es establecer estas propiedades en el programa antes de inicializar el ORB. Por ejemplo:
// Java import org.omg.CORBA.*; public static void main(String args[]) { java.util.Properties props = System.getProperties(); props.put("org.omg.CORBA.ORBClass", "com.ooc.CORBA.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "com.ooc.CORBA.ORBSingleton"); ORB orb = ORB.init(args, props); //

El ORB.init () llamada interpreta argumentos que comienzan con-ORB y OA. A diferencia de C++ versin, estos argumentos no son eliminados.

You might also like