Projeto e Implementação de Middleware

Slides:



Advertisements
Apresentações semelhantes
I/O Carlos Bazilio Depto de Ciência e Tecnologia
Advertisements

Sistemas distribuídos
Comunicação entre processos distribuídos
RMI-IIOP.
CORBA Um Padrão Industrial para Objetos Distribuídos
Linguagens de Programação Orientadas a Objetos
Repositório de Interfaces em CORBA
Comunicação Distribuída
Programação Básica em Java
Sistemas Distribuídos CORBA
Invocação de Métodos Remotos RMI
1 Comunicação Inter-Processos -> RMI -> RPC -> TCP -> UDP (Abstração de passagem de mensagem)
1 Arquitetura CORBA Repositório de Implementação Repositório de Interface cliente programa cliente proxy ORB Core ou invocação dinâmica servidor ORB Core.
Comunicação Entre Objetos Distribuídos
Comunicação Inter-Processos
Objetos Distribuídos Padrão CORBA
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
PROGRAMAÇÃO DISTRIBUÍDA EM JAVA Verão/2001
Estrutura de Dados em Java
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Objetos Distribuídos para WEB Prof. Paulo Fernando da Silva FURB – Universidade Regional de Blumenau Pós-Graduação em Desenvolvimento WEB.
CRIANDO OBJETOS EM JAVA
Middleware e Sistemas Distribuídos
Concorrência em Java Threads em Java.
Funções Declaração function nomedafunção (arg_1, arg_2,..., arg_n) corpoDaFunção end.
Curso básico de PHP 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
JAVA Linguagem Ambiente de Desenvolvimento
Arquitetura CORBA e Objetos Distribuídos
CORBA e Desenvolvimento Baseado em Componentes
Chamada Remota de Procedimentos
Linguagem de Programação JAVA
Marcela Bezerra da Silva Cin - UFPE
Desenvolvimento de Aplicações CORBA
Sistemas Distribuídos Carlos A. G. Ferraz DI/UFPE Aula 07.
Remote Method Invocation RMI
Concorrência e Java RMI
1 Mobilidade de Código com μcode Projeto Giga Alexandre Lages
T. D. S. I. PARA WEB Prof. Emmanuel Nolêto. Java RMI.
Tecgraf PUC-Rio maio de 2011 Principais conceitos de CORBA.
TMV Gestão de Redes e de Sistemas Distribuídos ???? Sumário  Arquitectura de Gestão SNMP  Arquitectura de Gestão OSI/TMN  Novas Arquitecturas.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
CORBA Apresentação do Padrão CORBA Maurício Maron Mendes Ramiro Pereira de Magalhães
Integrações de Aplicações Empresariais Prof. Paulo Fernando da Silva UNC – Universidade do Contestado Pós-Graduação em Sistemas de Informação Aplicados.
COMUNICAÇÃO.
Java RMI João Gabriel (jggxm).
RPC and Web Service André Pereira.
Java Kickstart, day 2 Semelhanças com linguagem C.
T. D. S. I. PARA WEB Prof. Emmanuel Nolêto
Objetos Distribuídos para WEB Prof. Paulo Fernando da Silva FURB – Universidade Regional de Blumenau Pós-Graduação em Desenvolvimento WEB.
Caio Neves Leila Soriano
JAVA Sintaxe.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
RMI (Remote Method Invocation) Bruno Edson Plínio Tadeu
RMI Objetos Distribuídos Luiz C. D´oleron SCJP
Java Conexão com Baco de dados Saulo Bazzi Oberderfer Fonte:
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Socket em Java.
Java – Remote Method Invocation (RMI)
JR: Flexible Distributed Programming in an Extended Java Elmário Gomes Dutra Jr. Gustavo Romano.
Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba)
Flávia Rainone - 1 Computação Paralela com CORBA.
Versão 1 - julho/2013 Tecgraf PUC-Rio Novembro de 2013 Principais conceitos de CORBA.
RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.
Sistemas Distribuídos Prof. Marcus Rodrigues
Aula Prática de Corba ® Aula de Monitoria: Bruno Pereira - bpe Davi Pires - dpr Guilherme Barros – gbs2 Thiago Cavalcanti - trc.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Transcrição da apresentação:

