francisco c. r. reverbel - ime-uspkon/mac5759/aulas/slides/s01.pdf · o que faz o esqueleto: –...

16
1 Copyright © 1998, 1999 Francisco Reverbel IME-USP Departamento de Ciência da Computação Francisco C. R. Reverbel 2 Copyright © 1998, 1999 Francisco Reverbel IME-USP Departamento de Ciência da Computação 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 – revisão atual: CORBA 2.3 – próxima grande revisão: CORBA 3.0

Upload: vankiet

Post on 10-Dec-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

1 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

Francisco C. R. Reverbel

2 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

● Via de comunicação entre objetos (objectbus), na arquitetura do OMG

● Definido pela especificação CORBA(Common Object Request BrokerArchitecture)– 1991: CORBA 1.0– 1995: CORBA 2.0– revisão atual: CORBA 2.3– próxima grande revisão: CORBA 3.0

Page 2: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

3 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

Object Request Broker (ORB)

ObjectServices

ApplicationInterfaces

DomainInterfacesDomain

InterfacesDomain

InterfacesDomain

Interfaces

OMA (Object Management Arquitecture):

4 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

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

ORB

AI OS

AI

DI

AI

OS

DI DI

OS

ObjectFramework

AI = Application Interfaces DI = Domain InterfacesOS = Object Services

Page 3: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

5 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

● Arquitetura cliente/servidor orientada aobjetos

● Serviço fundamental do ORB: invocaçãoremota de métodos

● Clientes podem chamar métodos de objetosremotos do mesmo modo que chamammétodos de objetos locais (transparência delocalização)

● Para chamar métodos de um objeto o clienteprecisa ter uma referência para o objeto

6 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computaçã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: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

7 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

● O cliente simplesmente chama um métodosobre uma object reference– O ORB se encarrega de mandar uma

mensagem de requisição, esperar a mensagemde resposta e retornar os resultados para ocliente

– Para o cliente parece uma chamada de métodonormal

● Independência de linguagens deprogramação, sistemas operacionais eplataformas de hardware

8 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

� ������� �

ServidorCliente

Máquina X Máquina Y

ObjetoCORBAobjref

chama

● O quepareceacontecer

Page 5: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

9 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

� ������� �

ServidorCliente

Máquina X Máquina Y

ObjetoCORBAobjref

chama

ServidorCliente

Máquina X Máquina Y

ObjetoCORBAobjref

Stub

enviarequisição

receberesposta

chama

● O quepareceacontecer

● O queacontecenaverdade

10 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

● Objetos CORBA são encarnados porentidades da linguagem de programação naqual o servidor foi escrito

● Essas entidades são denominadasserventes– Ao longo de sua vida um objeto CORBA pode

ser representado por diferentes serventes

● Em C++ ou Java um servente é umainstância de uma classe

Page 6: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

11 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

Cliente

Máquina X

ObjetoCORBAobjref

chama

● O quepareceacontecer

12 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

Cliente

Máquina X

ObjetoCORBAobjref

chama

● O quepareceacontecer

● O queacontece naverdade

ServidorCliente

Máquina X Máquina Y

Esqueletoobjref

Stub

enviarequisição

receberesposta

chama

Serventechama

Page 7: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

13 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

● 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, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

● Os stubs e esqueletos são automaticamentegerados por um compilador IDL

● O compilador IDL recebe como entrada umaespecificação das interfaces dos objetos

● Essa especificação é escrita numalinguagem neutra, a Interface DefinitionLanguage (IDL)– Independência de linguagem de programação

Page 8: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

15 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

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, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

● 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: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

17 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

● 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, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

● Linguagem declarativa usada paraespecificar interfaces de objetos– Sintaxe baseada em C++– Suporta herança de interfaces– Todas as interfaces de objetos são derivadas de

CORBA:: Obje ct

– CORBA é especificada em IDL❏ de modo a ser independente de linguagem de

programação

– Oferece tipos básicos (pré-definidos) e permitedefinição de tipos pelos usuários

Page 10: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

19 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

● Definem como IDL é traduzida para asdiferentes linguagens de programação

● O OMG padronizou mapeamentos de IDLpara C, C++, Smalltalk, COBOL, Ada e Java– Há mapeamentos para outras linguagens, mas

