PDF de programación - Tecnologías de Objetos Distribuidos: CORBA IDL (Invocación Estática)

Imágen de pdf Tecnologías de Objetos Distribuidos: CORBA IDL (Invocación Estática)

Tecnologías de Objetos Distribuidos: CORBA IDL (Invocación Estática)gráfica de visualizaciones

Publicado el 21 de Febrero del 2021
285 visualizaciones desde el 21 de Febrero del 2021
224,2 KB
45 paginas
Creado hace 18a (10/11/2005)
Sistemas de
Información

Tecnologías de objetos distribuidos:
CORBA: Invocación estática

Agradecimientos: Jesus Villamor Lugo, Simon Pickin de IT/UCIIIM, Juan Pavón UCM

1

Ejemplo CORBA

Servidor Corba que actua como una calculadora
Los clientes se conectan al servidor y le piden

que ejecute una operación
Suma
División

En la petición van incluidos los parámetros

necesarios para realizar la operación

El servidor una vez realizada la operación

devuelve el resultado

2

Construcción de una aplicación
CORBA

Calculator.idl

Especificación

IDL

CalculatorOperations.java
Calculator.java
CalculatorHelper.java
CalculatorHolder.java
CalculatorStub.java
CalculatorPOA.java

Compilación

IDL

Implementación

del Cliente

Client.java

Implementación

de la interfaz

Implementación

del Servidor

CalculatorPOAImpl.java

ServerPOA.java

3

CORBA Ejemplo 1
Declarando Interfaz en IDL

// Descripcion de una excepcion
exception DivisionPorCero{

float op1;
float op2;

};

interface Calculator{
// operacion de Suma
float add ( in float nb1, in float nb2 );

// operacion de Division
float div ( in float nb1, in float nb2 ) raises ( DivisionPorCero );

};

(*) Ejemplo tomado de http://www.programacion.com/tutorial/acscorba

4

Compilación de la interfaz

Calculator.idl

> idl2java Calculator.idl

Compilador
IDL a Java

Cliente
Calculator_Stub
Calculator_Stub

CalculatorHolder
CalculatorHolder

CalculatorHelper
CalculatorHelper
Client.java

Servidor

CalculatorPOA
CalculatorPOA

<<interface>>
<<interface>>

Calculator
Calculator
<<interface>>
<<interface>>

CalculatorOperations
CalculatorOperations

ServerPOA.java
CalculatorPOAImpl.java

Ficheros generados por el compilador idl

Ficheros generados por el programador

5

Compilando la interfaz
Calculator y CalculatorOperations
CalculatorOperations Interfaz Java que define todos los

métodos correspondientes a la interfaz idl. Es la que implementa el
servant
Cada operación de la interfaz corresponde a un método java
Cada atributo del interfaz corresponde a dos métodos java (leer, escribir)
public interface CalculatorOperations {
public interface CalculatorOperations {
//...
//...
float add(float nb1, float nb2);
float add(float nb1, float nb2);
float div(float nb1, float nb2);
float div(float nb1, float nb2);

}
}
Calculator Interfaz java que extiende a la anterior. Es la que

implementa el stub
public interface Calculator extends CalculatorOperations,
public interface Calculator extends CalculatorOperations,
org.omg.CORBA.Object,
org.omg.CORBA.Object,

org.omg.CORBA.portable.IDLEntity {...}
org.omg.CORBA.portable.IDLEntity {...}

6

Compilando la interfaz
Calculator_Stub.java

Clase java que implementa el stub de la interfaz

Calculator en el lado del cliente
Hace marshalling (serialización) para los parámetros de cada
método de la interfaz antes de pasárselos al ORB. (También
unmarshalling en la recepción)

Define también su propio constructor y otros métodos de apoyo

(Comprobar en prácticas editando el fichero)

public class Calculator_Stub
public class Calculator_Stub
extends org.omg.CORBA.portable.ObjectImpl
extends org.omg.CORBA.portable.ObjectImpl
implements Calculator{
implements Calculator{
// ...
// ...

}
}

7

Compilando la interfaz
CalculatorHelper

Clase Java que proporciona métodos estáticos útiles

para los usuarios de objetos Calculator (cliente y
servidor).

Por ejemplo método narrows para convertir de objetos

Corba genéricos a objetos Calculator

final public class CalculatorHelper {
final public class CalculatorHelper {
public static void insert(org.omg.CORBA.Any any, Calculator val)
public static void insert(org.omg.CORBA.Any any, Calculator val)
{...}
{...}
public static Contador extract(org.omg.CORBA.Any any) {...}
public static Contador extract(org.omg.CORBA.Any any) {...}
public static Contador narrow (org.omg.CORBA.Object val) {...}
public static Contador narrow (org.omg.CORBA.Object val) {...}
}
}

8

Compilando la interfaz
CalculatorHolder

Clase Java que se utiliza si es necesario pasar

objetos Calculator como parámetros out o
inout en operaciones de otra interfaz

final public class CalculatorHolder
final public class CalculatorHolder

implements org.omg.CORBA.portable.Streamable {
implements org.omg.CORBA.portable.Streamable {

public Calculator value;
public Calculator value;
public CalculatorHolder(){ }
public CalculatorHolder(){ }
public CalculatorHolder(Calculator initial){
public CalculatorHolder(Calculator initial){
}
}

value = initial;
value = initial;

//...
//...

}
}

