Corba

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Corba as PDF for free.

More details

  • Words: 1,306
  • Pages: 38
MMT MCE Martín Alfaro Arenas

CORBA: Common Object Request Broker Architecture. Tecnología para el manejo de objetos distribuidos Independiente del sistema operativo, de la plataforma hardware y del lenguaje de programación Los clientes y servidores pueden residir en la misma computadora o estar distribuidos “Middleware” orientado a objetos distribuidos

Componentes Š

Clientes: Ente que hace una solicitud a un objeto CORBA

Š

Objetos CORBA: Ente capaz de recibir una solicitud de un cliente, realizar una acción (o múltiples acciones) en respuesta a dicha solicitud y devolver un resultado /* Servidor */

Š

ORB (Administrador de solicitudes a objetos)

Cliente

ORB

Stubs IDL

Dynamic Invocation Interface

Objeto

Interfaz ORB

Dynamic skeleton interface

Núcleo del ORB

Skeleton IDL

Object Adapter

El ORB es el mediador entre el cliente y el servidor Referencia de objeto

Conexión lógica

Objeto CORBA

Flujo real

ORB servidor

Solicitud

ORB cliente

de la solicitud

Aplicación cliente

Aplicación servidora

Mecanismo evolucionado de RPC Función: Enviar solicitudes a objetos y devolver las respuestas a los clientes ORBs: Java ORB, JACORB, Orbix, Orbacus, Etc.

Š

Ubicación de los objetos.

Š

Implementación de objetos.

Š

Estado del servidor.

Š

Mecanismo de comunicación.

ŠEl cliente no sabe donde reside el servidor: en el mismo proceso, en la misma computadora o en diferentes computadoras conectadas en red ŠEl cliente no sabe cómo se ha implementado el servidor, que lenguaje fue usado, en que sistema operativo o en que plataforma de hardware está implementado ŠEl cliente no sabe si el servidor está activo o no ŠEl cliente no sabe que mecanismo de comunicación se está

ŠEl IDL es independiente del lenguaje de

programación

ŠExisten compiladores IDL para diversos

lenguajes de programación: idltojava

ŠSoporta

diferentes tipos de datos, incluyendo tipos básicos (enteros, floats, etc.), estructuras, objetos, arreglos dinámicos, strings, entre otros.

IDL. Lenguaje de definición de interfaces Š Un lenguaje que permite definir las interfaces

CORBA

Š Interfaz CORBA: Š Un

conjunto de operaciones y sus parámetros

Š Compilador

IDL: toma como entrada un archivo fuente IDL y produce como salida: 1.IDL Stubs 2.IDL skeletons

Š Tipos definidos por el usuario ½

Similar al typedef de C++ typedef short Identificador;

Š

Secuencias ½ Son arreglos unidimensionales con un tamaño máximo fijo y una longitud que puede variar en tiempo de ejecución typedef sequence s; // delimitada

typedef sequence s;

// sin limite

Š Estructuras 1.

Similares a las estructuras en lenguaje C struct ubicacion { long latitud; long longitud; };

interface Customer { int getInfo(); int End(); }

Archivo fuente en lenguaje IDL

Compilador IDL

… class Customer { int getInfo(); int End(); } …. Stub IDL (archivo fuente en lenguaje X) … class Customer { int getInfo(); int End(); } …. Esqueleto IDL (archivo fuente en lenguaje X)

Stubs IDL Š Son archivos fuente, en un lenguaje dado, que

permiten que un cliente haga solicitudes a objetos CORBA que implementan las interfaces definidas

Š Son generados automáticamente por el compilador

IDL a partir de interfaces CORBA

Š Los stubs deben ser incorporados en los programas

cliente

Š Contienen el código necesario para canalizar la

solicitud al ORB

Š Stub: “Proxy”- objeto del lado del cliente que actúa

como si fuera el verdadero objeto servidor

Para hacer una solicitud el cliente utiliza una referencia a un objeto Cuando un nuevo objeto es creado se crea una nueva referencia Los objetos son creados en la aplicación servidora Para poder hacer una solicitud el cliente debe obtener, de alguna manera, la referencia al objeto

Inicialmente el cliente no tiene acceso a la referencia de un nuevo objeto creado en la aplicación servidora

Getinfo

?

Aplicación cliente

Referencia

Customer

ORB

ORB

Referencia al Customer

Aplicación servidora

// Obtener refencia CORBA org.omg.CORBA.Object obj = orb.obtiene_referencia(ref);

// hacer el narrow a Customer Customer v_customer = CustomerHelper.narrow(obj);

// verificar si la operación fue correcta if( v_customer == null ) { System.out.println("Error referencia"); System.exit( 1 ); }

// invocar operaciones int saldo = v_customer.GetInfo();

al

obtener

la

v

Obtener una referencia mediante un servicio de nombres

ORB

Referencia al Name service

Aplicación cliente

Solicitudes

Name Service Registrarse

Customer

ORB

Referencia al Customer

