PDF de programación - Corba

Imágen de pdf Corba

Corbagráfica de visualizaciones

Publicado el 10 de Febrero del 2021
418 visualizaciones desde el 10 de Febrero del 2021
104,4 KB
10 paginas
Creado hace 18a (18/05/2005)
1. Introducción

1.1 Construcción de una aplicación CORBA

Toda aplicación CORBA empieza con la definición de las interfaces de los objetos que pueden
distribuirse. Para ello se utiliza el lenguaje IDL. Esta especificación establece un contrato entre cliente
y servidor: qué servicios (operaciones) ofrece el servidor al cliente.

A partir del archivo con la especificación IDL de las interfaces, se pueden implementar por separado (e
incluso en distintos lenguajes de programación y sobre plataformas diferentes, tanto producto CORBA
como sistema operativo y hardware) el cliente y el servidor. Tanto cliente como servidor normalmente
usan el método de invocación estático, y compilarán el IDL para generar el stub y skeleton,
respectivamente.

Al programador del cliente le basta con realizar un programa que obtenga las referencias de los objetos
CORBA que necesite, y que invoque las operaciones oportunas. El programador del servidor tiene que
escribir la implementación de la clase del objeto de implementación y el programa del servidor donde
se dará vida a los objetos de implementación.

1.2 Descripción de la aplicación

Se trata de implementar un programa cliente/servidor muy sencillo: un Contador distribuido

• Los clientes pueden consultar y modificar el valor del contador. También hay operaciones para

incrementar y decrementar en una unidad el valor del contador

• La aplicación muestra el modo de invocación estático (stubs y skeletons generados por el

compilador IDL)

• El programa cliente invoca 1000 veces la operación incrementar sobre el contador y al final

muestra el tiempo medio de respuesta


El objetivo de esta aplicación es dar una visión completa de la utilización de CORBA desde el punto de
vista del programador.

La aplicación es extremadamente sencilla para no perderse en los detalles de la misma. Se muestra el
modo de invocación estático por ser el utilizado habitualmente.

La aplicación permite también explorar la eficiencia de la invocación de operaciones en objetos
CORBA locales o remotos.

1.3 Arquitectura de la aplicación

El cliente usa el ContadorHelper para acceder a funciones del ORB (por ejemplo, conseguir la
referencia del objeto remoto) y el StubContador para invocar las operaciones en el objeto remoto. El
servidor usa el SkeletonContador para recibir las invocaciones y devolver los resultados.


Sistemas Distribuidos:: Java CORBA


EUI-SG/INFOR.UVA.ES

1



attribute long valor;
long inc();
long dec();


2. Especificación de la interfaz con IDL

El ejemplo muestra una interfaz muy sencilla, llamada Contador, que se define dentro del módulo
PrimerEjemplo (un módulo en IDL es similar al package en Java).

La interfaz define dos operaciones (sin parámetros, y que devuelven un entero long que es el
equivalente al int en Java), inc() y dec().

El atributo, valor, equivale a dos operaciones, una de modificación del valor: valor(long), y otra de
consulta del valor: long valor()

Obsérvese que en la interfaz no hay constructor. ¿Cómo puede, entonces, un cliente crear y destruir
objetos remotos? Más adelante se verá que la creación de los objetos remotos es responsabilidad del
servidor.

// contador.idl
module PrimerEjemplo {



};


interface Contador {



};

Sistemas Distribuidos:: Java CORBA


EUI-SG/INFOR.UVA.ES

2

3. Compilación de la interfaz

El compilador de IDL a Java genera dos interfaces Java y varias clases:



• PrimerEjemplo.Contador: es la interfaz de IDL en Java.
• PrimerEjemplo._ContadorStub: clase Java que implementa el stub de la interfaz
Contador en el lado del cliente.
• PrimerEjemplo.ContadorHelper: clase Java que proporciona métodos útiles para los
clientes de objetos Contador. Por ejemplo los métodos bind() para obtener una referencia a
un objeto Contador, y narrow() para convertir referencias a objetos CORBA al tipo
Contador.
• PrimerEjemplo.ContadorHolder: clase Java que se utiliza si hiciera falta pasar objetos
Contador como parámetros out o inout en operaciones de otra interfaz.
• PrimerEjemplo.ContadorPOA: clase abstracta que sirve de base para la clase que tiene el
• PrimerEjemplo.ContadorOperations: es la interfaz de IDL en Java que deben satisfacer

código que implementa las operaciones de la interfaz.
los objetos en los que delegan los objetos de la clase _tie_.



Sistemas Distribuidos:: Java CORBA


EUI-SG/INFOR.UVA.ES

3

3.1 Código generado por el compilador IDL: Contador.java y ContadorOperations.java

Obsérvese que en la traducción de IDL a Java:

• Cada operación se corresponde con un método Java
• Cada atributo se corresponde con dos métodos: uno para leer y otro para modificar el valor del

atributo



int valor();
void valor(int val);
int inc();
int dec();

