Вы находитесь на странице: 1из 16

Uma Introduo Arquitetura CORBA

Francisco C. R. Reverbel

IME-USP Departamento de Cincia da Computao

Copyright 1998-2006 Francisco Reverbel

O Object Request Broker (ORB)


Via de comunicao entre objetos (object bus), na arquitetura do OMG Definido pela especificao 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 Cincia da Computao

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 Cincia da Computao

Copyright 1998-2006 Francisco Reverbel

Utilizao da OMA
Arcabouo (framework) para aplicaes distribudas:
AI DI AI DI OS DI OS

ORB

AI

OS Object Framework

AI = Application Interfaces
IME-USP Departamento de Cincia da Computao

DI = Domain Interfaces OS = Object Services


4
Copyright 1998-2006 Francisco Reverbel

CORBA
Arquitetura cliente/servidor orientada a objetos Servio fundamental do ORB: invocao remota de mtodos Clientes podem chamar mtodos de objetos remotos do mesmo modo que chamam mtodos de objetos locais (transparncia de localizao) Para chamar mtodos de um objeto o cliente precisa ter uma referncia para o objeto
IME-USP Departamento de Cincia da Computao

Copyright 1998-2006 Francisco Reverbel

Transparncia de Localizao
Mquina X
Cliente Objeto CORBA objeto co-locado

Mquina Y
Servidor remoto Objeto CORBA Objeto CORBA Objeto CORBA Objeto CORBA

Objrefs

Servidor local Objeto CORBA Objeto CORBA

IME-USP Departamento de Cincia da Computao

Copyright 1998-2006 Francisco Reverbel

Invocao Remota de Mtodos


O cliente simplesmente chama um mtodo sobre uma object reference
O ORB se encarrega de mandar uma mensagem de requisio, esperar a mensagem de resposta e retornar os resultados para o cliente Para o cliente parece uma chamada de mtodo normal

Independncia de linguagens de programao, sistemas operacionais e plataformas de hardware


IME-USP Departamento de Cincia da Computao

Copyright 1998-2006 Francisco Reverbel

Invocao Remota de Mtodos (cont.)


O que parece acontecer Mquina X
Cliente chama objref

Mquina Y
Servidor Objeto CORBA

IME-USP Departamento de Cincia da Computao

Copyright 1998-2006 Francisco Reverbel

Invocao Remota de Mtodos (cont.)


O que parece acontecer Mquina X
Cliente chama objref

Mquina Y
Servidor Objeto CORBA

O que acontece na verdade

Mquina X
Cliente chama objref Stub recebe resposta envia requisio

Mquina Y
Servidor Objeto CORBA

IME-USP Departamento de Cincia da Computao

Copyright 1998-2006 Francisco Reverbel

Serventes
Objetos CORBA so encarnados por entidades da linguagem de programao na qual o servidor foi escrito Essas entidades so denominadas serventes
Ao longo de sua vida um objeto CORBA pode ser representado por diferentes serventes

Em C++ ou Java um servente uma instncia de uma classe


IME-USP Departamento de Cincia da Computao

10

Copyright 1998-2006 Francisco Reverbel

Refinando uma Figura J Vista

O que parece acontecer

Mquina X
Cliente chama objref Objeto CORBA

IME-USP Departamento de Cincia da Computao

11

Copyright 1998-2006 Francisco Reverbel

Refinando uma Figura J Vista

O que parece acontecer O que acontece na verdade

Mquina X
Cliente chama objref Objeto CORBA

Mquina X
Cliente chama objref Stub recebe resposta
IME-USP Departamento de Cincia da Computao

Mquina Y
envia requisio Servidor Esqueleto chama Servente

12

Copyright 1998-2006 Francisco Reverbel

Stubs e Esqueletos
O usurio no precisa escrever:
nem os stubs usado nos clientes nem o esqueletos usados no servidores.

O que faz o esqueleto:


Desempacota os parmetros recebidos numa mensagem de requisio Chama o mtodo de um servente que implementa a operao requisitada Empacota numa mensagem de resposta os resultados da operao
IME-USP Departamento de Cincia da Computao

