CORBA con Java IDL. Francisco Charte Ojeda ! " !# $ "$ % &'(!!! ) % #* %! " +,',' $! '(! $ - # " "! " '( %!.%# %%! +#! '(!! $!!#



Documentos relacionados
Práctica 5: Common Object Request Broker Architecture CORBA

CORBA desde Java. Diego Sevilla Ruiz Sistemas Distribuidos. 1. Introducción

1. Introducción. 1.1 Construcción de una aplicación CORBA

CORBA. Carpe Diem Quam Minimum Credula Postero. Manual de CORBA (Common Object Request Broker Architecture)

Práctica 2: Java Remote Method Invocation (RMI)

Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU

Desarrollos CORBA con C++ Builder

Elementos léxicos del lenguaje de programación Java

3.2 Mapping de IDL a Java

RMI [Remote Method Invocation]

Una aplicación sencilla con CORBA y Java

en otra máquina exactamente de la misma manera que si se encontrará en la misma máquina

Práctica 4: Java Remote Method Invocation (RMI)

Introducción a Java LSUB. 15 de enero de 2015 GSYC

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

Modelo de Objetos Distribuidos

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

1. Visión general de RMI

Carlos A. Olarte BDII. CORBA Una arquitectura para integrar ambientes distribuidos y

Programación Orientada a Objetos. Java: Excepciones

Programación Orientada a Objetos. Java: Excepciones

Introducción Entorno de ejecución Referencias Descripción del servicio

2) Cual modificador limita el acceso a un método de una clase pública a los miembros de la misma clase?

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2

Arquitectura Cliente/Servidor. Invocación de Métodos Remotos RMI: Remote Method Invocation. Llamadas a Métodos Remotos

Ejercicio 4. EJB Sesión - Sistema SGA. Java EE. Ejercicio 4. EJB Sesión Sistema SGA. Curso de Java EE

Programación Orientada a Objetos con Java

CORBA: Anexos. Ingeniería del Software II Curso 2009/2010.

Universidad ORT - Arquitectura de Software. Requisitos

Java RMI Remote Method Invocation. Invocación Remota de Métodos en Java

PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI

Arquitecturas Distribuidas Práctica 6. Introducción a CORBA

JAVA - Serializacíon / RMI. (C) Philippe Roose , 2005

CONTENIDO. Serialización. Carga dinamica de stubs RMI AVANZADO. Callbacks. Carga dinámica de Stubs

Implementación de clientes con CORBA y Java

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

Java RMI. Sistemas distribuidos

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

PROYECTO FIGURAS DIAGRAMA DE FLUJO

TEMA 4: PROGRAMACIÓN DISTRIBUIDA

Examen Teórico Convocatoria de Junio de 2012

Programación en Java. Programación en OO

Aquí se declaran los. Aquí se declaran los métodos de la clase. *Atributos de la clase

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

JAVA RMI (REMOTE METHOD INVOCATION)

2. Estructura de un programa en Java

Introducción al lenguaje Java

Observer Corba Clock. Trabajo Práctico Final Sistemas Distribuidos II Facultad de Ingeniería, UBA. Julio Cátedra: María Feldgen

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet DLSI - Universidad de Alicante 1

Sistemas Distribuidos (Capítulo 8 de Distributed Computing de M. L. Liu)

UNIVERSIDAD AUTONOMA METROPOLITANA UNIDAD IZTAPALAPA

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4

Introducción Descripción del servicio

APELLIDOS:... NOMBRE:... GRUPO:... NÚMERO DE EXPEDIENTE:...

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

Tema 2. El lenguaje de programación Java (Parte 1)

Arquitecturas Distribuidas en Redes Heterogéneas. Prácticas en CORBA

Primera Escuela de la Red Temática SVO. Madrid, Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta.

Diseño de tipos Igualdad, representación, código, copia y relación de orden

Programación Orientada a Objetos en Java

FRAMEWORK 2 Recepción de SMS

Remote Method Invocation (RMI)

JAVA RMI: ESTRUCTURA INTERNA RMI

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura).

Sistemas de Información

Interacción entre Aplicaciones: objetos distribuidos e invocación remota

Programación orientada a objetos

Código Fuente. Creamos en C:\ una carpeta para ubicar el código fuente del servidor. En mi caso, he creado una carpeta denominada rmi4

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Repaso de las características más importantes de la programación Java y su adaptación a Android

Curso de Java POO: Programación orientada a objetos

