PDF de programación - 3.2 Mapping de IDL a Java

Imágen de pdf 3.2 Mapping de IDL a Java

3.2 Mapping de IDL a Javagráfica de visualizaciones

Publicado el 22 de Enero del 2019
390 visualizaciones desde el 22 de Enero del 2019
140,1 KB
27 paginas
Creado hace 22a (15/02/2002)
3.2 Mapping de IDL a Java

Tipos predefinidos (1)

Tipo IDL
short
long
long long
unsigned short
unsigned long
unsigned long long
float
double
long double

Tipo Java
short
int
long
short
int
long
float
double
De momento, no está soportado

n El rango de los tipos enteros IDL sin signo es mayor que el de los tipos

Java (los enteros sin signo grandes llegan como negativos)

Tipos predefinidos (y 2)

Tipo IDL
char
wchar
string
wstring
octet
boolean

any

Tipo Java
char
char
java.lang.String
java.lang.String
byte
boolean (las constantes IDL TRUE y
FALSE se mapean a true y false)
org.omg.CORBA.Any (abstracta)

n Se producen excepciones si se violan los rangos de los caracteres o el

tamaño de las cadenas de caracteres acotadas

typedef

n En Java no existe una construcción similar a

typedef

n Se usa el tipo original

Enumeraciones

// IDL
enum Color {red, green, blue, yellow, white};

// Java
public class Color

implements org.omg.CORBA.portable.IDLEntity {
public static final int _red = 0;
public static final Color red = new Color(_red);
public static final int _green = 1;
public static final Color green = new Color(_green);
// ...
public int value() { ... }
public static Color from_int(int value) { ... }
protected Color(int value) { ... }

}

n Dado que cada valor es un singleton, la igualdad entre valores se

puede comprobar con equals().

Estructuras

// IDL
struct Date {

short year;
short month; // 1-12
short day; // 1-31

};

// Java
final public class Date

implements org.omg.CORBA.portable.IDLEntity {
public short year;
public short month;
public short day;

public Date() {}
public Date(short year, short month,

short day) { ... }

}

Vectores y secuencias (1)

n Los vectores y secuencias (acotadas y no acotadas)

se mapean a vectores Java
n Se produce una excepción si se violan longitudes (vectores y

secuencias acotadas)

// IDL
typedef Date DateVector[10];
typedef string StringMatrix[10][20];
typedef sequence<Color> Colors;
typedef sequence<Date, 10> Dates10;

struct Example {

DateVector fDateVector;
StringMatrix fStringMatrix;
Colors fColors;
Dates10 fDates10;

};

Vectores y secuencias (y 2)

// Java
final public class Example

implements org.omg.CORBA.portable.IDLEntity {
public Date[] fDateVector;
public String[][] fStringMatrix;
public Color[] fColors;
public Date[] fDates10;

public Example() {}
public Example(Date[] fDateVector,

String[] fStringMatrix, Color[] fColors,
Date[] fDates10) { ... }

};

Módulos

n Se mapean a paquetes

n Los tipos definidos dentro del módulo que mapean a

clases/interfaces, pertenecerán al correspondiente paquete

// IDL
module es { module udc { module fbellas {

module corbaws { module clock { module idl {

struct TimeOfDay { ... };

}; }; }; }; }; };

// Java
package es.udc.fbellas.corbaws.clock.idl;
final public class TimeOfDay

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

Interfaces (1)

// IDL
interface Clock {

TimeOfDay getTimeOfDay();

};

// Java
public interface ClockOperations {

TimeOfDay getTimeOfDay();

} // Este tipo lo utiliza el servidor para implementar

// el interfaz

public interface Clock extends ClockOperations,

org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity {

} // Este tipo lo utiliza el cliente

Interfaces (2)

n También se generan las clases ClockPOA y

ClockPOATie
n Las utiliza el servidor para implementar el interfaz mediante

herencia de implementación (ClockPOA) o delegación
(ClockPOATie)

n Se estudian más adelante

n Object (IDL) se mapea a

org.omg.CORBA.Object (Java)

n nil (IDL) se mapea a null

n null sólo se puede usar en valores de retorno y

parámetros para representar una referencia a objeto remoto
o “tipo valor” (value type) nulos

n Cada atributo se mapea a dos operaciones con el

mismo nombre (una para leer y otra para modificar),
excepto si es de tipo readonly (sólo dispone de
operación para leer)

Interfaces (3)

n Herencia

// IDL
interface Thermostat : Thermometer { ... };

// Java
public interface ThermometerOperations { ... }
public interface Thermometer

extends ThermometerOperations,
org.omg.CORBA.Object,
org.omg.CORBA.portable.IDLEntity {}

public interface ThermostatOperations

extends ThermometerOperations { ... }

public interface Thermostat

extends ThermostatOperations,
Thermometer,
org.omg.CORBA.portable.IDLEntity {}

Interfaces (y 4)

n Tipos anidados dentro de interfaces

n Java no permite anidar clases dentro de interfaces
n Los tipos IDL (definidos dentro de una interfaz) que mapean

a clases se generan en un paquetes especial

// IDL
module Example {

interface Clock {

struct TimeOfDay { ... };
TimeOfDay getTimeOfDay();

};

};

// Java
package Example.ClockPackage;
final public class TimeOfDay

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

Constantes (1)

n Constantes definidas dentro de un interfaz

// IDL
module Example {

interface MyInterface {

const float PI = 3.1415926;

};

};

// Java
package Example;

public MyInterfaceOperations {}

