Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de...

16
1 Copyright © 1998-2006 Francisco Reverbel IME-USP Departamento de Ciência da Computação Uma Introdução à Arquitetura CORBA Francisco C. R. Reverbel 2 Copyright © 1998-2006 Francisco Reverbel IME-USP Departamento de Ciência da Computação 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

Transcript of Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de...

Page 1: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

1 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Uma Introdução à Arquitetura CORBA

Francisco C. R. Reverbel

2 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

O Object Request Broker (ORB)

Via de comunicação entre objetos (objectbus), na arquitetura do OMGDefinido pela especificação CORBA (Common Object Request BrokerArchitecture)– 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

Page 2: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

3 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Arquitetura de Gerenciamento de Objetos

Object Request Broker (ORB)

ObjectServices

ApplicationInterfaces

DomainInterfacesDomain

InterfacesDomain

InterfacesDomain

Interfaces

OMA (Object Management Arquitecture):

4 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Utilização da OMA

Arcabouço (framework) para aplicações distribuídas:

ORB

AI OS

AIDI

AIOS

DI DIOS

ObjectFramework

AI = Application Interfaces DI = Domain InterfacesOS = Object Services

Page 3: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

5 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

CORBA

Arquitetura cliente/servidor orientada a objetosServiço fundamental do ORB: invocação remota de métodosClientes 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

6 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Transparência de Localização

Servidor remoto

Servidor local

Cliente

Máquina X Máquina Y

ObjetoCORBA

ObjetoCORBA

ObjetoCORBA

ObjetoCORBA

ObjetoCORBA

ObjetoCORBA

ObjetoCORBA

objeto co-locado

Objrefs

Page 4: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

7 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

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

8 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Invocação Remota de Métodos (cont.)

ServidorCliente

Máquina X Máquina Y

ObjetoCORBAobjref

chama

O que parece acontecer

Page 5: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

9 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Invocação Remota de Métodos (cont.)

ServidorCliente

Máquina X Máquina Y

ObjetoCORBAobjref

chama

ServidorCliente

Máquina X Máquina Y

ObjetoCORBAobjref

Stub

enviarequisição

receberesposta

chama

O que parece acontecer

O que acontece na verdade

10 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Serventes

Objetos CORBA são encarnados por entidades da linguagem de programação na qual o servidor foi escritoEssas 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

Page 6: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

11 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Refinando uma Figura Já Vista

Cliente

Máquina X

ObjetoCORBAobjref

chama

� O que parece acontecer

12 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Refinando uma Figura Já Vista

Cliente

Máquina X

ObjetoCORBAobjref

chama

� O que parece acontecer

� O que acontece na verdade

ServidorCliente

Máquina X Máquina Y

Esqueletoobjref

Stub

enviarequisição

receberesposta

chama

Serventechama

Page 7: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

13 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

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

14 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

O Compilador IDL

Os stubs e esqueletos são automaticamente gerados por um compilador IDLO compilador IDL recebe como entrada uma especificação das interfaces dos objetosEssa especificação é escrita numa linguagem neutra, a Interface DefinitionLanguage (IDL)– Independência de linguagem de programação

Page 8: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

15 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Componentes de CORBA

Independe de ORB

Depende das definições IDL

Depende do adaptador

Interface proprietária

Interfacede

InvocaçãoDinâmica

Stub IDL

Cliente

EsqueletoIDL

EsqueletoDinâmico

Servidor

Interfacedo

ORB

Núcleo do ORB

Adaptadorde

Objetos

16 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

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)

Page 9: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

17 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

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

18 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

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

Page 10: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

19 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Mapeamentos de IDL

Definem como IDL é traduzida para as diferentes linguagens de programaçãoO 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)

20 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Exemplo de Interface IDL

// IDL

module Stock {

exception UnknownStock {

string name;

};

interface Quoter {

string name();

long value(in string stock)

raises(UnknownStock);

};

};

Page 11: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

21 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Geração de Stubs e Esqueletos

stubs esqueleto

cliente servidor

definições IDLrepositório

de interfacescompilador IDL

22 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

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;

}

Page 12: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

23 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

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();

}

24 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

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)

}

Page 13: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

25 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

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");

26 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

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();

}

Page 14: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

27 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Obtenção de Object References

Clientes precisam obter object referencesUma 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 objectreference– Você pode guardar essa string num arquivo – Pode divulgá-la como bem entender

28 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

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);

Page 15: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

29 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

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() + ")”

);

}

30 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

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();

}

}

Page 16: Uma Introdução à Arquitetura CORBA - IME-USPreverbel/SMW-07/Slides/intro-CORBA.pdf · Exemplo de Cliente Java (cont.) org.omg.CORBA.Object obj = ... – Por exemplo: servidor em

31 Copyright © 1998-2006 Francisco Reverbel IME-USPDepartamento de Ciência da Computação

Observações

No exemplo visto o servidor e o cliente foram escritos na mesma linguagemPoderiam 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