aquiles burlamaqui luiz eduardo. agenda motivação objetivo história visão geral arquitetura...

Post on 16-Apr-2015

108 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Aquiles BurlamaquiLuiz Eduardo

Agenda• Motivação• Objetivo• História• Visão Geral• Arquitetura• Passo a Passo

Motivação: • Socket

Desenvolvimento lento• RPC

Procedural Dependente de linguagem

• RMI O.O Dependente de Linguagem

• Suporte a diversas linguagens, possibilitando a comunicação entre módulos escritos em linguagens distintas

Objetivo• Tornar fácil a implementação de aplicações

distribuídas• Para sistemas Orientado a Objetos e

procedurais• Independentes de:

plataforma sistema operacional linguagem de programação protocolo de comunicação

• Permitindo chamadas de procedimento remoto como se fossem locais

História• 1991 - CORBA 1.0 – ORB• 1996 – CORBA 2.0 – Comunicação entre

ORBs• 2002 – CORBA 3.0

Interoperação outros sistemas distribuídos suporte de interação assíncrona entre objetos,

mobilidade de objetos interação com grupos de objetos interação em tempo real, etc.

História• OMG

A arquitetura CORBA é desenvolvida pela OMG (Object Management Group). www.omg.org

A OMG foi fundada em 1989 por oito membros fundadores (3Com, American Airlines, Canon, Data General, HP, Philips, Sun e Unisys).

No ano 2000 tinha mais de 800 membros, incluindo IBM e Microsoft (apenas como observadora).

CORBA - Common Object Request Broker Architecture,

Especificação que permite aos objetos de sistemas distribuídos comunicarem-se entre si de forma transparente

Componentes principais da OMA• Object Management Architecture

Objetos da aplicação Facilidades CORBA Serviços de Objeto ORB

Conceito de ORB (Object Request Broker)• componente que auxilia o cliente a invocar

um método em um objeto de forma transparente (transparência de acesso) localização do objeto ativação do objeto se necessário comunicar ao objeto sobre a requisição do

cliente

Chamada através de um ORB

Objetivo: possibilitar que clientes invoquem métodos a objetos remotos (objetos CORBA), e que ambos possam ser implementados em linguagens distintas

A linguagem de implementação do cliente não precisa ser necessariamente orientada a objetos

Funcionalidades• invocações estáticas

interface remota do objeto CORBA é conhecida em tempo de compilação (utilização dos stubs e skeletons)

• invocações dinâmicas interface remota do objeto CORBA não é conhecida em

tempo de compilação

Estrutura de um ORB

Semântica de invocação• semântica at-most-once (default)• semântica OneWay

métodos sem resultados ou callbacks, o cliente não bloqueia na espera de uma resposta

• Semântica at-most-once O cliente continua imediatamente e pode mais tarde

bloquear-se à espera da resposta Objeto CORBA: objeto remoto

• implementa uma interface IDL• possui uma referência de objeto remoto• capaz de responder a invocações aos métodos de sua

interface

client server

proxy

or dynamic invocation

implementation repository object

adapter

ORBORB

skeleton

or dynamic skeleton

client program

interface repository

Request

Replycorecore for A

Servant A

Adaptador de objeto (Object Adapter)• interliga os objetos CORBA e as classes do

servidor• cria as referências a objetos remotos para os

objetos CORBA• despacha cada RMI através de um skeleton

para o servidor apropriado• ativa objetos (se necessário)• CORBA 2.2: POA (Portable Object Adapter)

permite que aplicações e servidores sejam executados em ORBs produzidos por desenvolvedores diferentes

Skeleton (servidor)• geradas na linguagem do servidor por um compilador

IDL• RMIs são despachadas através do skeleton apropriado

a um servidor• marshaling e unmarshaling

Stubs/proxies (cliente)• geradas na linguagem do cliente por um compilador

IDL• proxy (linguagens orientadas a objeto)• stub (linguagens procedurais)• marshaling e unmarshaling

Repositório de implementação• ativa por demanda os servidores registrados, e

localiza os servidores em execução• armazena tabela com o mapeamento dos nomes dos

adaptadores de objetos para suas implementações• na ativação de objeto remoto, o hostname e o número

da porta no servidor são adicionados na tabela• possibilita armazenar outras informações sobre os

servidores (e.g. controle de acesso)• permite replicação

aumento de disponibilidade e tolerância a falhas

Repositório de interface• provê informações sobre interfaces IDL

registradas (e.g. métodos, argumentos, exceções)

• cliente sem proxy de objeto pode obter informações necessárias (métodos e argumentos)

• necessário para invocações dinâmicas• nem todos os ORBs provêm um

repositório de interfaces

Interface de invocação dinâmica• permite que clientes façam invocações

dinâmicas a objetos CORBA desconhecidos

• cliente obtém informações necessárias sobre um objeto CORBA a partir do repositório de interfaces, e utiliza esta informação para construir uma invocação e enviá-la ao servidor

Passo para uma Inovação Dinâmica1. Identificar o objeto que queremos invocar

(provavelmente através do Trader Service do CORBAservices); 

2. Recuperar sua interface (buscá-la no Repositório de Interfaces); 

3. Construir a invocação; 4. Invocar a requisição, e receber os

resultados. 

Interface skeleton dinâmica• permite um objeto CORBA aceitar

invocações em uma interface sem skeleton interface não era conhecida em tempo de

compilação• skeleton dinâmico

recebe a invocação inspeciona o conteúdo da requisição para

descobrir o objeto destino, o método para ser invocado e os argumentos

invoca o destino