public interface MyInterface extends MyInterfaceOperations,

org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity {
float PI = 3.1415926;

}

Constantes (y 2)

n Constantes definidas fuera de un interfaz
// IDL
module Example {

const float PI = 3.1415926;

};

// Java
package Example;

public interface PI {

float value = 3.1415926;

}

Excepciones (1)

Throwable

Error

Exception

RuntimeException

org.omg.CORBA

UserException

SystemException

Excepciones definidas
por el usuario en IDL

COMM_FAILURE, OBJ_ADAPTER,
etc.

Excepciones (y 2)

n Mapping de excepciones definidas por el usuario

// IDL
typedef short Temperature;
exception InvalidTemperature {

Temperature selectedTemperature;
Temperature minimumPermitedTemperature;
Temperature maximumPermitedTemperature;

};

// Java
final public class InvalidTemperature

extends org.omg.CORBA.UserException {

// Mapping similar al de un “struct”.

};

Clases Holder (1)

n Problema: mapear parámetros out e inout a Java

// IDL
interface Account {

void add(in float amount, out float newBalance);
// ...

};

n Paso de parámetros en Java

n Tipos básicos: por valor
n Objetos: “por referencia”
n Siendo más preciso: todos los parámetros se pasan

por valor (cuando se “pasan objetos”, se pasan
referencias por valor)

n La semántica de paso de parámetros vía out e

inout se simula con las clases Holder

Clases Holder (2)

n Mapping a Java

public interface AccountOperations {

void add(float amount,

org.omg.CORBA.FloatHolder newBalance);

// ...

}

n El ORB proporciona clases Holder para los tipos

predefinidos
package org.omg.CORBA;
final public class FloatHolder

implements org.omg.CORBA.portable.Streamable {
public float value;
public FloatHolder() {}
public FloatHolder(float value) { ... }
// Otros métodos ...

}

Clases Holder (3)

n Implementación de la operación

class AccountImpl extends AccountPOA {

private float balance;

public void add(float amount, FloatHolder newBalance) {

balance = balance + amount;
newBalance.value = balance;

}

// ...

}

n Invocación de la operación

FloatHolder newBalance = new newBalance();
account.add(10, newBalance);
System.out.println(newBalance.value);

Clases Holder (4)

n Para los tipos definidos por el usuario, el compilador

de IDL genera clases Holder
n Mismo nombre que el tipo Java pero con sufijo Holder

// IDL
struct TimeOfDay {

short hour; // 0-23
short minute; // 0-59
short second; // 0-59

};

interface Clock {

void getTimeOfDay(out TimeOfDay time);

};

n Para los tipos definidos con typedef, sólo se generan
clases Holder cuando se trata de vectores o secuencias

Clases Holder (5)

n El compilador de IDL genera la clase

TimeOfDayHolder
final public class TimeOfDayHolder

implements org.omg.CORBA.portable.Streamable {
public TimeOfDay value;
public TimeOfDayHolder() {}
public TimeOfDayHolder(TimeOfDay value) { ... }
// Otros métodos ...

}

n Implementación de la operación
class ClockImpl extends ClockPOA {

public void getTimeOfDay(TimeOfDayHolder time) {

<< Obtener “hour”, “minute” y “second” >>
TimeOfDay timeOfDay =

new TimeOfDay(hour, minute, second);

time.value = timeOfDay;

}
// ...

}

Clases Holder (y 6)

n Invocación de la operación

TimeOfDayHolder timeOfDayHolder = new TimeOfDayHolder();
clock.getTimeOfDay(timeOfDayHolder);
TimeOfDay timeOfDay = timeOfDayHolder.value;

n Parámetros inout

n Idem parámetros out, excepto:

n El llamador debe pasar un valor en el parámetro (excepto que

sirva el del constructor por defecto)

n El llamado puede consultar el valor (value) del Holder,

cambiarlo o establecer uno nuevo (holder.value = new
... )

Clases Helper (1)

n Concepto

n Para cada tipo definido por el usuario (inclusive los definidos

con typedef) se genera una clase Helper (mismo nombre
que el tipo Java pero con sufijo Helper)

n Permiten hacer downcasting de interfaces remotos
n Permiten insertar y extraer valores en un Any

n Ejemplo

abstract public class ClockHelper {

public static void insert(org.omg.CORBA.Any a,

Clock t) { ... }

public static Clock extract(org.omg.CORBA.Any) { ... }
public static org.omg.CORBA.TypeCode type() { ... }

// “narrow” sólo se genera para Helpers cuyo tipo es un
// interfaz remoto
public static Clock narrow(

org.omg.CORBA.Object obj) { ... }

}

Clases Helper (2)

n El downcasting es un casting de un tipo base (no
necesariamente org.omg.CORBA.Object) a un
tipo derivado
// En el ejemplo “Clock” ...
org.omg.CORBA.Object clockObject =

orb.string_to_object(stringifiedReference);

if (clockObject == null) {

throw new Exception("stringified reference is nil");

}
Clock clock = ClockHelper.narrow(clockObject);
n El objeto tiene que ser del tipo derivado (en otro caso se

produce una excepción del sistema CORBA)

n En el ejemplo anterior no sería válido hacer ...

Clock clock = (Clock)clockObject;

n ... porque puede ser necesario contactar con el servidor (ej.:

servidor configurado con arranque automático)

Clases
  • Links de descarga
http://lwp-l.com/pdf14947

Comentarios de: 3.2 Mapping de IDL a Java (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