9

Compilando la interfaz
CalculatorPOA

Clase abstracta que sirve de base para la

implementación del servant (código del servidor que
implementa las operaciones definidas en la interfaz idl)

Esta clase es la que contiene el skeleton del servidor

public abstract class CalculatorPOA
public abstract class CalculatorPOA

extends org.omg.PortableServer.Servant
extends org.omg.PortableServer.Servant
implements org.omg.CORBA.portable.InvokeHandler,
implements org.omg.CORBA.portable.InvokeHandler,
CalculatorOperations{
CalculatorOperations{

// ...
// ...

public org.omg.CORBA.portable.OutputStream _invoke(String opName,
public org.omg.CORBA.portable.OutputStream _invoke(String opName,
org.omg.CORBA.portable.InputStream in,
org.omg.CORBA.portable.InputStream in,
org.omg.CORBA.portable.ResponseHandler handler){
org.omg.CORBA.portable.ResponseHandler handler){

// ...
// ...

}
}

}
}

10

Arquitectura de la aplicación

Cliente

Client.java

main()

Servidor

ServerPOA.java

main()

usa

CalculatorHelper

Calculator_Stub

ORB

crea

Objeto

CalculatorPOAImpl

Skeleton
Calculator

(CalculatorPOA)

11

Programación del cliente:
Modelos de implementación
Modelos de implementación
Clase java con método main
Applet de java con método init

Tareas a realizar

1. Conectar el cliente al orb (Inicializar ORB)
2. Obtener referencia a un objeto CORBA que

implemente interfaz Calculator
Usando método string_to_object()
Usando servicio de nombres (solución estándar)
3. Usar el objeto CORBA como si fuese local

12

Programación del Cliente:
Conectarse al ORB
Para conectarse al ORB es necesario invocar al método

estático org.omg.CORBA.orb.init() que devuelve un
objeto orb

Sobre este objeto ose pueden invocar el resto de los

métodos que definen la funcionalidad del orb

El método init() sin parámetros devuelve un orb único
Llamadas sucesivas a este orb devoverían ref al mismo

objeto

También se puede invocar al método con parámetros

para funcionalidad adicional:
En aplicaciones: init(args, null)
En applets: init( Applet app, java.util.Properties props) ej:

init(this, null)

13

Programación del Cliente:
Obtención de refs. a objetos corba
El ORB es capaz de convertir de un string a una ref a un objeto

corba y viceversa.

La ref a un objeto corba encapsula

Dirección de red del proceso servidor
Un identificador único (puesto por el servidor) que identifica la

implementación concreta a la que va dirigida la petición

Al obtenerse una ref a un objeto corba en realidad obtenemos una
ref a un objeto java que implementa en el cliente el representante
(stub) del proceso servidor

Cuando el cliente obtiene ref a objeto corba

El ORB instancia un proxi (stub) en el lenguaje apropiado en el espacio

del cliente. El cliente no puede instanciar estas referencias lo hace
siempre el ORB

Una vez creado el stub, el cliente realiza operaciones sobre él.
El stub hace marshalling de las peticiones y se las pasa al ORB
El ORB localiza al servidor y establece las conexiones de transporte

necesarias de forma transparente para el cliente.

Con la respuesta del servidor se realiza el proceso inverso

14

Referencias a objetos
Uso del Servicio de Nombres
El Servicio de Nombres guarda pares

<nombre, referencia a objeto>
Los nombres están organizados en una jerarquía

El Servicio de Nombres es usado por cliente y servidor:

El servidor asocia (bind) en el Servicio de Nombres una referencia a

objeto con un nombre

El cliente puede pedirle al Servicio de Nombres que a partir de un

nombre le dé (resolve) una referencia a un objeto CORBA

Servicio de Nombres

Servidor

bind(A, ref)

A

jerarquía de

nombres

(*) Gráfico: Juan Pavón. UCM

resolve(A)

cliente

ref

proxyA

15

Referencias a objetos
Uso del Servicio de Nombres

Los nombres en el Servicio de Nombres se organizan jerárquicamente

(como sist de ficheros)
Cada nodo en la jerarquía de nombres puede ser:

NamingContext: Define un espacio de nombres
Name: Tiene asociada una referencia a un objeto
Cada NameComponent es un par identificador, clase <id, kind>. Kind es opcional

Un objeto puede tener asociados varios nombres

Compañía

Name
NamingContext

Sucursales

Presidente

Divisiones

Personal

Barcelona

Madrid

Valencia

RRHH

Ventas

Producción

Director

Soporte

Director

Vendedor1

Pérez

López

(*) Gráfico: Juan Pavón. UCM

Directorio Sucursales

16

CORBA Ejemplo 1
Desarrollo del cliente

public class Client{

public static void main( String args[] ) {

org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);
org.omg.CORBA.Object obj = null;
org.omg.CosNaming.NamingContext naming = null;
try{

1) Inicializar el ORB

obj = orb.resolve_initial_references("NamingService");
naming = org.omg.CosNaming.NamingContextHelper.narrow(obj);
org.omg.CORBA.ORB orb =
org.omg.CORBA.ORB.init(args,null);

System.out.println("No se ha po
  • Links de descarga
http://lwp-l.com/pdf18886

Comentarios de: Tecnologías de Objetos Distribuidos: CORBA IDL (Invocación Estática) (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