Exemplo de Cliente e de Servidor CORBA Escritos em C++ Voltando ao Nosso Exemplo

Documentos relacionados
Cliente. Servidor. Núcleo do ORB. Depende do adaptador Interface proprietária. Independe de ORB Depende das definições IDL.

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

Plataformas de Distribuição de Objetos

IORs, GIOP e IIOP. Partes da Especificação CORBA

Uma Introdução ao CORBA

Sistemas de Objetos DistribuídosPrimeira Aplicação Java ORB p.1/21

Prof. Me. Sérgio Carlos Portari Júnior

Arquitectura geral de funcionamento do MICO (CORBA)

Aula 28: Arquivos de texto

www/~cagf/sdgrad Serviço de Nomes CORBA e Interoperabilidade de ORBs

Plataformas de Distribuição de Objetos

Principais conceitos de CORBA

Orientação a Objetos. Programação em C++

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Aspectos para Construção de Aplicações Distribuídas

Tópicos em Sistemas Distribuídos CORBA

Laboratório de programação II

1) O que é CORBA? 2) O que é OMG e quem participa?

Repositórios de Implementações e Binding. Chamada Remota de Métodos

Sistemas Operacionais II

Objetos e Componentes Distribuídos: EJB e CORBA

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

Tem métodos e estado Pode ser implementado por um ou mais objetos de uma linguagem de programação como C++ ou Java

Tratamento de Exceções. Grupo de Linguagens de Programação Departamento de Informática PUC-Rio

Fundamentos de Programação

//conteúdo do arquivo pacote.h

INTRODUÇÃO. RPC x RMI

Introdução a CORBA. Renato Cerqueira. Departamento de Informática, PUC-Rio

15/4/15. Processamento Paralelo Middleware Orientado a Objetos. Sistema operacional é a única infraestrutura para interação. Middleware é adicionado

Programação Java. Tratamento de Exceções

Tratamento de Exceções, Multithreads e arquivos (em Java) Programação Orientada a Objetos

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Programação Orientada a Objetos. Manipulação de Exceções

Linguagens de Programação Departamento de Engenharia Eletrônica e de Computação - DEL-Poli/UFRJ Prof.: Miguel Elias Mitre Campista

O Serviço de Nomes CORBA

Diagrama de Classes. Conceitos Básicos. prof. Robinson Vida Monday, April 20, 15

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Tratamento de Exceções

Máquina Y. O que parece acontecer. O que acontece na verdade. Cliente. chama Objeto CORBA. objref. envia requisição. Cliente. Servidor.

TRATAMENTO DE EXCEÇÕES

Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II JAVA Décima Segunda Aula

Carlos Eduardo Batista. Centro de Informática - UFPB

Serviço de Nomes CORBA. Serviço de Nomes CORBA e Interoperabilidade de ORBs. Serviço de Nomes CORBA. Serviço de Nomes CORBA. Serviço de Nomes CORBA

CMP Técnicas de Programação 2 a Lista de Exercícios - Passagem de parâmetros por referência e ponteiros Max Gontijo de Oliveira

Ponteiros e Tabelas. K&R: Capítulo 5

Aula 27: Estruturas heterogêneas e alocação dinâmica

CORBA IDL. Interface Definition Language. Mário Meireles Teixeira.

Computação II Orientação a Objetos

#include <stdio.h> void Swap (int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } main () {

Sistemas Distribuídos

Modelo de Componentes CORBA

Lista de Linguagens de Programação 19

Curso de C. Introdução by Arnaldo V. Moura e Daniel F. Ferber 3/10/ :43 AM

Sistemas Distribuídos: Conceitos e Projeto RPC e RMI

ALOCAÇÃO DINÂMICA DE MEMÓRIA

1 Copyright 1998, 1999 Francisco Reverbel

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Linguagem de Programação I

Introdução à Programação. Conceitos Básicos de Orientação a Objetos

Linguagem de Programação C++

Programação estruturada em C++: extensões ao C. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2004/2005)