ainda são proprietários (não padronizados)

20 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

// I DL

modul e Stock {

exception UnknownSt ock {

strin g name;

} ;

i nterface Quoter {

strin g name();

long value ( in s t ring sto ck)

r aises ( UnknownStock ) ;

} ;

};

Page 11: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

21 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

stubs esqueleto

cliente servidor

definições IDLrepositório

de interfacescompilador IDL

22 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

impo r t java . ut il . Hashta ble ;

publ i c class QuoterImpl extends Stock. Quot erPOA {

QuoterImp l (String n ame) {... }

public St r ing name( ) { retur n myName; }

public in t value(St r ing stoc k)

throw s Stock. UnknownStoc k {...}

private S t ring myName;

private Hashtable m yTable ;

}

Page 12: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

23 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

publ i c int va l ue(String stock)

t hrows St ock. UnknownStock {

I nteger r esult =

(Inte ger) myTabl e.get(sto ck);

i f (resul t == null) {

throw new Stock . UnknownSt ock (stoc k);

}

r eturn re sult. intVa l ue();

}

24 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

Quot erImpl (St r ing name) {

myName = name;

myTable = new Hasht able ();

/ / inicia l iza myTab l e com in f ormações

/ / lidas de um arqu i vo ou ba nco de da dos

/ / ...

/ / (n um quoter r eal, myT able deve r ia

/ / s er atualiz ado perio dicamente )

}

Page 13: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

25 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

publ i c static void main ( String[] args )

t hrows Ex ception {

org. omg.C ORBA.ORB or b =

org. omg.CORBA.ORB. init ( ar gs , null ) ;

org. omg.C ORBA.Objec t obj =

orb.r esolve_ini t ial_refe r ences(" RootPOA");

POA poa = POAHelper . narrow( obj );

QuoterImp l quoterSe r vant =

new QuoterImpl ( " Reuters" ) ;

26 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

org. omg.C ORBA.Objec t quoter =

quote r Servant ._ t his_obje ct(orb);

PrintWrit er iorFile =

new P r intWriter (

n ew FileWri t er (" quot er .ref")

);

i orFile . pr intln (orb . object_t o_string( quoter ));

i orFile .c l ose();

poa.the_ POAManager ( ) .activat e();

orb.run() ;

}

Page 14: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

27 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

● Clientes precisam obter object references● Uma object reference é obtida como

resultado de alguma operação chamadapelo cliente– Clientes não podem “construir” ou “inventar”

object references

● Uma object reference pode ser convertidaem string e depois reconvertida em objectreference– Você pode guardar essa string num arquivo– Pode divulgá-la como bem entender

28 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

publ i c static void main ( String[] args ) {

t ry {

quote r .ref Buff eredReade r iorFile =

new Buffere dReader (

new Fil eReader (" quoter .re f ")

);

Strin g s = iorF i le . readL i ne();

iorFi l e.close() ;

org. omg.CORBA.ORB orb =

or g. omg.CORBA.ORB. in i t ( args , null);

Page 15: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

29 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

� ������ �

org. omg.CORBA.Object obj =

o r b.string_ t o_object ( s);

Quote r quoter = QuoterHe l per .narr ow( obj );

Syste m.out. prin t ln (

" Valor de " + args [0 ] + ": " +

q uoter .valu e( args [0] ) +

" ( fonte : " + quoter . name() + ")”

);

}

30 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

� ������ �

catch (St ock. UnknownStock e) {

Syste m.out. prin t ln (

" Nao dispon í vel cota ção de " +

a r gs [0]

);

}

catch (Ex ception e) {

e. pri ntStackTra ce();

}

}

Page 16: Francisco C. R. Reverbel - IME-USPkon/MAC5759/aulas/slides/s01.pdf · O que faz o esqueleto: – Desempacota os parâmetros recebidos numa mensagem de requisição ... – Defina

31 Copyright © 1998, 1999 Francisco ReverbelIME-USPDepartamento de Ciência da Computação

● No exemplo visto o servidor e o clienteforam escritos na mesma linguagem

● Poderiam ter sido escritos em linguagensdiferentes– Por exemplo: servidor em C++ e cliente em Java

● CORBA provê interoperabilidade entre– linguagens de programação– sistemas operacionais– arquiteturas de hardware