”) ustomer C “ ( r e lv o Res mer o t s u al C a i nc ere f e R

Aplicación servidora

• Interoperable Object Reference “Detalles de contacto” que una aplicación cliente usa para comunicarse con un objeto CORBA. Ejemplo: IOR:00a000000000001e49444c3a636f6e76657267696e2f6f74612f4d61 6e616765723a312e300000000000000100008200000000410001000000 00000c31302e392e32392e3137370051ef00000000002514010f004e555 00000000f0000000000000001006f746130360099000000000000016f746

Obtener una referencia desde un IOR

Aplicación cliente Solicitudes

Customer Escribir referencia

Leer referencia

IOR

ORB

ORB

Referencia al Customer

Aplicación servidora

1. Seleccionar el lenguaje de programación deseado. 2. Usar el compilador de IDL apropiado para generar código en el lenguaje seleccionado (el stub que servirá de proxy para el cliente). 3. El programa cliente tiene que: a. Incluir/importar el código generado b. Inicializar su ORB c. Usar el IOR del objeto que se quiera usar en la API y obtener su referencia. d. Invocar los métodos deseados de la API e. Cerrar la conexión

Aplicación cliente public class Cliente { public static void main(String args[]) { try { // inicializar el orb ORB orb = ORB.init( args, null ); String ref = new BufferedReader( new FileReader(“IOR-subscriber.ref")).readLine(); org.omg.CORBA.Object obj = orb.string_to_object( ref ); // Obtener la referencia oSubscriberAPI = converginProvisioningSubscriber.narrow(obj); // verificar si se obtuvo la referencia if (converginProvisioningSubscriber == null) { System.out.println("La referencia no es válida"); System.exit( 1 ); } // Usar un método int res = oSubscriberAPI.modifyState(“Usr”, “UsrPss”, subid, Suspend) } ...

Customer -Customer#

Subscriber -DN / MIN

Account -Account#

Subscriber: Entidad básica con información demográfica y elementos de red (HLR, ciudad..) Account: Información y actividad monetaria Wallets: Tipo, Balance, Límite, Fecha de Expiración Sobre ésta entidad se aplican: pagos, ajustes, cambios de rate plan, etc. Customer: agrupación de subscribers Customer -#

Subscriber -DN / MIN

Account -#

Un CUG (Closed User Group) habilita en servicio de VPN (Virtual Private Network) DN: 5585825000 CUG: Nombre: LaAcademia Prioridad: 30 Fecha de Inicio: 1/1/2007 Fecha de Fin: 1/1/2008

NT: Number Translation NT: #5000

Formato convergin::GenericOutput api_method_name (INPUT_ARGS ,OUTPUT_ARGS)

‘in’ y ’out’ indican si el argumento es de entrada o salida GenericOutput modifyPersonalInfo ( in convergin::LoginName i_user, in convergin::LoginPass i_pass, in convergin::provisioning::Subscriber::ID i_subid, in string i_first, in string i_middle, in string i_last, in string i_language, out double o_balance, out converging::Subscriber::State o_state);

Parámetro

Tipo

Descripción

Disponibilidad

Result Error_Code Error_Message Transaction_ID

int int char(100) int

Tue / False Identificador de eror Error descriptivo Identificador de transacción

Siempre Cuando Result_code=False Cuando Result_code=False Siempre

Arreglo de estructuras de datos de tipo “Item” v_generic n

V_item(0) Code = 1 Value = “Valor del código 1”

n

V_item(1) Code = 2 Value = “Valor del código 2”

n



Ejemplo: c_converginOptionalString n n

Exists { True, False } Value

Ejemplo 2: i_cuenta n n n

DN : OptionalString MIN: OptionalString Numero de Cuenta: OptionalExternalNo

(Cualquiera de los 3 puede ser la llave para la transacción, todos son opcionales, pero uno de ellos es requerido)

login name (convergin::LoginPass) password (convergin::LoginPass) 2 servidores API: opción de fail over Encolamiento a cargo del cliente

Add GetInfo End ModifyInfo

GetInfo

Add Subscriber ModifyInfo GetInfo ModifyState End AddAccount AddRestriction EndRestriction ListAllRestriction AddFriendsAndFamily

ListFriendsAndFamily RemoveF&F RemoveAllF&F AddCUGMembership EndCUGMembership ListCUGMembership AddComment ListComment

struct ID { convergin::OptionalString m_dn; convergin::OptionalString m_min; convergin::OptionalString m_cc; };

struct Membership { string m_cug; long m_priority; convergin::Time m_start; convergin::Time m_end; };

typedef string LoginPass;

struct Time { long m_year; long m_month; long m_day; long m_hour; long m_minute; long m_second; };

ModifyInfo GetInfo ModifyState End ModifyWalletExpiry Payment Adjustment AddRecurrentCharge EndRecurrentCharge

AddWallet GetLlastRecharge

Extra parameter: 1, Número único de operación

typedef sequence<Wallet> WalletList; Struct Wallet { convergin::provisioning::Account::WalletType m_type; convergin::provisioning::Account::WalletBalance m_balance; convergin::Time m_expiry; }; Type

Balance

Expiry

Default

100.0

11/01/2008

Minutos

5

31/12/2099

LD

0

11/11/1977

QueryTimeforCall CallCharge QueryChargeForSMS ChargeSMS QueryChargeforDataSession ChargeDataSession

struct PreCallDetails { Direction m_direction; MediaType m_mediaType; convergin::OptionalBillingAccount m_originator; convergin::OptionalBillingAccount m_terminator; string m_calledDigits; convergin::OptionalLocation m_originatorLocation; convergin::OptionalLocation m_terminatorLocation; convergin::Time m_startTime; }; struct PostCallDetails { convergin::Time m_answerTime; convergin::Time m_disconnectTime; };

Related Documents

Corba
November 2019 59
5 Corba
December 2019 84
Corba 1
November 2019 48
Corba 3
November 2019 50
Corba Wwwjavadilicom
December 2019 58
Corba Using Cpp
September 2019 51