Iniciación a Java. 1.Introducción a Java 2.Programación Orientada a Objetos 3.Fundamentos del lenguaje Java

Tema 3: Genericidad en Java. Tema 3: Genericidad en Java. Objetivos y Bibliografía. Modelos de Datos Genéricos

Java en 2 horas. Rodrigo Santamaría

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

Construcciones del Lenguaje Java

Tema 14: Excepciones

El lenguaje de Programación C. Fernando J. Pereda

Práctica 5. Fecha límite de entrega: viernes, 14 de diciembre

Universidad de Cantabria

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

Componentes Distribuidos EJBs. Ing. Cesar Julio Bustacara Medina

Clases Java para comunicaciones en red

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Programa Java. El lenguaje de programación Java. Comentarios. Programa Java. Palabras reservadas. Identificadores

Clases. Java: Clases y Objetos. Clases. Clases. Modificadores de clase. Definición de una clase. Cada objeto es un ejemplar de una clase

INGENIERÍA EN SISTEMAS Y COMUNICACIONES

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Objetivo de aprendizaje del tema

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Pruebas de unidad utilizando JUnit Juan Manuel Fernández Peña, 2005

Universidad ORT - Arquitecturas de Software sobre plataforma JEE Web Services (parte 1)

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA

James Gosling, creador de Java

Fundamentos del Lenguaje de Programación Java

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

Transcripción:

CORBA con Java IDL Francisco Charte Ojeda Sumario " Introducción # $ "$ % &'( ) % #* % " +,',' $ '( $ - # " " " '( %.%# %% +# '( $ # + $ '( '( ) " / % $ $ "'( El compilador idltojava ). * + #)$ '(". #)00"&'( % #) %%" $" + '( idltojava+% 1 2 2 ) " $ % #'( $ %3/, 4 #" '(idltojava 00 #'(5%#6# 6 fno-cpp " ) 7 idltojava$, 800#% 9 12 $ # CPP"CPPARGS" # ") 2 " $ ) # # '( :7 #

idltojava -fno-cpp Consulta.idl# # % module SvrConsultas { interface IConsulta { string Consulta(in string Parametros); ; ; '( + : SvrConsultas# " * SvrConsulas+% % 6#) " %. 86 #$ La interfaz del servidor & 6 '( 6 #) # 6 + idltojava # # % 6 # : # SvrConsultas % IConsulta.Java /* * File:./SVRCONSULTAS/ICONSULTA.JAVA * From: CONSULTA.IDL * Date: Wed Feb 24 19:07:42 1999 * By: C:\ARCHIV~1\IDLTOJ~1\IDLTOJ~1.EXE Java IDL 1.2 Aug 18 1998 16:25:34 */ package SvrConsultas; public interface IConsulta extends org.omg.corba.object, org.omg.corba.portable.idlentity { String Consulta(String Parametros) ; IConsulta.Javaidltojava +'(SvrConsultas% SvrConsultas 6 IConsulta- * ". $ * #'(% '( string% String 5%" 66 $ ) %)7 6 IConsulta$ org.omg.corba.object 6 * " ) * 6%$ #'( 6 IConsulta org.omg.corba.portable.idlentity * #" 6 )'(" #/ # $

El esqueleto de servidor 7 6 '(%# *)" $ #* (%$ %_IConsultaImplBase.Java ; _IConsultaImplBase org.omg.corba.dynamicimplementation 6 SvrConsultas.IConsulta /* * File:./SVRCONSULTAS/_ICONSULTAIMPLBASE.JAVA * From: CONSULTA.IDL * Date: Wed Feb 24 19:07:42 1999 * By: C:\ARCHIV~1\IDLTOJ~1\IDLTOJ~1.EXE Java IDL 1.2 Aug 18 1998 16:25:34 */ package SvrConsultas; public abstract class _IConsultaImplBase extends org.omg.corba.dynamicimplementation implements SvrConsultas.IConsulta { // Constructor public _IConsultaImplBase() { super(); // Type strings for this class and its superclases private static final String _type_ids[] = { "IDL:SvrConsultas/IConsulta:1.0" ; public String[] _ids() { return (String[]) _type_ids.clone(); private static java.util.dictionary _methods = new java.util.hashtable(); static { _methods.put("consulta", new java.lang.integer(0)); // DSI Dispatch call public void invoke(org.omg.corba.serverrequest r) { switch (((java.lang.integer) _methods.get( r.op_name())).intvalue()) { case 0: // SvrConsultas.IConsulta.Consulta { org.omg.corba.nvlist _list = _orb().create_list(0); org.omg.corba.any _Parametros = _orb().create_any(); _Parametros.type(org.omg.CORBA.ORB.init ().get_primitive_tc(org.omg.corba.tckind.tk_string)); _list.add_value("parametros", _Parametros, org.omg.corba.arg_in.value); r.params(_list); String Parametros; Parametros = _Parametros.extract_string(); String result; result = this.consulta(parametros); org.omg.corba.any result = _orb().create_any(); result.insert_string( result); r.result( result); break; default: throw new org.omg.corba.bad_operation(0, org.omg.corba.completionstatus.completed_maybe); Listado 3. Archivo _IConsultaImplBase.Java generado por idltojava

+ * 6IConsulta _IConsultaImplBase * ) 6 $* 6IConsulta _IConsultaImplBase $ #" ) *_ids() $) & $*. 6 + %% % + 6 $ " * + *invoke() # * 6 IConsulta $ * " # (% *" ; +. * Consulta() _IConsultaImplBase $ % 5 _IConsultaImplBase $ El stub para el cliente & )$ $ ' $ $ 6 ) + # # idltojava 6'(IConsulta## %_IConsultaStub.Java < # # ) * ) 7 _IConsultaStub 6 IConsulta * => $ " <*Consulta()%" 6 # $ 2 # # * Consulta() + % 6 " ) $ ) org.omg.corba.request"*invoke() Consulta() ) * $ ( ) " 2 % $ * )" 6$ * # $ % $ ) "?# :

