CORBA Alcides Calsavara Sistemas Distribuídos - objetivos Melhor relação custo/benefício Capacidade de processamento além dos limites práticos de sistemas centralizados (velocidade da luz, aquecimento) Maior domínio de aplicações Maior confiabilidade e disponibilidade Crescimento gradativo da capacidade de processamento Sistemas Distribuídos - objetivos Compartilhamento de dados comuns entre usuários Compartilhamento de recursos de hardware e software Comunicação entre pessoas Flexibilidade na distribuição de tarefas de acordo com as aplicações Sistemas Distribuídos - requisitos Controle de concorrência Consistência Extensibilidade (openness) Escalabilidade (crescimento gradativo suave) Tolerância a falhas Transparência Sistemas Distribuídos - transparência Acesso Localizacão Concorrência Replicação Falha Migração Desempenho Escala Paralelismo Sistemas Distribuídos - componentes básicos Comunicação Sistema de nomes Manutenção de consistência Alocação de carga de trabalho Sistemas Distribuídos - comunicação modelo: cliente/servidor grupo abstracão: processos e mensagens objetos e operações (RPC) sincronismo: síncrona assíncrona Sistemas Distribuídos - consistência: transacões Atômica: para o mundo externo, a transação ocorre de forma indivisível. Consistente: a transação não viola invariantes de sistema. Isolada: transações concorrentes não interferem entre si (serializable). Durável: os efeitos de uma transação terminada com commit são permanentes. 8 CORBA Conceitos e Exemplos CORBA - contexto OMG: Object Management Group OMA: Object Management Architecture (1992) ORB: Object Request Broker facilidade para envio e recebimento de mensagens entre diferente objetos e componentes CORBA: Common Object Request Broker Architecture arquitetura que permite interoperação entre os participantes na OMA (objetos diversos) adotada por: HP, SunSoft, IBM, Xerox, Oracle, ... 10 CORBA - ORB : produtos comerciais Orbix (Iona Technologies) VisiBroker (Borland) ChorusORB (Sun) Component Broker/DSOM (IBM) Voyager ORB (ObjectSpace) OrbAda (Top Graph'X) Nouveau (Roguewave) Netscape Internet Service Broker (Netscape) ObjectDirector (Fujitsu) DOME (Object Oriented Technologies) BEA WebLogic Server (BEA) CORBA - ORB : produtos acadêmicos/gratuitos ORBacus (Object-Oriented Concepts) ILU Freeware ORB (Xerox Parc) DIMMA (ANSA) JADE (APM) JavaIDL (JavaSoft) TAO ( Distributed Object Computing Group at Washington University ) omniORB2 (AT&T Laboratories ) MICO (University of Frankfurt) CORBA - referências básicas Orfali & Harkey & Edwards. The Essential Distributed Objects Survival Guide. 1995 Mowbray & Zahavi. The Essential CORBA. 1995 Mowbray & Ruh. Inside CORBA. 1997 www.omg.org OMA Guide CORBA Revision 2 CORBAservices CORBAfacilities Distributed Object Computing Magazine, OMG http://mini.net/cetus CORBA - referências disponíveis na biblioteca da PUCPR Advanced CORBA programming with C++ Client/ server programming with Java and CORBA - 2nd ed. CORBA : a guide to the common object request broker architecture CORBA fundamentals and programming Essential CORBA : systems integration using distributed objects, The Understanding CORBA : common object request broker architecture CORBA - objetivos construcão de sistemas distribuídos: criacão de novos componentes integracão de componentes existentes (legados) middleware: não inclui modelagem de aplicacões não inclui implementacão de aplicacões inclui mecanismos que auxiliam na implementacão, a partir do modelo e do projeto CORBA - abordagem orientacão a objetos modelo cliente/servidor comunicação via RPC mecanismos disponíveis através de: servicos, facilidades e domínios independência de: hardware, SO, linguagem ORB Implementação do Objeto Cliente Request ORB 17 Modelo de objetos Clientes são entidades que requisitam serviços. Uma requisição inclui uma operação, o objeto destino, parâmetros da operação. Uma operação denota um serviço que pode ser requisitado. Um objeto é um encapsulamento de serviços que podem ser requisitados por clientes. Um valor é qualquer coisa que pode ser parâmetro em uma requisição; valores podem identificar um objeto. Uma referência a objeto é um nome que identifica um certo objeto de maneira consistente. 18 Operações A assinatura de uma operação define os valores que podem ser usados como parâmetros e resultados em sua requisição. Cada parâmetro tem um modo e um tipo. Os modos de parâmetro são: in, out, inout O resultado de uma requisição pode ser uma exceção, denotando serviço anormal. Uma exceção é usada para passar informação para o originador da requisição. Semântica: at-most-once, oneway (best-effort, cliente não tem resultados) 19 Arquitetura ORB Implementação do objeto Cliente Invocação Dinâmica Stubs IDL Interface ORB Esqueleto IDL Adaptador do Objeto Núcleo ORB 20 Componentes ORB Interface de Invocação Dinâmica: clientes fazem requisições independentemente da interface do objeto; cliente sabe o tipo do objeto a assinatura da operação. Stubs IDL: clientes fazem requisições de acordo com a interface do objeto (IDL: Interface Definition Language); cliente tem uma referência para o objeto e sabe a assinatura da operação. Esqueleto IDL: a implementação do objeto recebe uma requisição através do esqueleto IDL. (Há stubs e esqueletos para cada tipo de objeto.) Adaptador do Objeto: a implementação do objeto pode chamar um adaptador do objeto durante o processamento de uma requisição (resolver 21 referências, segurança, ...) IDL: Interface Definition Language IDL stub Definições IDL Repositório de Interfaces Esqueleto IDL Implementação (em linguagem) Repositório de Implementação 22 IDL - exemplo module Escola { interface Curso; // declarado, mas não definido interface Estudante { attribute string nome; attribute unsigned long matricula; exception ClasseLotada; void registra (in Curso curso) raises (ClasseLotada); exception ReqIncompleto; void gradua ( ) raises (ReqIncompleto); typedef sequence<Curso> ListaCursos; ListaCursos cursos_registrados(); } } Exemplo – arquivo IDL // IDL - arquivo Hello.idl interface Hello { void trabalhe ( ); }; Exemplo – arquivos relacionados à IDL compilação do arquivo IDL: idl Hello.idl Arquivos gerados: Hello.h Hello.cpp Hello_skel.h Hello_skel.cpp Exemplo – implementação do objeto em Java import org.omg.CORBA.*; public class Hello_impl extends _HelloImplBase { public void trabalhe ( ) { System.out.println("Hello World!"); } } Exemplo – ativação do servidor (1) // Initialize the ORB ORB orb = ORB.init ( args, new java.util.Properties ( ) ) ; // Initialize the Basic Object Adapter BOA boa = orb.BOA_init ( args, new java.util.Properties ( ) ) ; // Create the implementation object Hello_impl p = new Hello_impl ( ) ; Exemplo – ativação do servidor (2) // Export a reference to this object to a file // obtém uma referência para o objeto // em formato de string String ref = orb.object_to_string ( p ); // abre um arquivo para escrita String refFile = "C:\Temp\Hello.ref"; FileOutputStream file = new FileOutputStream(refFile); PrintStream out = new PrintStream(file); // escreve a referência no arquivo em formato de string out.println( ref ); Exemplo – ativação do servidor (3) // Run the object implementation boa.impl_is_ready ( null ); Exemplo – cliente em Java (1) // Initialize ORB ORB orb = ORB.init ( args, new java.util.Properties ( ) ); Exemplo – cliente em Java (2) // Get "hello" object reference from a file // abre o arquivo para leitura String refFile = "C:\Temp\Hello.ref"; FileInputStream file = new FileInputStream(refFile); DataInputStream in = new DataInputStream(file); // lê a referência em formato de string String ref = in.readLine(); Exemplo – cliente em Java (3) // Convert IOR String reference to object reference org.omg.CORBA.Object obj = orb.string_to_object(ref); // Throw an exception in case of failure if (obj == null) throw new RuntimeException(); // Cast generic Corba.Object reference to // Hello interface reference Hello h = HelloHelper.narrow(obj); // Finally, use the reference ! h.trabalhe ( ); // remote method invocation CORBA Services ORB e serviços CORBA Cliente Cliente Objeto Objeto ORB Persistence Object Service Transaction Service Naming Service Event Service Security Service Services - categorias Information management Task management System management Infrastructure Services - information management property relationship query externalization persistent object collection Services - task management events concurrency transaction Services - system management naming lifecycle licensing trader Services - infrastructure Security Time Services Messaging Property Service propriedades são atributos dinâmicos vinculados a objetos de aplicacão propriedades são úteis para aplicacões de gerenciamento, como desktop managers, debugging tools, browsers,... exemplo: um desktop manager pode vincular propriedades de protecão e compartilhamento a objetos exemplo: uma ferramenta de debugging pode vincular informacão sobre a execucão (como breakpoints) a objetos de um programa Property Service - produtos OpenFusion Property Service (PrismTech) Property Service with Java & C++ bindings. Property Service (Carsten Zerbst) Property Service implemented using Tcl and Mico. Relationship Service permite estabelecer ligacões entre objetos evita que objetos mantenham object references explicitamente cria objetos adicionais: Relationship Role Relationship Service produtos Enabled Systems Persistent Relationship Service (Enabled Systems) Relationship Service with Java & C++ bindings. OpenFusion Relationship Service (PrismTech) Relationship Service with Java & C++ bindings. Query Service usado com bancos de dados comerciais suporta bancos relacionais e OO proposto por: IBM, Sybase, SunSoft contempla: SQL92, SQL-3, OQL queries são dinâmicas queries podem ser resolvidas sincrona ou assincronamente Externalization Service converte estruturas de dados em formato que pode ser armazenado externamente ao programa e transmitido via rede remove ponteiros parte do processo de marshalling útil também para migrar objetos (mas não inclui métodos) Persistent Object Service criado por fornecedores de bancos de dados relacionais e OO inclui 3 protocolos de persistência: ODMG 93 direct access protocol (usa DDL, um subconjunto de IDL) dynamic data object protocol Persistent Object Service produtos Secant Extreme Persistent Object Service for C++ and Java (Secant) Persistent Object Service with Java & C++ bindings. Collection Service grupos de objetos listas sequenciais pilhas filas bags ... estende a funcionalidade de bibliotecas como a STL (Standard Template Library) para sistemas distribuídos Collection Service - produtos OpenFusion Collection Service (PrismTech) Collection Service with Java & C++ bindings. Events Service canal de passagem de eventos entre produtores e consumidores de eventos pode ser usado para comunicacão multicast um consumidor registra seu interesse em eventos com o servico estilos de interacão: push pull Events Service - produtos NetEvents (Exemplar Development) Java implementation of the Event Service. OpenFusion Event Service (PrismTech) Event Service with Java & C++ bindings. Notification Service - produtos DSTC Notification Service (DSTC) C++ implementation of the Notification Service. OpenFusion Notification Service (PrismTech) Notification Service with Java & C++ bindings. ORBacus Notify (OOC) C++ implementation of the Notification Service. Orbital Notification Service (NEC) C++ implementation of the Notification Service. Concurrency Service garante acesso atômico a objetos distribuídos portabilidade: uso de concorrência por múltiplos sistemas operacionais e linguagens tipos de lock: read, write upgrade (pode mudar para write) intention read, intention write (fine granularity) Concurrency Service produtos OpenFusion Concurrency Service (PrismTech) Concurrency Service with Java & C++ bindings. Transaction Service OTS: Object Transaction Service permite a manipulacão de estados de objetos distribuídos de forma consistente trabalha sobre monitores compatíveis com X/Open: Tuxedo protocols IBM/Transarc Encina bancos de dados OO compatíveis com ODMG-93 LU6.2 da IBM usa two-phase commit protocol suporta transações flat e nested baixo suporte a tolerância a falhas (Orbix + Isis) não suporta transações de longa duração Transaction Service - produtos CORBAplus Transaction Service (Expersoft) C++ implementation of the OTS Java Transaction Service (JTS) (JavaSoft) Java implementation of the OTS JTSArjuna (Arjuna Solutions) Java implementation of the Java Transaction Service OTSArjuna (Arjuna Solutions) C++ implementation of the OTS TPBroker (Hitachi) C++ implementation of OTS, and Java Implementation of OTS and JTS. VisiBroker ITS (Borland) Implementation of CORBA OTS and JTS Naming Service permite recuperar uma referência para um objeto dado um nome vinculado a este operacões básicas: bind unbind resolve espaco de nomes organizado em hierarquia (nós intermediários são chamados de contexto) Naming Service - produtos DSTC Scalable Naming Service (DSTC) C++ implementation of the Naming Service ENames - CORBA Naming Service Browser [German] (Entrance Software) Java / Swing Naming Service Browser jNames (OutBack Resource Group) Java implementation of the Naming Service OpenFusion Naming Service (PrismTech) Naming Service with Java & C++ bindings ORBacus Names (OOC) Java implementation of the Naming Service TRC Naming Service (Technical Resource Connection) Java implementation of the Naming Service. Lifecycle Service criacão de objetos é responsabilidade das aplicacões: lista de parâmetros é imprevisível permite criar object factories, que criam, duplicam, movem e removem objetos de certos tipos pelo sistema distribuído (com transparência de localizacão) Lifecycle Service - produtos OpenFusion Lifecycle Service (PrismTech) Lifecycle Service with Java & C++ bindings. Licensing Service permite protecão de propriedade intelectual através de gerenciamento de licensas de forma dinâmica inclui, por exemplo: trabalhos de arte em computador e aplicacões comerciais. estimativa: 70% de todo software em uso no mundo é pirata Licensing Service - produtos SilkMeter (Segue Software) C++ and Java implementations of the Licensing Service. Trading Service uma espécie de páginas amarelas, onde fornecedores publicam seus servicos e interessados procuram por eles nem sempre se sabe o nome do objeto que pode prover o servico um servico é caracterizado através de sua interface (influenciado por APM ANSA Trader) Trading Service - produtos DSTC Object Trader (DSTC) C++ implementation of the Trading Object Service. JTrader (Bruno Böttcher) Java Trading Service, implementing Manager Factory pattern OpenFusion Trading Service (PrismTech) Trading Object Service with Java & C++ bindings. ORBacus Trader (OOC) Java implementation of the Trading Object Service. TOI (IKV) C++ implementation of the Trading Object Service. Trader (Washington University in St. Louis) C++ implementation of the Trading Object Service. Security Service deve ser suportado diretamente pelo ORB abrange: confidencialidade, integridade, contabilidade, disponibilidade e nãorepudiacão funcões básicas: controle de acesso, auditoria, autenticacão e políticas de implementacão Security Service - produtos ORBAsec (Adiron) Java implementation of the Security Service (Level 1 and Level 2) SecureBroker (Promia) Java implementation of the Security Service (Level 1 and Level 2) Timing Service suporta recuperacão e sincronizacão de relógios (físicos) em sistemas distribuídos suporta sincronizacão através sinais de rádio gerados localmente ou por fontes do governo Timing Service - produtos OpenFusion Time Service (PrismTech) Time Service with Java & C++ bindings. Time Service (Carsten Zerbst) Time Service implemented using C++. Messaging Service permite processamento assíncrono através do ORB interfaces IDL têm semântica síncrona, por default estende a utilidade de CORBA para cobrir a funcionalidade disponível em MOM (messageoriented middleware) não suporta garantia de entrega de mensagens Messaging e Tolerância a Falhas The Ensemble Project (Cornell University) Piranha: A CORBA Tool For High Availability Q/CORBA (University of Colorado) TIB/ObjectBus 2.0 White Paper (TIBCO)