Facilidades para definir módulos, interfaces, tipos, atributos e métodos

sintaxe similar a C++ incluindo mais algumas palavras-chaves

Módulos IDL• permite agrupar interfaces e outros tipos IDL em

unidades lógicas• módulo define um nome de escopo (evita conflito

entre nomes) Interfaces IDL

• descrevem os métodos e atributos que são disponíveis por objetos CORBA que implementam a interface

module HelloApp{ interface Hello { string sayHello(); oneway void shutdown(); };};

class HelloImpl extends HelloPOA {private ORB orb;

public void setORB(ORB orb_val) {orb = orb_val; }

// implementação do método sayHello()public String sayHello() {return "\nHello world !!\n";}

// implementação do método shutdown()public void shutdown() {orb.shutdown(false);}}

public class HelloServer {public static void main(String args[]) {try{// Criação e inicialização do ORBORB orb = ORB.init(args, null);// obtém a referência do rootpoa e ativa o POAManagerPOA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));rootpoa.the_POAManager().activate();// cria o servant e registra com o ORBHelloImpl helloImpl = new HelloImpl();helloImpl.setORB(orb); // obtém referência do objeto servantorg.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);Hello href = HelloHelper.narrow(ref);org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");// Especifica o servidor de nomes(INS)NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);// Especifica uma referência de objetoString name = "Hello";NameComponent path[] = ncRef.to_name( name );ncRef.rebind(path, href);System.out.println("HelloServer ready and waiting ...");// Aguarda a invocação de clientesorb.run();} catch (Exception e) {System.err.println("ERROR: " + e);e.printStackTrace(System.out);}System.out.println("HelloServer Exiting ...");}}

public class HelloClient {static Hello helloImpl;

public static void main(String args[]){

try{// Cria e inicializa o ORBORB orb = ORB.init(args, null);org.omg.CORBA.Object objRef =

orb.resolve_initial_references("NameService");NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);

String name = "Hello";helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));

System.out.println("Obtained a handle on server object: " + helloImpl);

System.out.println(helloImpl.sayHello());helloImpl.shutdown();

} catch (Exception e) {System.out.println("ERROR : " + e) ;e.printStackTrace(System.out);

}}

}

}

● idlj -fall -Hello.idl●Javac *.java● orbd -ORBInitialPort 1050 -ORBInitialHost localhost &● java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost&● java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhost

Transparência de localização• Tratamento igual para Função local

Deficiências de projeto e processo Problemas com implementações Firewalls

1) Construir um exemplos simples onde programas se comuniquem usando CORBA• Nível 1: Mesma linguagem• Nível 2: Entre Java e C++

http://openorb.sourceforge.net/• Nível 3: Entre Java/C++ e Lua

(OiL - http://oil.luaforge.net/index.html).• Com base na experiência adquirida fazer um

relato do uso de CORBA com as linguagens utilizadas.

• Entrega dos códigos fontes

Uma linguagem de script leve• Pequena, portátil, eficiente

Uma linguagem tipada dinamicamente• O tipo da variável depende do valor armazenado• Toda linguagem pode ter erro de “tipos” em

tempo de execução Uma linguagem com gerência automática de

memória Pré-compilação em bytecodes

• Pode-se carregar arquivos compilados

Sintaxe convencional print(“hello world”) print“hello world”

Comentários de 1 linha -- (dois traços)

Comentários de blocos --[[ bloco ]]

Varáveis globais não precisam de declaração

Variáveis locais são declaradas com a palavra chave local

8 tipos básicos• nil – tipo do valor nil que é diferente de qualquer outro, é o

valor default das variáveis• boolean – true, false• number – double• string – array de caracteres, imutável• function – valor de primeira classe, significa que funções

podem ser armazenadas em variáveis, passadas como argumentos, retornadas

• userdata – dados C arbitrários, manipulado através da API C

• thread – threads independentes de execução• table – arrays associativos

Consulta do tipo da variável através da função type

Aritméticos +, -, *, /, ^

Relacionais <, >, <=, >=, ==, ~=

Operadores lógicos and, or, not Avaliação por curto-circuito

Concatenação ..

a = 0 a, b, c = 0, 0, 0 a, b = b, a -- troca de valores a, b, c = 0, 0 -- c recebe nil

Resultado da expressão {} Qualquer valor como chave, exceto

nil Único mecanismo de estruturação de

dados Indexação na forma variável[índice]

ou variável.índice, quando o índice é uma string

for var = inicio, fim [, passo] do bloco end Numérico

for var {, var} in expressão do bloco end Genérico

while expressão do bloco end repeat block until expressão break ou return pode ser usado para

terminar o laço if expressão then bloco {elseif expressão

then bloco} [else bloco] end

Retorno• foo()

Nenhum valor de retorno• x = foo()

Ajustado para 1 valor• x, y = foo()

Ajustado para 2 valores• {foo()}

Cria uma tabela com todos os valores retornados

Basic String Table Math IO OS

Oferecem funções básicas• print• type• setmetatable• pairs• error

Funções para manipulação de strings

Funções para manipulação de tabelas• table.insert• table.remove• table.sort

Funções matemáticas• math.sqrt• math.sin• math.log

Funções de entrada e saída• io.open• io.close• io.read• io.write

Funções associadas ao sistema operacional• os.clock• os.date• os.execute

Manual Wiki Lua-Users Lista de Discussão IRC

http://www.corba.hpg.com.br/home2.html

http://www.das.ufsc.br/~montez/corba/corba.html

http://java.sun.com/j2se/1.4.2/docs/guide/idl/orbd.html

top related