Aula 25: Alocação Dinâmica

Num sistema de objectos distribuídos, dois conceitos são fundamentais.

Torneio Estudantil de Computação Multi-Linguagem de Aveiro. Escola Superior de Tecnologia e Gestão de Águeda Universidade de Aveiro TECLA 2009

PLATAFORMA SIGA RIO DAS VELHAS MANUAL DO CÓDIGO FONTE

Desenvolvimento de Aplicações Java/CORBA

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve

Básico: estrutura de programa, sintaxe Interface com linha de comando

Aula 24: Ponteiros e Alocação Dinâmica

Orientação a Objetos. Programação em C++

Orientação a Objetos - Programação em C++

Tipos, Literais, Operadores

Tipos, Literais, Operadores

SCS-Java - Tutorial - Básico

Exame Especial de Linguagens de Programação - DCC024 -

Introdução ao SCS. Tecgraf PUC-Rio. outubro de 2010

RMI e RPC. RPC significou um passo muito grande em direcção à

# Estrutura de Dados # Aula - Revisão de C/C++ na Prática. Prof. Leinylson Fontinele Pereira

Objetos distribuídos. Roteiro. Java IDL

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

Java RMI. Sistemas Distribuídos. Mauro Lopes Carvalho Silva. Professor EBTT DAI Departamento de Informática Campus Monte Castelo

Funções em C. Lucas Ferrari de Oliveira Professor Adjunto. Linguagem de Programação Estruturada I. Universidade Federal do Paraná

Template de classe. class vetor { int *arranjo; int limite; public: vetor(int=100); int & operator[ ](int n); };

Templates. Templates em C++ é o mecanismo que permite que um tipo seja parâmetro de uma classe ou função

Fundamentos de Programação

Introdução ao OpenCV

Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.1/26

Linguagens compiladas: C++ Fora do livro adoptado

//conteúdo do arquivo Matriz.h class Matriz { private: int *elementos; int numerodelinhas; int numerodecolunas; void setnumerodelinhas(int); void

Sistemas de Objetos Distribuídos

Fundamentos de Programação 2

Programação Orientada a Objetos Aula I Declaração de classes, métodos construtores. Prof.: Bruno E. G. Gomes IFRN

ENGENHARIA DE PRODUÇÃO PROGRAMAÇÃO Algoritmos Conceitos Iniciais. Prof. Luiz Fernando Laguardia Campos FMS

PRDS C#.Net Alexandre L. Silva

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 32. Instituto de C

Transcrição:

Exemplo de Cliente e de Servidor CORBA Escritos em C++ 1 Copyright 1998, 1999 Francisco Reverbel Voltando ao Nosso Exemplo // IDL module Stock { exception UnknownStock { string name; interface Quoter { string name(); long value(in string stock) raises(unknownstock); 2 Copyright 1998, 1999 Francisco Reverbel

Esqueleto C++ para a Interface Quoter // Código C++ gerado pelo tradutor IDL namespace POA_Stock { class Quoter: public virtual PortableServer::ServantBase { public: virtual char* name() throw(corba::systemexception) = 0; virtual CORBA::Long value(const char*) throw(stock::unknownstock, CORBA::SystemException) = 0; 3 Copyright 1998, 1999 Francisco Reverbel Classe Servente para a Interface Quoter class QuoterImpl : public POA_Stock::Quoter { public: QuoterImpl(const char* my_name); char* name() throw(corba::systemexception); CORBA::Long value(const char* name) throw(stock::unknownstock, CORBA::SystemException); private: string m_name; // classe string ANSI/ISO map<string,corba::long> m_map; // map da STL 4 Copyright 1998, 1999 Francisco Reverbel

