Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MIC_DUARTE

[Resolvido] Apostila de Corba

Recommended Posts

CORBA (Common Object Request Broker Architecture)

 

O que é CORBA?

Uma tecnologia que provê uma infraestrutura para integrar componentes de aplicações em um sistema distribuído

não é um sistema ou produto, mas um padrão

Esconde a complexidade de uma rede heterogênea atrás de uma interface orientada a objetos

Estabelecido pelo OMG, Object Management Group, http://www.omg.com

Fundado em 1989 por 11 empresas 3COM, HP, Sun, ...

Possui mais de 800 membros, composto por usuários finais e vendedores

É independente de plataforma e sistema operacional

Interoperabilidade entre linguagens de programação, sistemas operacionais, desenvolvedores de software e redes de computadores

 

 

Objetos encapsulam dados manipulados por operações;

Os dados são visíveis e acessíveis apenas através dos métodos (operações)

 

Modelo de Objetos

Todos os métodos estão contidos em uma classe

O modelo suporta encapsulamento, herança e polimorfismo

 

Métodos consistem de

implementação

parte invisível do método

assinatura

parte visível do método

conjunto de assinaturas em um objeto = interface

 

Um objeto é identificado exclusivamente por sua assinatura

objetos com a mesma interface fazem parte de uma classe

dois objetos com interfaces diferentes pertencem a classes diferentes

 

A interface de um objeto é um contrato de serviços oferecido (comportamento)

Quem provê o contrato é chamado de servidor

Quem solicita os serviços oferecidos em um contrato é chamado de cliente

 

Provê uma infraestrutura para a computação de objetos distribuídos

 

Como interagir com um objeto?

É necessário uma descrição da Interface

Interface padrão

DII, ORB Interface, DSI

Definição da interface

IDL Stub e IDL Skel

É necessário um mecanismo de comunicação

Protocolos padrão

GIOP, IIOP, ESIOPS

 

Interface Definition Language

Linguagem utilizada para especificar interaces contendo métodos e atributos

Oferece suporte a herança de interface (simples e múltipla)

Projetada para mapear entre várias linguagens de programação

C, C++, Smalltalk, Ada, Java, etc.

 

Independência de linguagem é possível via a construção de interfaces para objetos usando IDL

IDL é uma linguagem declarativa parecida com C++

É necessário uma “ponte” entre IDL e a linguagem de programação

 

 

Lampada.idl :

interface Lampada

{ void setSwitch(in boolean B);

boolean getSwitch();

};

(in boolean B) -> parâmetro de entrada

 

 

Recursos da IDL

modules e interfaces

operações e atributos

herança simples e múltipla

tipos primitivos (double, long, char, etc.)

exceptions

consts

 

Compilando a Interface

Pré-compilador

idltojava Lampada.idl

Algumas vezes o pré-compilador depende do C++ para alguns tipos de operações. Nestes casos:

idltojava -fno-cpp Lampada.idl

São gerados vários arquivos .java (interface, Stub, Skel, etc.)

 

Ligando Cliente a Objeto Remoto

Um cliente CORBA obtém uma referência do objeto que está no servidor

pode usar um servidor de nomes

A referência local funciona como uma ponte para o objeto remoto

CORBA ORB irá converter as referências ao objeto em uma forma que possa ser transmitida pela rede

 

 

Exemplo (Cliente)

import org.omg.CORBA.*;

import org.omg.CosNaming.*;

public class LampCliente

{ public static void main(String[] args) throws Exception

{ ORB orb = ORB.init(args, null);

NamingContext root = NamingContextHelper.narrow(

orb.resolve_initial_reference("NomeDoServico");

NameComponent[] path = {

new NameComponent("Lampada","")};

Lampada lampR =

LampadaHelper.narrow(root.resolve(path));

lampR.setSwitch(true);

}

}

 

 

Exemplo (Lampada)

public class LampadaImpl extends _LampadaImplBase

{ private boolean acesa = false;

public void setSwitch(boolean B)

{ acesa = b; }

public boolean getSwitch()

{ return acesa; }

}

 

 

Exemplo (Servidor)

import org.omg.CORBA.*;

import org.omg.CosNaming.*;

public class LampServidor

{ public static void main(String[] args)

{ ORB orb = ORB.init(args, null);

Lampada lamp = new LampadaImpl();

orb.connect(lamp);

NamingContext root = NamingContextHelper.narrow(

orb.resolve_initial_references("NomeDoServico"));

NameComponent[] path = {

new NameComponent("Lampada","") };

root.rebind(path, lamp);

// Thread.currentThread().join();

}

}

 

 

Teste

> start tnameserv

> start java LampServidor Lampada

> java LampCliente Lampada

Lampada->Nome do objeto remoto

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.