/* * File:./SVRCONSULTAS/_ICONSULTASTUB.JAVA * From: CONSULTA.IDL * Date: Wed Feb 24 19:07:42 1999 * By: C:\ARCHIV~1\IDLTOJ~1\IDLTOJ~1.EXE Java IDL 1.2 Aug 18 1998 16:25:34 */ package SvrConsultas; public class _IConsultaStub extends org.omg.corba.portable.objectimpl implements SvrConsultas.IConsulta { public _IConsultaStub(org.omg.CORBA.portable.Delegate d) { super(); _set_delegate(d); private static final String _type_ids[] = { "IDL:SvrConsultas/IConsulta:1.0" ; public String[] _ids() { return (String[]) _type_ids.clone(); { // IDL operations // Implementation of ::SvrConsultas::IConsulta::Consulta public String Consulta(String Parametros) org.omg.corba.request r = _request("consulta"); r.set_return_type(org.omg.corba.orb.init().get_primitive_tc( org.omg.corba.tckind.tk_string)); org.omg.corba.any _Parametros = r.add_in_arg(); _Parametros.insert_string(Parametros); r.invoke(); String result; result = r.return_value().extract_string(); return result; ; _IConsultaStub.Javaidltojava " #$%#&&

Clases auxiliares $ % % % idltojava# $. 2 " $*$ ) ) IConsultaHolderIConsultaHelper #* ) % *. * #) @00" 7 & )#* * +*$ IConsultaHelpernarrow() #* $ * # 6 # 6'( $ IXXXHelper *narrow() 7 ## *. " narrow()" % *Consulta() 6IConsulta Inicialización del ORB / 6 " +) ORB org.omg.corba# # % " 6 6 A * $ init()+. *ORB# $ A $ *main()" 6 2 $ $ $this $ / # $ *init() $ 6 # '(7 %" )java.util.properties6 *put() 4 $ "* )# $ *init() &66 * 6 # ) " % ") # * El servicio de nombres ''7 %" 3# # # +. *" )$ % '# # % % 7 %* + % * + % 6 ) %" 6 *

# %# " % $ + % # )##% % $ * & % + #6" )% # % * B # )#* $ Inicio del sistema de nombres + 6 '( # tnameserv ) + idltojava )?# # #%. ' ) &' ) # ) + ' * % *. $#?# : $6 7 C2 ) tnameserv ORBInitialPort"%#+ 1025 tnameserv -ORBInitialPort 1025 ' ( ' #$ )

7 " $D tnameserv) $ "& * ' % )$ + ' # 1 Uso del servicio de nombres &6 % %$A # ) " ' % $ $ $ ) + " 6 * resolve_initial_references()6 ) (%* $ )" #* $ #*resolve_initial_references() ) NameService #* org..omg.corba.object5 * )NamingContext 6 *narrow() NamingContextHelper-. # idltojava NamingContext ServNombres = NamingContextHelper.narrow( Orb.resolve_initial_references("NameService")); / 6 $ A # )" + *rebind() $)" # * resolve() # $ Implementación del servidor ( %% _IConsultaImplBase $ * 6'( $. $ 6%"+ ##. )" " # ) + 2 java E AConsultaServant"ServidorConsulta _IConsultaImplBase " 6IConsulta $ " %)+ $ 6 #$ ) # ". * main() +* 6 6 ) ConsultaServant" % ) * +) 7 ) "$ $ "

/ $) IConsulta"*rebind() 6 # // Este módulo contiene el servidor, con el correspondiente // método main(), y la clase que servirá a las peticiones // de los clientes CORBA import SvrConsultas.*; // Importamos el esqueleto y clases auxiliares // Paquetes para acceder al ORB y al servicio de nombres import org.omg.cosnaming.*; import org.omg.corba.*; // Esta clase implementa la interfaz IConsulta derivando del // esqueleto generado por idltojava class ConsultaServant extends _IConsultaImplBase { // simplemente implementamos el método public String Consulta(String Parametros) { // que se limitará a mostrar los parámetros recibidos System.out.println(Parametros); // y devolverá una cadena como resultado return "Ejecutada la consulta\n" + Parametros; // Esta clase es el servidor propiamente dicho public class ServidorConsulta { // El método main() es el punto de entrada al servidor public static void main(string args[]) { try { // Obtenemos una referencia al ORB, inicializándolo ORB Orb = ORB.init(args, null); // Creamos el objeto que implementa la interfaz IConsulta ConsultaServant Servidor = new ConsultaServant(); // Conectamos el objeto CORBA con el ORB Orb.connect(Servidor); // Obtenemos una referencia al servicio de nombres NamingContext ServNombres = NamingContextHelper.narrow( Orb.resolve_initial_references("NameService")); // Preparamos el camino con el nombre del objeto NameComponent NombreInterfaz = new NameComponent("IConsulta", ""); NameComponent CaminoObjeto[] = {NombreInterfaz; // y lo registramos en el espacio de nombres // facilitando el camino y la referencia al objeto ServNombres.rebind(CaminoObjeto, Servidor); System.out.println( "Servidor esperando solicitudes de consultas"); // Esperamos a recibir peticiones de clientes java.lang.object RS = new java.lang.object(); synchronized(rs) { RS.wait(); catch (Exception X) { // en caso de fallo System.err.println(X); // mostrar toda la información X.printStackTrace(System.out); // disponible *ServidorConsulta

2 % ) $ $ % ) $ " $ #.7 6." # #.$% %" % Codificación de un cliente "% 6 $ +F $ 6 "6 // Este es el programa cliente, que obtendrá una referencia // al objeto sirviéndose del servicio de nombres, tras lo // cual ejecutará la consulta que se haya introducido como // parámetro de entrada import SvrConsultas.*; // Importamos el stub y las clases auxiliares // Paquetes para acceder al ORB y al servicio de nombres import org.omg.cosnaming.*; import org.omg.corba.*; public class Cliente { // Punto de entrada al cliente public static void main(string args[]) { try { // Inicializamos el ORB y obtenemos la referencia ORB Orb = ORB.init(args, null); // Obtenemos una referencia al servicio de nombres NamingContext ServNombres = NamingContextHelper.narrow( Orb.resolve_initial_references("NameService")); // Preparamos el camino con el nombre del objeto NameComponent NombreInterfaz = new NameComponent("IConsulta", ""); NameComponent CaminoObjeto[] = {NombreInterfaz; // Solicitamos al servicio de nombres la resolución // de la referencia IConsulta RefServ = IConsultaHelper.narrow( ServNombres.resolve(CaminoObjeto)); // y la usamos para ejecutar la consulta String Resultado = RefServ.Consulta(args[0]); System.out.println(Resultado); // y mostrarla catch (Exception X) { // si hay algún fallo System.out.println(X); // mostrar toda la información X.printStackTrace(System.out); // disponible + * main() A 6 "

) * connect()) $ # &*resolve() ) % *" * #* 6 * narrow(). IConsultaHelper # idltojava #" 6IConsulta $)) )) *Consulta() # $ " # $ ( # " # " # try. + + $..) Concluyendo % " ) '($ + #) #),' )'( # %2# $ * " #) %" 2 ) * ""''7. $ # + ) # ( % *# 1$ " +) ") #".# % %,' "