530 likes | 842 Views
CORBA. Grupo: Sergio Cosme N. C. Filho Tatiana Cardia Petra. O que é CORBA?. CORBA é o acrônimo de C ommon O bject R equest B roker A rchitecture.
E N D
CORBA Grupo: Sergio Cosme N. C. Filho Tatiana Cardia Petra
O que é CORBA? • CORBA é o acrônimo de Common Object Request Broker Architecture. • Uma especificação aberta definida pela OMG, de uma arquitetura e infra-estrutura que possibilita a comunicação e interoperabilidade entre aplicações OO distribuídas em uma rede (intranet ou internet).
Interoperabilidade • Esta interoperabilidade permite que um programa • baseado em CORBA • escrito em qualquer linguagem de programação • rodando em qualquer tipo de computador • com qualquer Sistema Operacional • interaja através da rede com outra aplicação • também baseada em CORBA • escrita em outra linguagem de programação • rodando em outro tipo de computador • com outro Sistema Operacional
Como é possível essa Interoperabilidade? • Existem duas partes chave na especificação: • A IDL (Interface Definition Language) • E o protocolo padronizado IIOP
IDL – Interface Definition Language • É a parte sintática do contrato estabelecido entre o servidor e o cliente que o invoca. • É independente da linguagem de programação.
IDL – Interface Definition Language Visão simplificada da requisição passando do cliente para a implementação do objeto:
IDL – Interface Definition Language • Qualquer cliente que quiser invocar uma operação de um objeto, tem que usar esta interface para especificar a operação e enviar seus parâmetros. • Quando a requisição atinge o objeto alvo, a mesma interface é usada para receber os parâmetros e executar a operação.
IDL – Interface Definition Language • Depois que a operação é executada, a interface é usada para enviar os resultados de volta. • E usada também no cliente para receber os resultados.
IDL – Interface Definition Language • Essa separação entre a interface e a implementação é a essência do CORBA, é como ele possibilita a interoperabilidade. • O cliente acessa os objetos apenas através dessa interface, invocando apenas as operações nela definidas.
IDL – Exemplo simples de sintaxe • Esta é a interface para um objeto que calcula a taxa de juros numa loja. O tipo de objeto é taxadevenda, e ele possui uma operação: calcular_taxa. • interface taxadevenda { float calcular_taxa(in float qtd_taxada);} • O objeto recebe um parâmetro de entrada, qtd_taxada, que é do tipo float. E retorna um valor também float.
IDL – Como integrar com minha LP? • OMG definiu mapeamentos da IDL para as maiores linguagens de programação: • C, C++, Java, Smalltalk, COBOL, Ada, Lisp, PL/1, Python, e IDLscript. • Implementações de mapeamentos para outras linguagens são suportados.
IDL – Como integrar com minha LP? • Um mapeamento relaciona um tipo de variável da linguagem para cada tipo de variável IDL, e traduz o formato de operação IDL para o formato da linguagem. • Também mapeia convenções de especificações de uso de memória, e outras convenções que permitam a infra-estrtura CORBA prover serviços para a implementação do objeto.
Como funciona a invocação remota? Comunicação entre ORBs através do protocolo IIOP para possibilitar Interoperabilidade entre objetos na rede.
Como funciona a invocação remota? • Uma vez que o cliente sabe qual operação ele quer invocar, o “client stub” e o “object skeleton” são gerados para a mesma IDL. • “client stub” e “skeleton stub” são como proxies para o cliente e o objeto respectivamente.
Como funciona a invocação remota? • O ORB cliente e o ORB do Objeto têm que usar um protocolo comum de comunicação (IIOP). • O cliente não sabe a localização real do objeto, o que garante a transparência de localização, um principio que simplifica o desenho de objetos distribuídos.
ORB – Object Request Broker • O ORB é quem cuida de todos os detalhes envolvendo a passagem de uma requisição do cliente para o objeto, e também da passagem da resposta do objeto para o cliente. • É ele quem guarda o IR (Interface Repository), uma base de dados contendo as definições de interfaces IDL.
ORB – Object Request Broker • O ORB pode rodar em apenas uma máquina ou pode estar distribuído em várias máquinas na rede. • Em caso de pequenas aplicações é recomendado que ele fique concentrado em apenas uma máquina por questão de performance e simplicidade.
ORB – do lado do cliente • Ele provê definições de interfaces a partir do IR, e constrói as invocações para serem usadas pela DII (Dynamic Invocation Interface). • Ele também converte as referências dos objetos entre session e string, e converte formatos URL corbaloc e referências corbaname para referências session.
ORB – do lado do servidor • Embora o CORBA permita que o cliente veja toda referência de objeto válida correspondendo a uma instância na memória, na prática a instância não está na memória. • Para conservar os recursos do servidor, o ORB desativa os objetos que não estão sendo usados no momento, e reativa-os quando chega uma requisição.
DII – Dynamic Invocation Interface • Invocações via DII são diferentes de invocações via stub, da mesma forma que scripts diferem de programas. • As invocações DII são interpretadas em tempo de execução, e não compiladas previamente.
DII – Dynamic Invocation Interface • Usando DII, um cliente pode invocar operações de um novo tipo de objeto recém descoberto por ele. • Para isso o programador do cliente tem de escrever um código que retorne a definição da interface IDL a partir do IR, e construir uma invocação usando interfaces definidas no ORB. • A invocação por si só já é um objeto CORBA com sua própria referência.
ORB Interface • Provê acesso a todos os serviços do ORB, exceto: • Invocações do cliente (que passam pelo DII ou pelos stubs) • Ativações e chamadas de objetos (que passam pelo POA)
ORB Interface • Os serviços que ela provê acesso são: • Acesso ao IR, e construção das invocações DII. • Operações de referências de objetos, como conversões de formatos, criação de referências duplicadas, e armazenamento. • dentre outros serviços de funcionamento do CORBA...
POA – Portable Object Adapter • É a peça do ORB que gerencia os recursos do lado do servidor. Desativando os objects servants quando eles não estão em uso, e reativando-os quando eles são novamente necessários. • Objects Servants são os recursos escalonados para a operação do objeto.
Comerciais • Visibroker – Inprise • Orbix - Iona • CorbaPlus - Expersoft • OAK - Camros Corporation • RCP-ORB - Nortel • DAIS - PeerLogic
Gratuitas • JavaORB • Engine Room CORBA • Jonathan • ORBit • DynaOrb • Arachne • TAO • fnOrb • MICO • OmniOrb • JacORB • Electra • DOME
Gratuitas para uso não comercial • Voyager - ObjectSpace • ORBacus - Object Oriented Concepts
Casos de Sucesso - PACS-HC • Empresa: Instituto do Coração do Hospital das Clínicas da FMUSP • Área de Atuação: Saúde • Broker utilizado: Visibroker (Inprise) • Projeto: PACS-HC
Casos de Sucesso - PACS-HC • Ambiente distribuído para transmissão, arquivamento, processamento e visualização de imagens médicas, integrando-as aos sistemas de informações do Hospital das Clínicas (HC) da Faculdade de Medicina da USP e do Instituto do Coração (InCor). • Tendo que integrar informações de sistemas distribuídos e heterogêneos, o Instituto do Coração escolheu a tecnologia CORBA como base para a construção deste sistema.
Casos de Sucesso - OpenComm • Empresa: OpenComm do Brasil • Área de Atuação: Sistemas para Telecomunicações • Broker utilizado: OmniORB2r • Projeto: • A Plataforma MultiServiços - Open Telephony Server • O sistema OpenAgent
Casos de Sucesso - OpenComm • Ambos os produtos foram desenvolvidos em C++, utilizando sempre que possível produtos OpenSource, como o próprio OmniORB. Como resultado, a utilização de CORBA nestes sistemas apresentou um desempenho excelente, comportamento estável, além de permitir a integração de software distribuído entre os diferentes ambientes que faziam parte do projeto (Linux, Solaris, Windows).
Casos de Sucesso • Muitos outros casos de sucesso foram encontrados nas áreas de: • educação, pesquisa e desenvolvimento • empresas de computação • internet • etc...
CORBA x Eiffel • Tendo em vista que o CORBA não é uma linguagem de programação como o Eiffel, e considerando que os dois pontos chaves do Eiffel são: • Desenho por Contrato • Tratamento de Exceções • Apresentaremos como o CORBA trabalha com esses dois pontos.
CORBA x Eiffel – Desenho por Contrato • O Eiffel trabalha com o conceito de PRÉ e PÓS Condições. Um contrato é basicamente definido pelo estado que objeto deve possuir antes e depois da execução de uma operação. • O CORBA trabalha com o conceito de IDL. Aqui o contrato é definido através da provisão de algumas operações para o cliente.
CORBA x Eiffel – Tratamento de Exceções • O conceito de exceção no Eiffel, como em todas as linguagens de programação modernas, representa uma quebra de contrato, ou um comportamento indesejado de algum objeto no sistema. • O Eiffel trata exceções, tentando executar o método que falhou novamente, ou criando um “pânico organizado”.
CORBA x Eiffel – Tratamento de Exceções • Em CORBA, o conceito mais parecido com o tratamento de exceções, é o de Tolerância a Falhas. • Uma falha em CORBA acontece em geral devido a algum problema de hardware, ou da rede.
CORBA x Eiffel – Tratamento de Exceções • Não existe uma forma padronizada de trabalhar com Tolerância a Falhas em CORBA. • Existem muitas propostas formais e com sucesso, mas nenhuma padrão. • Em geral, as propostas trabalham com redundância e replicação de dados.
Conclusões • É um padrão diretamente suportado por empresas em todo o mundo. • Não é necessário ficar preso a determinados fornecedores, plataformas ou produtos, como acontece quando são escolhidas soluções proprietárias.