Projeto e Implementação de Middleware Aquiles Burlamaqui Luiz Eduardo

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

CORBA Motivação: Socket RPC RMI 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

CORBA 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

CORBA 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.

CORBA 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).

Visão geral 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

Visão geral

CORBA 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

CORBA Chamada através de um ORB

Arquitetura 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

CORBA Estrutura de um ORB

Arquitetura Semântica de invocação Objeto CORBA: objeto remoto 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

Arquitetura Request Reply client server proxy or dynamic invocation implementation repository object adapter ORB skeleton or dynamic skeleton program interface Request Reply core for A Servant A

Arquitetura 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

Arquitetura Skeleton (servidor) Stubs/proxies (cliente) 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)

Arquitetura 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

Arquitetura 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

Arquitetura 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

CORBA Passo para uma Inovação Dinâmica Identificar o objeto que queremos invocar (provavelmente através do Trader Service do CORBAservices);  Recuperar sua interface (buscá-la no Repositório de Interfaces);  Construir a invocação; Invocar a requisição, e receber os resultados. 

Arquitetura 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

Arquitetura

CORBA IDL 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

Exemplo - CORBA IDL Cliente e Servidor module HelloApp { interface Hello string sayHello(); oneway void shutdown(); };

Exemplo - objeto CORBA - Servidor - 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);

Exemplo - servidor public class HelloServer { public static void main(String args[]) { try{ // Criação e inicialização do ORB ORB orb = ORB.init(args, null); // obtém a referência do rootpoa e ativa o POAManager POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); rootpoa.the_POAManager().activate(); // cria o servant e registra com o ORB HelloImpl helloImpl = new HelloImpl(); helloImpl.setORB(orb); // obtém referência do objeto servant org.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 objeto String name = "Hello"; NameComponent path[] = ncRef.to_name( name ); ncRef.rebind(path, href); System.out.println("HelloServer ready and waiting ..."); // Aguarda a invocação de clientes orb.run(); } catch (Exception e) { System.err.println("ERROR: " + e); e.printStackTrace(System.out); }System.out.println("HelloServer Exiting ...");}}

Exemplo - cliente public class HelloClient { static Hello helloImpl; public static void main(String args[]) { try{ // Cria e inicializa o ORB ORB 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); }

Compilar/Executar idlj -fall -Hello.idl Javac *.java } idlj -fall -Hello.idl Javac *.java orbd -ORBInitialPort 1050 -ORBInitialHost localhost & java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost& java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhost

Problemas do CORBA Transparência de localização Tratamento igual para Função local Deficiências de projeto e processo Problemas com implementações Firewalls

Exercício 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

O que é Lua? 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

Como Lua é? Sintaxe convencional print(“hello world”)

Comentários Comentários de 1 linha -- (dois traços) Comentários de blocos --[[ bloco ]]

Variáveis Varáveis globais não precisam de declaração Variáveis locais são declaradas com a palavra chave local

Tipos 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

Operadores Aritméticos Relacionais Operadores lógicos Concatenação +, -, *, /, ^ Relacionais <, >, <=, >=, ==, ~= Operadores lógicos and, or, not Avaliação por curto-circuito Concatenação ..

Atribuição a = 0 a, b, c = 0, 0, 0 a, b = b, a -- troca de valores a, b, c = 0, 0 -- c recebe nil

Tabelas 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

Estruturas de Controle 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

Funções Retorno foo() x = foo() x, y = foo() {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

Bibliotecas Basic String Table Math IO OS

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

String Funções para manipulação de strings

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

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

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

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

Mais Informações Manual Wiki Lua-Users Lista de Discussão IRC

Referencias 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