Invocación Dinámica en CORBA

Slides:



Advertisements
Presentaciones similares
Java nos ofrece System.out para escribir en pantalla, pero también tenemos System.in para leer. System.in es un objeto de una clase de java que se llama.
Advertisements

Curso de java básico (scjp)
DESARROLLO DE SOLUCIONES EMPRESARIALES MOVILES USANDO TECNOLOGIA SUN APLICACIONES MOVILES CON J2ME RMS Ing. Ronald Criollo.
POLIMORFISMO UNIDAD 4.
EXCEPCIONES UNIDAD 5.
Programación Interactiva Fundamentos de Java. 2 Ejecución de un programa Para Java una clase ejecutable es aquella que es pública y tiene un método main()
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Common Object Request Broker Architecture
Arquitectura CLARO-TECNOTREE
Arquitectura CLARO-TECNOTREE CAPITULO 4: Excepciones
Capitulo 4 Excepciones.
Informática II Prof. Dr. Gustavo Patiño MJ
Entornos orientados a objetos
RMI Remote Method Invocation
RMI (Remote Method Invocation)
Aplicación del paradigma orientado a objetos
Rosalía Laza Fidalgo Reyes Pavón Rial Curso
Encapsulamiento y Abstracción
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Herencia e Interfaces.
Lic. Rosemary Torrico Bascopé
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CINCO CONSOLE.
Tema 6: Clases Antonio J. Sierra.
Tema 10: Interfaces Antonio J. Sierra.
Sistemas Operativos Centralizados y Distribuidos Carlos David Zepeda.
Ejemplo CORBA: Java IDL
SCJP Sun Certified Programmer for Java 6
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
7. Interfaces Herencia múltiple Interfaces Comparable y Comparator
Invocación de Métodos Remotos RMI: Remote Method Invocation
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
PROCESAMIENTO DISTRIBUIDO UTILIZANDO CORBA Universidad del Zulia Facultad de Ingeniería Instituto de Cálculo Aplicado Prof. Carlos Arévalo, M.Sc.
PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++
RMI Remote Method Invocation 2da. Clase del 19 de Junio
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Herramientas de polimorfismo y herencia en C++
Programación avanzada en Java Miguel Ángel Corella 23 de Septiembre de 2005.
FACULTAD DE ESTUDIOS SUPERIORES ARAGON
Técnicas avanzadas de programación Introspección
1 Manejo de Excepciones y otros Agustín J. González ELO-329.
Módulo 7: Programación Orientada a Objetos en Visual Basic 2005.
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2008.
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
Sara Isabel Osorio Alacraz Ana Isabel Vallejo Grisales
Informatica II1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase que ha sido extendida. La clase original se conoce como superclase.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
C# desde cero.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Arreglos de Objetos.
Presentado por: PABLO ANDRES DIAZ SAIN HASSAM CAICEDO
Detalles Generales sobre Java
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
HERENCIA.
Abstracción El concepto de abstracción es esencial en ciencias de la computación. Un programa es en sí mismo una abstracción, un modelo de la resolución.
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
Clases “ Es una Abstracción de un elemento del mundo real ”
Herencias Conceptos básicos i
Patrón de diseño BROKER
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Prof. Manuel B. Sánchez. Es un mecanismo y uno de los pilares de la POO que permite definir nuevas clases a partir de otras preexistentes. La Herencia.
Tema 1: Concurrencia con Java
1 Tema 3: Programación Básica CORBA sobre Java Programación Concurrente y Distribuida Prácticas.
Transcripción de la presentación:

Invocación Dinámica en CORBA

Invocación Dinámica La interfaz de invocación dinámica (DII) permite la invocación de operaciones a objetos sin hacer uso del stub correspondiente. Para hacer invocaciones dinámicas se usa un objeto “request” Un request consiste de una referencia, una operación y una lista de parámetros Un cliente que usa un request obtiene el mismo resultado que un cliente que use los stubs En el DII un parámetro de una solicitud es un elemento de una lista (NVList) denominado NamedValue