QuoterImpl::name() char* QuoterImpl::name() throw(corba::systemexception) { char* nm = CORBA::string_dup(m_name.c_str()); if (nm == 0) throw CORBA::NO_MEMORY(); return nm; 5 Copyright 1998, 1999 Francisco Reverbel QuoterImpl::value() CORBA::Long QuoterImpl::value(const char* stock) throw(stock::unknownstock, CORBA::SystemException) { map<string,corba::long>::iterator iter = m_map.find(stock); if (iter == m_map.end()) throw Stock::UnknownStock(stock); return (*iter).second; 6 Copyright 1998, 1999 Francisco Reverbel

QuoterImpl::QuoterImpl() QuoterImpl::QuoterImpl(const char* my_name) : m_name(my_name) { // inicializa m_map com informações lidas // de um arquivo ou banco de dados //... // (num quoter real, m_map deveria // ser atualizado periodicamente) 7 Copyright 1998, 1999 Francisco Reverbel Mainline do Servidor de Cotações int main(int argc, char* argv[]) { using namespace CORBA; using namespace Stock; ORB_ptr orb = ORB_init(argc, argv); Object_ptr obj= orb->resolve_initial_references( RootPOA ); POA_ptr poa = POA::_narrow(obj); QuoterImpl quoter_impl( DowJones ); Quoter_ptr quoter = quoter_impl._this(); poa->the_poamanager()->activate(); orb->run(); release(quoter); release(poa); release(obj); release(orb); 8 Copyright 1998, 1999 Francisco Reverbel

Ficou faltando uma coisa... A mainline do servidor deveria ter criado um arquivo contendo uma object reference (convertida para string) do Quoter. Como fizemos no exemplo em Java Para escrever o cliente C++, vamos supor que existe um arquivo chamado quoter.ref contendo uma referência para o Quoter 9 Copyright 1998, 1999 Francisco Reverbel Exemplo de Cliente C++ int main(int argc, char** argv) { using namespace CORBA; using namespace Stock; string objstr; // classe string ANSI/ISO ifstream is( quoter.ref ); is >> objstr; ORB_ptr orbref = ORB_init(argc, argv); Object_ptr objref = orbref->string_to_object(objstr.c_str()); 10 Copyright 1998, 1999 Francisco Reverbel

Exemplo de Cliente C++ (cont.) Quoter_ptr quoter = Quoter::_narrow(objref); char* name = quoter->name(); Long value = quoter->value(argv[1]); cout << Cotação de << argv[1] <<, fornecida por << name << : << value << endl; string_free(name); release(quoter); release(objref); release(orbref); return 0; 11 Copyright 1998, 1999 Francisco Reverbel Tratando Exceções no Cliente try { char* name = quoter->name(); Long value = quoter->value(argv[1]); cout << Cotação de << argv[1] <<, fornecida por << name << : << value << endl; catch(unknownstock& us) { cerr << Não disponível cotação de << us.name << endl; catch(systemexception&) { cerr << Exceção de sistema! << endl; 12 Copyright 1998, 1999 Francisco Reverbel

_ptrs e _vars O mapeamento de IDL para C++ define dois tipos de referências para objetos CORBA: Dada uma interface A, o compilador IDL gera definições de dois tipos C++, A_ptr e A_var Ambos tem semântica de ponteiros Ambos podem ser usados para para invocar operações sobre objetos remotos Uma referência tipo _ptr requer gerenciamento de memória explícito Uma referência tipo _var faz gerenciamento de memória de modo automático (smart pointer) 13 Copyright 1998, 1999 Francisco Reverbel Usando referências _var ORB_var orbref = ORB_init(argc, argv); Object_var objref = orbref->string_to_object(objstr.c_str()); Quoter_var quoter = Quoter::_narrow(objref); String_var name = quoter->name(); Long value = quoter->value(argv[1]); // não é mais preciso chamar release para // quoter, objref ou orbref, nem chamar // string_free para name 14 Copyright 1998, 1999 Francisco Reverbel

Observações O cliente C++ pode ser usado com o servidor Java Se completarmos o servidor C++ (fazendo-o criar o arquivo quoter.ref), ele poderá ser acessado pelo cliente Java. CORBA provê interoperabilidade entre linguagens de programação sistemas operacionais arquiteturas de hardware 15 Copyright 1998, 1999 Francisco Reverbel