sistemas distribuídos aula 07 – programação distribuída (corba) prof. hélio de sousa lima...

26
Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho ( [email protected] )

Upload: terezinha-caiado-vilanova

Post on 07-Apr-2016

217 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Sistemas DistribuídosAula 07 – Programação Distribuída

(Corba)Prof. Hélio de Sousa Lima Filho (

[email protected])

Page 2: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Referencial Bibliográfico

• Coulouris, George; Dollimore, Jean e Kindberg, Tim. Sistemas Distribuídos: conceitos e projeto.

• Ribeiro, Uirá. Sistemas Distribuídos, Desenvolvendo aplicações de Alta Performance no Linux.

2Sistemas Distribuídos

Page 3: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Problema

• Necessidade de compartilhamento de informações entre empresas e integração de hardware e software de plataformas diversas de forma a resolver problemas presentes e futuros

3Sistemas Distribuídos

Page 4: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Características

A arquitetura CORBA permite:– Acesso a recursos computacionais e

informações distribuídas a partir de linguagens populares

– Tornar dados e aplicações legadas disponíveis como recursos de rede

– Atualizar sistemas baseados em rede de forma a refletir novas topologias ou recursos

4Sistemas Distribuídos

Page 5: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Características

• CORBA oferece um mecanismo padrão para a definição de interfaces entre componentes e ferramentas para facilitar a implementação destas interfaces nas linguagens escolhidas pelos desenvolvedores

5Sistemas Distribuídos

Page 6: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Características

• Independência de Linguagem– objetos e clientes CORBA podem ser

implementados em qualquer linguagem de programação

– objetos CORBA não precisam saber como foram implementados os objetos com os quais se comunicam

6Sistemas Distribuídos

Page 7: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Caracteristicas

• Independência de Plataforma– Objetos CORBA podem ser usados em

qualquer plataforma para a qual exista a implementação de um CORBA ORB (Object Request Broker), ou seja, praticamente qualquer sistema computacional existente

7Sistemas Distribuídos

Page 8: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Arquitetura Corba

8Sistemas Distribuídos

Interface e repositórios de

implementações

Aplicação Cliente CORBA

IDL stub

Implementação do Objeto

IDL stub

Page 9: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Arquitetura Corba

• Common Object Request Broker Architecture (CORBA).

• Trata-se de um padrão proposto pela Object Manager Group (OMG), uma organização internacional da indústria de software que estabeleceu uma estrutura comum para o gerenciamento de objetos distribuídos, conhecida como Object Manager Architecture (OMA)

9Sistemas Distribuídos

Page 10: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Arquitetura CorbaPrincipais Componentes

• Object Request Broker (ORB)– Conceito central da arquitetura OMA , o Núcleo do CORBA – “Barramento lógico de software” que controla toda a comunicação entre os

componentes da arquitetura– Facilitador da comunicação entre objetos distribuídos– Objetivo:

• Transparência de localização• Transparência de acesso• Independência de sistema operacional e linguagem

• Serviços CORBA – definem serviços que ajudam a gerenciar e a manter objetos.– Exemplo: serviço de nomes, eventos, ciclo de vida, tempo, persistência, etc.

• Facilidades CORBA– definem facilidades e interfaces no nível de aplicação, manipulação de dados e

armazenamento.• Objetos de aplicação

– são os objetos que podem ser considerados visíveis ao nível de aplicação.

10Sistemas Distribuídos

Page 11: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Arquitetura CorbaIDL

• É uma Linguagem de Definição de Interface (IDL) que permite a definição para cada sistema de rede.

• Essas interfaces descrevem os serviços que são oferecidos.

• Trata-se de uma linguagem puramente declarativa, que ao ser compilada irá gerar o stubs e o skeletons (responsável pela comunicação entre objetos)

• Idéia: – especificar interface em uma linguagem neutra

11Sistemas Distribuídos

Page 12: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Arquitetura CorbaComponentes do Lado Cliente

• Stubs Clientes– trata-se de uma interface estática gerada através da