Invocación Dinámica Para ejecutar una solicitud se usa el método invoke en el objeto request. Invoke es bloqueante. La operación send_deffered envia una solicitud y regresa de inmediato (no bloqueante o asíncrona). Para obtener los resultados se usa la operación get_response. Si la solicitud no ha finalizado esta llamada se bloquea hasta que la solicitud termine La operación poll_response permite determinar si la llamada ha finalizado

Invocación Dinámica Ejemplo. Dada la siguiente interfaz IDL: interface MessagePrinter { void printHello(); }; Se puede invocar el método printHello dinámicamente como sigue: org.omg.CORBA.Object obj=orb.string_to_object(ior); Request request = obj._request("printHello"); request.invoke(); Observe que si no se tiene el stub no se puede hacer el narrow porque la clase MessagePrinterHelper está en dicho stub.

Invocación Dinámica Los parámetros y valores devueltos (return value) en invocaciones dinámicas se manejan como variables de tipo “any”. El tipo any en CORBA puede almacenar valores de cualquier tipo. Ejemplo de uso de any: Any a = org.omg.CORBA.ORB.init().create_any(); // char a.insert_string("Hola"); // long int l = 4711; a.insert_long(l);

Invocación Dinámica Ejemplo de uso de any: Any a = org.omg.CORBA.ORB.init().create_any(); // referencia sin tipo org.omg.CORBA.Object obj; a.insert_Object(obj); // referencia con tipo Cuenta c; CuentaHelper.insert(a, c); // estructuras Person p = new Person(1, "Pedro Pérez"); PersonHelper.insert(a, p);

Invocación Dinámica Ejemplo de uso de any. Extraer valores Any a; double d = a.extract_double(); String s = a.extract_string(); Cuenta c = CuentaHelper.extract(a); org.omg.CORBA.Object obj = a.extract_Object();

Invocación Dinámica Solicitudes dinámicas con parámetros. Los parámetros se manejan como valores any Ejemplo: interface Funcion { double evaluar(in double x1, in double x2); };

Invocación Dinámica Solicitudes dinámicas con parámetros. Ejemplo: org.omg.CORBA.Request r = obj._request("evaluar"); r.add_in_arg().insert_double( x1 ); r.add_in_arg().insert_double( x2 ); r.set_return_type(orb.get_primitive_tc( org.omg.CORBA.TCKind.tk_double)); r.invoke(); Any any = r.return_value(); double v = any.extract_double(); System.out.println(v);

Invocación Dinámica Invocación asíncrona Ejemplo: org.omg.CORBA.Request r = obj._request("evaluar"); r.add_in_arg().insert_double( x1 ); r.add_in_arg().insert_double( x2 ); r.set_return_type(orb.get_primitive_tc( org.omg.CORBA.TCKind.tk_double));

Invocación Dinámica Invocación asíncrona El DII permite invocación asíncrona mediante la operación send_deferred() Ejemplo: r.send_deferred(); while (!r.poll_response()) { Thread.sleep(1000); } Any any = r.return_value(); double v = any.extract_double(); System.out.println(v);