La clase que implementa la interfaz en Java debe implementar los métodos descritos en esta interfaz
Java.

package PrimerEjemplo;
// IDL:PrimerEjemplo/Contador:1.0
public interface Contador extends ContadorOperations,
org.omg.CORBA.Object,


org.omg.CORBA.portable.IDLEntity
{
}

package PrimerEjemplo;
public interface ContadorOperations {



}

3.2 Código generado por el compilador IDL: _ContadorStub.java

Para cada método de la interfaz el código del stub se encarga de hacer el marshalling de los parámetros
(es decir, su serialización o alineamiento), y pasárselos al ORB.

Obsérvese que el atributo valor se plasma en dos operaciones, y que el resultado long de las
operaciones inc() y dec() se traduce en Java a int. Además, cada operación de la interfaz se define
como public. Aparte, esta clase define su propio constructor, y algunos otros métodos de apoyo
(como ejercicio, compilar el ejemplo y ver el código de las clases resultantes).

package PrimerEjemplo;
public class _ContadorStub


{



}


extends org.omg.CORBA.portable.ObjectImpl
implements Contador
// ...
public int valor() { /* ... */ }
public void valor(int value){ /* ... */}
public int inc() { /* ... */}
public int dec() { /* ... */}
// ...

Sistemas Distribuidos:: Java CORBA


EUI-SG/INFOR.UVA.ES

4

// ...

// ...

public static void insert(org.omg.CORBA.Any any, Contador val) {

}
public static Contador extract(org.omg.CORBA.Any any) {

}
// ...
public static Contador narrow (org.omg.CORBA.Object val) {

}

3.3 Código generado por el compilador IDL: ContadorHelper.java

La clase Helper tiene métodos estáticos que pueden ser útiles para el programador del cliente y el
servidor.
El método narrow() es estándar y sirve para convertir un objeto de tipo CORBA::Object a uno del
tipo de la clase específica, en este caso Contador.

package PrimerEjemplo;
final public class ContadorHelper {



}

3.4 Código generado por el compilador IDL: ContadorHolder.java

Las clases Holder sirven para soportar el paso de parámetros out e inout de objetos CORBA en
otras operaciones definidas en una interfaz.

package PrimerEjemplo;
final public class ContadorHolder



}


//...



implements org .omg.CORBA.portable.Streamable {


public Contador value;
public ContadorHolder() { }
public ContadorHolder(Contador initial) { value = initial; }
//...

Sistemas Distribuidos:: Java CORBA


EUI-SG/INFOR.UVA.ES

5

org.omg.CORBA.portable.InputStream in,
org.omg.CORBA.portable.ResponseHandler handler)

extends org.omg.PortableServer.Servant
implements org .omg.CORBA.portable.InvokeHandler,
ContadorOperations



// ...
public org.omg.CORBA.portable.OutputStream _invoke (String opName,



{
// ...

}

3.5 Código generado por el compilador IDL: ContadorPOA.java

Los métodos de la interfaz se dejan como abstractos para que los implemente el programador en la
clase que define a partir de ésta.

package PrimerEjemplo;
public abstract class ContadorPOA



{



}

4. Implementación del cliente

El Cliente puede ser una clase Java con método main() o un applet. En general un Cliente realiza
las siguientes funciones:
1) Inicializar el ORB
2) Obtener la referencia a un objeto CORBA que implemente la interfaz deseada (en este ejemplo,
Contador) utilizando para ello, la interfaz de las funciones que proporciona el ORB. Antes de
usar un objeto CORBA es necesario tener su referencia (con los objetos Java es igual, hay que
conseguir la referencia del objeto Java antes de poder usarlo). En CORBA se obtiene la
referencia al objeto CORBA, y lo que ocurre entonces es que se obtiene una referencia al objeto
proxy que implementa el stub de la interfaz del objeto remoto). Hay varias maneras de hacer
esto, lo normal usando el servicio de nombres o como resultado de una operación. El más
sencillo (aunque no es lo habitual) es usar el método proporcionado por el ORB
string_to_object(), que será utilizado en este ejemplo. ¡ATENCIÓN! En este ejemplo
no se utiliza el servicio de nombres para obtener una referencia al objeto remoto.



3) Utilizar el objeto CORBA. Una vez que se ha obtenido su referencia, el objeto CORBA se
puede utilizar como cualquier otro objeto Java (en realidad se usa el proxy que es un objeto
Java).


package PrimerEjemplo;
public class ClienteContador {
public static void main(String args[]) {
try {
// 1. Inicializa el ORB
// Inicializar el ORB siempre se hace igual, llamando al método
// init(), método estático de la clase ORB (paquete org.omg.CORBA) y
// que devuelve una referencia al objeto que soporta la funcionalidad
// del ORB.

Sistemas Distribuidos:: Java CORBA


EUI-SG/INFOR.UVA.ES

6


org.omg.CORBA.ORB orb =
  • Links de descarga
http://lwp-l.com/pdf18836

Comentarios de: Corba (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad