Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Introdução a CORBA
Renato Cerqueira
Departamento de Informática, PUC-Rio
Ferramentas de Programação p/ SD
• Vários níveis de abstração
• Sockets (TCP/IP)
• Chamada de Procedimentos Remotos (RPC)
• Objetos Distribuídos
Chamadas Locais
procedimento
procedimento
CorpoPrincipaldoPrograma
Programa Aplicativo
RPC (1)
Cliente
CorpoPrincipaldoPrograma
Programa Aplicativo
procedimento
procedimento
Rede Servidor
RPC (2)
stub doser-vidor
stubdo
clienteCorpoPrincipaldoPrograma
Programa Aplicativo
procedimento
procedimento
Suporte a Compilação
Definiçãoda Interface
em IDL
compiladorIDL
arquivos decabeçalhos
stub do cliente
stub do servidor
Geração da Aplicação
IDL compiladorIDL
arquivos decabeçalhos
fontes dostub do cliente
fonte dostub do servidor
bibliotecaRun Time
compiladorC
compiladorC
cliente
servidor
fontes docliente
fontes doservidor
Objetos Distribuídos
• Evolução do conceito de RPC
• Unidades computacionais com um fim específico, usadas para compor várias aplicações
• Principais características:
• Encapsulamento de implementação
• Interfaces bem definidas (uso de IDLs)
• Baixo grau de acoplamento entre componentes
O que é Middleware?
• Chamada do Middleware 2003:
• Middleware é a infra-estrutura de software que reside entre as aplicações e os sistemas operacionais, as camadas de protocolos de rede, e o hardware. Seu papel principal é (1) fazer o elo entre as aplicações e as infra-estruturas mais básicas de hardware e software de forma a coordenar como as partes das aplicações são conectadas e como elas interagem, e (2) permitir e simplificar a integração de componentes de software desenvolvidos por múltiplos fornecedores de tecnologias.
• middleware.internet2.edu
• Middleware é a camada de software entre a infra-estrutura de rede e as aplicações. Essa camada oferece diversos serviços de apoio, tais como identificação, autenticação, autorização, diretórios e segurança.
Middleware e Componentes
• Componentes de Software• Unidades binárias desenvolvidas de forma independente que cooperam
através de interfaces bem definidas para compor sistemas computacionais.
• Segue um modelo de componentes e pode ser publicado de forma independente e composto sem modificações seguindo um padrão de composição.
• Modelo de Componentes• Define padrões específicos de interação e composição.
• Middleware: implementação de um modelo de componentes• Conjunto de elementos de software executáveis necessários para a execução
de componentes que aderem ao modelo em questão.
CORBA
• É apenas um padrão: existem várias implementações
• Integração de ambientes heterogêneos
• Plataformas de hardware e sistemas operacionais
• Linguagens de programação
• Transparência de localidade dos serviços (objetos)
• Mapeamentos de sua IDL para várias linguagens(C++, C, Smalltalk, Java, COBOL, Lua, Python, …)
Exemplo de IDL
struct Book { string author; string title;};
typedef sequence<Book> BooksSeq;
interface Library { boolean addBook(in Book abook); BooksSeq getBooks(); Book getBook( in string title );
};
Processamento da IDL
IDL CompiladorIDL
STUB
Esqueletode
implem.
Cliente
Linguagem AAmbiente X
Linguagem BAmbiente Y
Integração entre Linguagens
esqueletoC++
proxyem Java
Esqueletoda aplicaçãoem Java
Programa Aplicativo
componenteem C++
componenteem C++
Integração entre Plataformas
• Protocolo de comunicação padronizado entre um proxy e seu objeto servidor
• IIOP: Internet Inter-ORB Protocol
• Define o formato de representação dos valores trocados entre cliente e servidor
• Permite a comunicação entre objetos em plataformas diferentes
• Permite a comunicação entre diferentes implementações de CORBA
Arquitetura Básica
DII StubEstático
InterfaceORB
Núcleo do ORB
DSIEsqueletoEstático
InterfaceORB
Núcleo do ORB
Adaptadorde Objetos
Repositóriode Interface
Repositório deImplementação
Aplicação Cliente Implementação do Objeto Servidor
Interface idêntica para todas as implementações ORB.
Interface dependente do Adaptador de Objetos.
Interface gerada a partir de definições em IDL.
Rede(IIOP)
Referência de Objetos
• Para a criação de um proxy, é necessário uma referência para o objeto servidor
• CORBA define um padrão para a formação de referências de objetos, permitindo que objetos de ORBs diferentes possam se comunicar
• IOR = endereço IP + porta socket + ID do objeto(Inter-ORB Reference)
• Um IOR possui uma representação em forma de string
CORBA IDL
Tipos Básicos
Tipo Descrição Tamanho
(unsigned)short números inteiros 16 bits
(unsigned)long números inteiros 32 bits
(unsigned)long long números inteiros 64 bits
float IEEE precisão simples 32 bits
double IEEE precisão dupla 64 bits
long double IEEE prec. estendida 80 bits
fixed No. de ponto fixo até 31 dígitos
boolean TRUE ou FALSE ñ especificado
char ISO Latin-1 8 bits
wchar, wstring char set ñ definido tamanho variável
string ISO Latin-1 tamanho variável
octet 0-255 8 bits
Tipo Any
• Pode armazenar valores de qualquer tipo de dado representável em IDL.
• O tipo de seu conteúdo só pode ser verificado em tempo de execução.
• Composto por typecode e valor(ambos de tamanho variável)
Tipos Estruturados
• typedeftypedef short TempType;typedef TempType TemperatureType;
• enumenum Color {red, green, blue, black, orange};
• structstruct TimeOfDay { short hour; short minute; short secong;};
"unionunion U switch (Boolean) { case FALSE: long count; case TRUE: string msg; default: float cost;};
"arraytypedef Color ColorVec[10];typedef string Table[10][20];
"sequencetypedef sequence<Color> Colors;typedef sequence<long, 100> Nums;
Interfaces
interface IExtensibleObject { Object narrow (in string interfacename); void addRef(); void release ();};
interface IPersistentObject : IExtensibleObject{ boolean load (in string filename); boolean save (in string filename);};
Interfaces com Atributos
typedef long ISBN;enum FuzzyBoolean {NO, YES, UNKNOWN};
interface Collection { readonly attribute long number_of_books; attribute string name_of_collection;
FuzzyBoolean isInCollection (in ISBN book_id);};
Parâmetros in/out/inout
struct BookDetails { string author; string title; ISBN book_id; long stock;};
typdef sequence<BookDetails> BookDetailsSeq;
interface SearchableCollection : Collection { boolean findByTitle (in string title, out BookDetailsSeq books_found);
void updateStock (inout BookDetailsSeq books);};
Exceções
struct Date { short day; short month; short year;};exception UnavailableBook { Date when_available;};
interface BorrowableCollection : Collection { void borrowBook (in ISBN book_id, in string borrower, out Date return_date) raises (UnavailableBook);};