Invocación Dinámica Invocación asíncrona con objetos callback En lugar de usar poll_response(), se puede pasar un objeto como parámetro el cual será invocado para enviar la respuesta Ejemplo: interface Response { void setResult(in double value); }; interface Funcion { void evaluar(in double x1, in double x2, in Response response);

Invocación Dinámica Invocación asíncrona con objetos callback Ejemplo: org.omg.CORBA.Request r = obj._request("evaluar"); r.add_in_arg().insert_double( x1 ); r.add_in_arg().insert_double( x2 ); ResponseImpl respImpl = new ResponseImpl(); org.omg.CORBA.Object obj2=poa.servant_to_reference( respImpl); Response response = ResponseHelper.narrow(obj2); ResponseHelper.insert(r.add_in_arg(), response); r.send_deferred();

Invocación Dinámica Invocación asíncrona con objetos callback Ejemplo: public class FuncionImpl extends FuncionPOA { public void evaluar(double x1, double x2, Response response) double result = x1*x2; response.setResult(result); }

Herencia en CORBA Corba permite la herencia de interfaces Una interfaz puede heredar de otra, en cuyo caso hereda las operaciones definidas en la super interfaz No hay herencia de implementaciones. Cada implementación debe implementar todos los métodos Se puede usar composición para lograr reutilización de código Un parámetro o variable de un tipo puede recibir un valor de cualquier subtipo

Herencia en CORBA Ejemplo: interface Pozo { string devolverId(); Ubicacion devolverUbicacion(); long devolverProduccionCrudo(); long devolverProduccionGas(); void actualizarProduccionCrudo( in long produccion); void actualizarProduccionGas(in long produccion); };

Herencia en CORBA Ejemplo: interface PozoGasLift : Pozo { void actualizarPresion(in long presion); long devolverPresion(); }; interface PozoBES : Pozo { void actualizarCorriente(in double c); double devolverCorriente();

Herencia en CORBA Un parámetro o variable de un tipo puede recibir un valor de cualquier subtipo: void procesar(Pozo p) { ... } PozoGasLift pg; procesar(pg);

Herencia en CORBA Ejemplo de uso de composición para reutilizar código: public class Pozo { int id; int prodCrudo; ... public Pozo(int id) { } int devolverProduccionCrudo() {

Herencia en CORBA Ejemplo de uso de composición para reutilizar código: public class PozoImpl extends PozoPOA { Pozo p; public PozoImpl(int id) { p = new Pozo(); } int devolverProduccionCrudo() { return p.devolverProduccionCrudo(); ...

Herencia en CORBA Ejemplo de uso de composición para reutilizar código: public class PozoGasListImpl extends PozoGasLiftPOA { Pozo p; int presion; public PozoGasListImpl(int id) { p = new Pozo(); } int devolverProduccionCrudo() { return p.devolverProduccionCrudo(); int devolverPresion() { return presion;

Mecanismo de Implementación por Delegación Corba ofrece un mecanismo de implementación por delegación mediante las clases TIE. Por cada interfaz definida el compilador IDL genera una clase TIE automáticamente. Una clase TIE es una implementación completa y funcional de un objeto Corba La clase TIE usa un delegado para ejecutar las operaciones. El delegado es una clase que implementa la interfaz Operations generada por el compilador IDL

Mecanismo de Implementación por Delegación Ejemplo: module tie { enum TipoCuenta { corriente, ahorros }; interface Cuenta { void depositar(in long monto); void retirar(in long monto); long getSaldo(); }; interface CuentaAhorros : Cuenta { void getInteresMes(); interface FabricaCuentas { Cuenta crearCuenta(in TipoCuenta tipo, in long saldoIni);

Mecanismo de Implementación por Delegación Ejemplo: class CuentaImpl implements CuentaOperations { private int saldo; CuentaImpl(int saldoIni) { this.saldo = saldoIni; } public void depositar(int monto) { saldo = saldo + monto; public void retirar(int monto) { saldo = saldo - monto; public int getSaldo() { return saldo;

Mecanismo de Implementación por Delegación Ejemplo: class FabricaCuentasImpl extends FabricaCuentasPOA { public Cuenta crearCuenta(int saldoIni) { CuentaImpl ctaImpl = new CuentaImpl(saldoIni); CuentaPOATie ctaTie = new CuentaPOATie(ctaImpl); try { org.omg.CORBA.Object obj = _poa(). servant_to_reference(ctaTie); Cuenta cuenta = CuentaHelper.narrow(obj); return cuenta; } catch( Exception e ) { return null; ...

Mecanismo de Implementación por Delegación Ejemplo: public class CuentaAhorrosImpl extends CuentaImpl implements CuentaAhorrosOperations { public CuentaAhorrosImpl(int saldoIni) { super(saldoIni); } public int getInteresMes() { return (int)(getSaldo() * 0.02);

Mecanismo de Implementación por Delegación Ejemplo: public CuentaAhorros crearCuentaAhorros(int saldoIni) { CuentaAhorrosImpl ctaImpl = new CuentaAhorrosImpl(saldoIni); CuentaAhorrosPOATie ctaTie = new CuentaAhorrosPOATie(ctaImpl); try { org.omg.CORBA.Object obj=_poa().servant_to_reference(ctaTie); CuentaAhorros cuenta = CuentaAhorrosHelper.narrow(obj); return cuenta; } catch( Exception e ) { return null;