compilação de uma IDL. – Compõe uma mensagem que contém uma

identificação e protótipos dos métodos invocados a um servidor.

• Interface de Invocação Dinâmica (DII)– permite que o cliente invoque um método no servidor

sem que tenha conhecimento, em tempo de compilação, de sua interface.

• Repositório de Interfaces– contém uma base de dados com a definição de todas

as interfaces de serviços conhecidos pelo ORB

12Sistemas Distribuídos

Page 13: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Arquitetura CorbaComponentes do Lado Servidor

• Skeletons– interface estática para os serviços (métodos) remotos. – É responsável por receber as requisições do cliente e repassá-las para o servidor.

• Interface de Skeletons Dinâmica (DSI) – é semelhante ao DII, porém ocorre no lado do servidor. – Fornece um mecanismo que permite, em tempo de execução, que servidores

entreguem requisições de um ORB para uma implementação de objeto sem que tenha conhecimento, em tempo de compilação, de sua interface;

• Repositório de Implementação• é um repositório, em tempo de execução, para as classes que um servidor

suporta, os objetos instanciados e suas identificações;• Adaptador de Objetos (OA)

– responsável por: registrar as classes servidoras no repositório de implementação; instanciar os objetos chamados em tempo de execução, de acordo com a demanda dos clientes; receber as chamadas para os objetos e repassá-las aos mesmos; gerar e gerenciar as referências de objetos (ORB).

• Interface ORB – permite o acesso às funcionalidades não oferecidas pelas demais interfaces, pois

não depende da interface do objeto ou do adaptador do objeto.

13Sistemas Distribuídos

Page 14: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Vantagens

Método de Integração de Aplicação Vantagens d CORBARPC (Orientado a Procedures) Orientação a Objetos (métodos)

DBMS Orientado a Objetos Flexibilidade para aplicações não DBMS

Microsoft COM/DCOM Suporta ambas plataformas PC e não-PC, Windows e não windows

Enterprise JavaBeans Independente de linguagem

RMI Trabalha em máquinas sem JVM

14Sistemas Distribuídos

Page 15: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Aplicações CORBA: Visão Geral

15Sistemas Distribuídos

F onte ID L

Com piladorID L-J ava

Com piladorID L-C++

s tub .javac lien te.java s erv idor .c pps kel.c pp

Cliente S erv idorO RB ARun-tim e

O RB BRun-tim eIIO P

Clien te S erv idor

Page 16: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Exemplo

• Exemplo no site do JavaWorld, disponível em: http://www.javaworld.com/javaworld/jw-08-2002/jw-0830-corba-p2.html

16Sistemas Distribuídos

Page 17: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Passos para criação de aplicação CORBA

1. Definir os métodos utilizando o IDL2. Compilar o IDL usando um compilador, ou

seja, criando o construtor de programas com linguagem específica, padrão de interfaces.

3. Implementar a aplicação servidora, o qual consiste da implementação do método e iniciação do processo na máquina e registrá-lo no ORB em run-time.

4. Criar a aplicação cliente para usar o servidor.

17Sistemas Distribuídos

Page 18: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

1º Passo: Definição dos métodos usando IDL

• Aqui está o IDL para a definição da interface do servidor Hello World:module hello{

interface Hello{string sayHello();oneway void shutdown();

};};

18Sistemas Distribuídos

Page 19: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

2º Passo: Compilação do IDL utilizando o idlj compiler

• Nesse ponto o comando compila o IDL acima para criar uma Interface Java e classes abstratas:

• idlj -fall Hello.idl• idlj está localizado no diretório bin de

instalação do Java Esse compilador implementa o mapeamento de especificações de CORBA IDL para Java.

19Sistemas Distribuídos

Page 20: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

2º Passo: Compilação do IDL utilizando o idlj compiler

• Ele produz como saída, alguns arquivos Java:– HelloPOA.java:

• A class abstrata que o nosso servidor de objetos irá estender.– HelloHelper.java:

• Fornece funcionalidades auxiliares, notavelmente o método narrow() requer a difusão da referência do objeto CORBA para seus próprios tipos.