13

Copyright 1998-2006 Francisco Reverbel

O Compilador IDL
Os stubs e esqueletos so automaticamente gerados por um compilador IDL O compilador IDL recebe como entrada uma especificao das interfaces dos objetos Essa especificao escrita numa linguagem neutra, a Interface Definition Language (IDL)
Independncia de linguagem de programao

IME-USP Departamento de Cincia da Computao

14

Copyright 1998-2006 Francisco Reverbel

Componentes de CORBA
Cliente Servidor

Interface de Invocao Dinmica

Stub IDL

Interface do ORB

Esqueleto IDL

Esqueleto Dinmico

Adaptador de Objetos

Ncleo do ORB

Independe de ORB Depende das definies IDL


IME-USP Departamento de Cincia da Computao

Depende do adaptador Interface proprietria


15
Copyright 1998-2006 Francisco Reverbel

Partes da Especificao CORBA


O ncleo (core) do ORB A linguagem de definio de interfaces (IDL) O repositrio de interfaces Mapeamentos de IDL para linguagens de programao Stubs e esqueletos estticos Interfaces de invocao dinmica (DII) e de esqueleto dinmico (DSI) Adaptadores de objetos (Object Adapters) O repositrio de implementaes Protocolos (GIOP e IIOP)
IME-USP Departamento de Cincia da Computao

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 aplicaes clientes

IME-USP Departamento de Cincia da Computao

17

Copyright 1998-2006 Francisco Reverbel

OMG IDL
Linguagem declarativa usada para especificar interfaces de objetos
Sintaxe baseada em C++ Suporta herana de interfaces Todas as interfaces de objetos so derivadas de CORBA::Object CORBA especificada em IDL
de modo a ser independente de linguagem de programao

Oferece tipos bsicos (pr-definidos) e permite definio de tipos pelos usurios


IME-USP Departamento de Cincia da Computao

18

Copyright 1998-2006 Francisco Reverbel

Mapeamentos de IDL
Definem como IDL traduzida para as diferentes linguagens de programao 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 so proprietrios (no padronizados)

IME-USP Departamento de Cincia da Computao

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 Cincia da Computao

20

Copyright 1998-2006 Francisco Reverbel

Gerao de Stubs e Esqueletos


definies IDL compilador IDL repositrio de interfaces

stubs

esqueleto

cliente

servidor

IME-USP Departamento de Cincia da Computao

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 Cincia da Computao

22

Copyright 1998-2006 Francisco Reverbel

Implementao da Operao 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 Cincia da Computao

23

Copyright 1998-2006 Francisco Reverbel

Construtor da Classe QuoterImpl


QuoterImpl(String name) { myName = name; myTable = new Hashtable(); // inicializa myTable com informaes // lidas de um arquivo ou banco de dados // ... // // }
IME-USP Departamento de Cincia da Computao

(num quoter real, myTable deveria ser atualizado periodicamente)

24

Copyright 1998-2006 Francisco Reverbel

Mainline do Servidor de Cotaes


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 Cincia da Computao

25

Copyright 1998-2006 Francisco Reverbel

Mainline do Servidor de Cotaes


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 Cincia da Computao

26

Copyright 1998-2006 Francisco Reverbel

Obteno de Object References


Clientes precisam obter object references Uma object reference obtida como resultado de alguma operao chamada pelo cliente
Clientes no 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 Cincia da Computao

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 Cincia da Computao

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 Cincia da Computao

29

Copyright 1998-2006 Francisco Reverbel

Exemplo de Cliente Java (cont.)


catch (Stock.UnknownStock e) { System.out.println( "Nao disponvel cotao de " + args[0] ); } catch (Exception e) { e.printStackTrace(); } }
IME-USP Departamento de Cincia da Computao

30

Copyright 1998-2006 Francisco Reverbel

Observaes
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 programao sistemas operacionais arquiteturas de hardware
IME-USP Departamento de Cincia da Computao

31

Copyright 1998-2006 Francisco Reverbel

Вам также может понравиться