Transparências - IME-USP

Propaganda
Uma Introdução à Arquitetura
CORBA
Francisco C. R. Reverbel
IME-USP
Departamento de Ciência da Computação
1
Copyright © 1998-2006 Francisco Reverbel
O Object Request Broker (ORB)
” Via de comunicação entre objetos (object
bus), na arquitetura do OMG
” Definido pela especificação CORBA
(Common Object Request Broker
Architecture)
– 1991: CORBA 1.0
– 1995: CORBA 2.0 (IIOP)
– 1997: CORBA 2.2 (Portable Object Adapter)
– 1998: CORBA 2.3 (Objects by Value)
– 2002: CORBA 3.0
IME-USP
Departamento de Ciência da Computação
2
Copyright © 1998-2006 Francisco Reverbel
Arquitetura de Gerenciamento de Objetos
OMA (Object Management Arquitecture):
Application
Interfaces
Domain
Domain
Domain
Domain
Interfaces
Interfaces
Interfaces
Interfaces
Object Request Broker (ORB)
Object
Services
IME-USP
Departamento de Ciência da Computação
3
Copyright © 1998-2006 Francisco Reverbel
Utilização da OMA
Arcabouço (framework) para aplicações distribuídas:
AI
DI
DI
OS
AI DI
OS
ORB
AI
OS
Object
Framework
AI = Application Interfaces
IME-USP
Departamento de Ciência da Computação
DI = Domain Interfaces
OS = Object Services
4
Copyright © 1998-2006 Francisco Reverbel
CORBA
” Arquitetura cliente/servidor orientada a
objetos
” Serviço fundamental do ORB: invocação
remota de métodos
” Clientes podem chamar métodos de objetos
remotos do mesmo modo que chamam
métodos de objetos locais (transparência de
localização)
” Para chamar métodos de um objeto o cliente
precisa ter uma referência para o objeto
IME-USP
Departamento de Ciência da Computação
5
Copyright © 1998-2006 Francisco Reverbel
Transparência de Localização
Máquina X
Cliente
Objrefs
Máquina Y
Servidor remoto
Objeto
CORBA
objeto co-locado
Objeto
CORBA
Servidor local
Objeto
CORBA
Objeto
CORBA
Objeto
CORBA
Objeto
CORBA
Objeto
CORBA
IME-USP
Departamento de Ciência da Computação
6
Copyright © 1998-2006 Francisco Reverbel
Invocação Remota de Métodos
” O cliente simplesmente chama um método
sobre uma object reference
– O ORB se encarrega de mandar uma
mensagem de requisição, esperar a mensagem
de resposta e retornar os resultados para o
cliente
– Para o cliente parece uma chamada de método
normal
” Independência de linguagens de
programação, sistemas operacionais e
plataformas de hardware
IME-USP
Departamento de Ciência da Computação
7
Copyright © 1998-2006 Francisco Reverbel
Invocação Remota de Métodos (cont.)
” O que
parece
acontecer
Máquina X
Máquina Y
Cliente
Servidor
chama
objref
IME-USP
Departamento de Ciência da Computação
8
Objeto
CORBA
Copyright © 1998-2006 Francisco Reverbel
Invocação Remota de Métodos (cont.)
” O que
parece
acontecer
Máquina X
Máquina Y
Cliente
Servidor
chama
objref
” O que
acontece
na
verdade
Máquina X
Máquina Y
envia
requisição
Cliente
chama
objref
Objeto
CORBA
Servidor
Objeto
CORBA
Stub
recebe
resposta
IME-USP
Departamento de Ciência da Computação
9
Copyright © 1998-2006 Francisco Reverbel
Serventes
” Objetos CORBA são encarnados por
entidades da linguagem de programação na
qual o servidor foi escrito
” Essas entidades são denominadas
serventes
– Ao longo de sua vida um objeto CORBA pode
ser representado por diferentes serventes
” Em C++ ou Java um servente é uma
instância de uma classe
IME-USP
Departamento de Ciência da Computação
10
Copyright © 1998-2006 Francisco Reverbel
Refinando uma Figura Já Vista
O que
parece
acontecer
Máquina X
Cliente
chama
Objeto
CORBA
objref
IME-USP
Departamento de Ciência da Computação
11
Copyright © 1998-2006 Francisco Reverbel
Refinando uma Figura Já Vista
O que
parece
acontecer
Máquina X
Cliente
chama
O que
acontece na
verdade
Máquina X
Cliente
chama
objref
Objeto
CORBA
objref
Máquina Y
envia
requisição
Stub
Servidor
Esqueleto
chama
Servente
recebe
resposta
IME-USP
Departamento de Ciência da Computação
12
Copyright © 1998-2006 Francisco Reverbel
Stubs e Esqueletos
” O usuário não precisa escrever:
– nem os stubs usado nos clientes
– nem o esqueletos usados no servidores.
” O que faz o esqueleto:
– Desempacota os parâmetros recebidos numa
mensagem de requisição
– Chama o método de um servente que
implementa a operação requisitada
– Empacota numa mensagem de resposta os
resultados da operação
IME-USP
Departamento de Ciência da Computação
13
Copyright © 1998-2006 Francisco Reverbel
O Compilador IDL
” Os stubs e esqueletos são automaticamente
gerados por um compilador IDL
” O compilador IDL recebe como entrada uma
especificação das interfaces dos objetos
” Essa especificação é escrita numa
linguagem neutra, a Interface Definition
Language (IDL)
– Independência de linguagem de programação
IME-USP
Departamento de Ciência da Computação
14
Copyright © 1998-2006 Francisco Reverbel
Componentes de CORBA
Cliente
Interface
de
Invocação
Dinâmica
Stub IDL
Servidor
Esqueleto
IDL
Interface
do
ORB
Esqueleto
Dinâmico
Adaptador
de
Objetos
Núcleo do ORB
Independe de ORB
Depende do adaptador
Depende das definições IDL
Interface proprietária
IME-USP
Departamento de Ciência da Computação
15
Copyright © 1998-2006 Francisco Reverbel
Partes da Especificação CORBA
”
”
”
”
”
”
”
”
”
O núcleo (core) do ORB
A linguagem de definição de interfaces (IDL)
O repositório de interfaces
Mapeamentos de IDL para linguagens de
programação
Stubs e esqueletos estáticos
Interfaces de invocação dinâmica (DII) e de
esqueleto dinâmico (DSI)
Adaptadores de objetos (Object Adapters)
O repositório de implementações
Protocolos (GIOP e IIOP)
IME-USP
Departamento de Ciência da Computação
16
Copyright © 1998-2006 Francisco Reverbel
O Desenvolvimento de um Sistema
” Etapas Gerais:
– Defina as interfaces dos objetos e expresse-as
em OMG IDL (Interface Definition Language)
– Gere stubs e esqueletos
– Implemente objetos serventes
– Implemente o programa servidor
– Implemente aplicações clientes
IME-USP
Departamento de Ciência da Computação
17
Copyright © 1998-2006 Francisco Reverbel
OMG IDL
” Linguagem declarativa usada para
especificar interfaces de objetos
– Sintaxe baseada em C++
– Suporta herança de interfaces
– Todas as interfaces de objetos são derivadas de
CORBA::Object
– CORBA é especificada em IDL
❏ de
modo a ser independente de linguagem de
programação
– Oferece tipos básicos (pré-definidos) e permite
definição de tipos pelos usuários
IME-USP
Departamento de Ciência da Computação
18
Copyright © 1998-2006 Francisco Reverbel
Mapeamentos de IDL
” Definem como IDL é traduzida para as
diferentes linguagens de programação
” O OMG padronizou mapeamentos de IDL
para C, C++, Smalltalk, Java, COBOL, Ada,
Lisp, PL/1 e Python
– Há mapeamentos para outras linguagens, mas
ainda são proprietários (não padronizados)
IME-USP
Departamento de Ciência da Computação
19
Copyright © 1998-2006 Francisco Reverbel
Exemplo de Interface IDL
// IDL
module Stock {
exception UnknownStock {
string name;
};
interface Quoter {
string name();
long value(in string stock)
raises(UnknownStock);
};
};
IME-USP
Departamento de Ciência da Computação
20
Copyright © 1998-2006 Francisco Reverbel
Geração de Stubs e Esqueletos
definições IDL
repositório
de interfaces
compilador IDL
stubs
esqueleto
cliente
servidor
IME-USP
Departamento de Ciência da Computação
21
Copyright © 1998-2006 Francisco Reverbel
Servente Java para a Interface Quoter
import java.util.Hashtable;
public class QuoterImpl extends Stock.QuoterPOA {
QuoterImpl(String name) {...}
public String name() { return myName; }
public int value(String stock)
throws Stock.UnknownStock {...}
private String myName;
private Hashtable myTable;
}
IME-USP
Departamento de Ciência da Computação
22
Copyright © 1998-2006 Francisco Reverbel
Implementação da Operação value()
public int value(String stock)
throws Stock.UnknownStock {
Integer result =
(Integer)myTable.get(stock);
if (result == null) {
throw new Stock.UnknownStock(stock);
}
return result.intValue();
}
IME-USP
Departamento de Ciência da Computação
23
Copyright © 1998-2006 Francisco Reverbel
Construtor da Classe QuoterImpl
QuoterImpl(String name) {
myName = name;
myTable = new Hashtable();
// inicializa myTable com informações
// lidas de um arquivo ou banco de dados
// ...
//
//
(num quoter real, myTable deveria
ser atualizado periodicamente)
}
IME-USP
Departamento de Ciência da Computação
24
Copyright © 1998-2006 Francisco Reverbel
Mainline do Servidor de Cotações
public static void main(String[] args)
throws Exception {
org.omg.CORBA.ORB orb =
org.omg.CORBA.ORB.init(args, null);
org.omg.CORBA.Object obj =
orb.resolve_initial_references("RootPOA");
POA poa = POAHelper.narrow(obj);
QuoterImpl quoterServant =
new QuoterImpl("Reuters");
IME-USP
Departamento de Ciência da Computação
25
Copyright © 1998-2006 Francisco Reverbel
Mainline do Servidor de Cotações
org.omg.CORBA.Object quoter =
quoterServant._this_object(orb);
PrintWriter iorFile =
new PrintWriter(
new FileWriter("quoter.ref")
);
iorFile.println(orb.object_to_string(quoter));
iorFile.close();
poa.the_POAManager().activate();
orb.run();
}
IME-USP
Departamento de Ciência da Computação
26
Copyright © 1998-2006 Francisco Reverbel
Obtenção de Object References
” Clientes precisam obter object references
” Uma object reference é obtida como
resultado de alguma operação chamada
pelo cliente
– Clientes não podem “construir” ou “inventar”
object references
” Uma object reference pode ser convertida
em string e depois reconvertida em object
reference
– Você pode guardar essa string num arquivo
– Pode divulgá-la como bem entender
IME-USP
Departamento de Ciência da Computação
27
Copyright © 1998-2006 Francisco Reverbel
Exemplo de Cliente Java
public static void main(String[] args) {
try {
BufferedReader iorFile =
new BufferedReader(
new FileReader("quoter.ref")
);
String s = iorFile.readLine();
iorFile.close();
org.omg.CORBA.ORB orb =
org.omg.CORBA.ORB.init(args, null);
IME-USP
Departamento de Ciência da Computação
28
Copyright © 1998-2006 Francisco Reverbel
Exemplo de Cliente Java (cont.)
org.omg.CORBA.Object obj =
orb.string_to_object(s);
Quoter quoter = QuoterHelper.narrow(obj);
System.out.println(
"Valor de " + args[0] + ": " +
quoter.value(args[0]) +
" (fonte: " + quoter.name() + ")”
);
}
IME-USP
Departamento de Ciência da Computação
29
Copyright © 1998-2006 Francisco Reverbel
Exemplo de Cliente Java (cont.)
catch (Stock.UnknownStock e) {
System.out.println(
"Nao disponível cotação de " +
args[0]
);
}
catch (Exception e) {
e.printStackTrace();
}
}
IME-USP
Departamento de Ciência da Computação
30
Copyright © 1998-2006 Francisco Reverbel
Observações
” No exemplo visto o servidor e o cliente
foram escritos na mesma linguagem
” Poderiam ter sido escritos em linguagens
diferentes
– Por exemplo: servidor em C++ e cliente em Java
” CORBA provê interoperabilidade entre
– linguagens de programação
– sistemas operacionais
– arquiteturas de hardware
IME-USP
Departamento de Ciência da Computação
31
Copyright © 1998-2006 Francisco Reverbel
Download