– HelloHolder.java: • Usado sempre que a interface do Hello (tipo) é um parâmetro de saída

ou de entrada/saída do método definido na IDL.– _HelloStub.java:

• O stub cliente, fornecido pela funcionalidade CORBA para o cliente.– Hello.java and HelloOperations.java:

• Juntos fornecem interfaces que contém a versão Java da nossa interface IDL.

20Sistemas Distribuídos

Page 21: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

3º Passo: Implementar a aplicação servidora

• a implementação da aplicação servidora consiste de duas partes: – uma classe que implementa os métodos da

interface servidora– outra classe que hospeda o objeto servidor e

o registra no ORB em tempo de execução e nomeando o serviço.

21Sistemas Distribuídos

Page 22: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

3º Passo: Implementar a aplicação servidora

package hello;import org.omg.CosNaming.*;import

org.omg.CosNaming.NamingContextPackage.*;

import org.omg.CORBA.*;import

org.omg.PortableServer.*;import

org.omg.PortableServer.POA;

import java.util.Properties;

class HelloImpl extends HelloPOA {private ORB orb;public void setORB(ORB orb_val) {

orb = orb_val;}// Implement sayHello() methodpublic String sayHello() {

return "\nHello world !!\n";}// Implement shutdown() methodpublic void shutdown() {

orb.shutdown(false);}

}

22Sistemas Distribuídos

Page 23: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

3º Passo: Implementar a aplicação servidora

public class HelloServer {public static void main(String args[]) {

try{// Create and initialize the ORBORB orb = ORB.init(args, System.getProperties());// Get reference to rootpoaPOA rootPOA = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));// Create servant and register it with the ORBHelloImpl helloImpl = new HelloImpl();helloImpl.setORB(orb);// Get object reference from the servantorg.omg.CORBA.Object ref = rootPOA.servant_to_reference(helloImpl);Hello href = HelloHelper.narrow(ref);// Get the root naming contextorg.omg.CORBA.Object objRef =orb.resolve_initial_references("NameService");

23Sistemas Distribuídos

Page 24: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

3º Passo: Implementar a aplicação servidora

// Use NamingContextExt, which is part of the Interoperable// Naming Service (INS) specificationNamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);// Bind the Object reference in NamingString name = "Hello";NameComponent path[] = ncRef.to_name( name );ncRef.rebind(path, href);// Activate the POAManagerrootPOA.the_POAManager().activate();System.out.println("HelloServer ready and waiting ...");System.out.println(orb.object_to_string(href));// Wait for invocations from clientsorb.run();

}catch (Exception e) {

System.err.println("ERROR: " + e);e.printStackTrace(System.out);

}System.out.println("HelloServer Exiting ...");

}}

24Sistemas Distribuídos

Page 25: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

4º Passo: Criar a aplicação cliente para usar o servidor

package hello;import org.omg.CosNaming.*;import org.omg.CosNaming.NamingContextPackage.*;import org.omg.CORBA.*;import java.util.*;public class HelloClient{

static Hello helloImpl;public static void main(String args[]){

try{// Create and initialize the ORB.ORB orb = ORB.init(args, System.getProperties());// Get the root naming context.org.omg.CORBA.Object objRef =orb.resolve_initial_references("NameService");// Use NamingContextExt instead of NamingContext. This is// part of the Interoperable Naming Service.NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);// Resolve the Object reference in Naming.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) {e.printStackTrace();

}}

}

25Sistemas Distribuídos

Page 26: Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba) Prof. Hélio de Sousa Lima Filho (helio.filho@gmail.com)helio.filho@gmail.com

Compilar e Testar

• Compilar os códigos fontes: servidor e cliente.

• Iniciar o serviço nomeado como segue:– orbd -ORBInitialPort 1050 -ORBInitialHost

localhost• Agora rodar o servidor:

– java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost

• Então rodar o cliente:– java HelloClient -ORBInitialPort 1050 -

ORBInitialHost localhost

26Sistemas Distribuídos