[Resolvido] Apostila de Corba
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
Discussão (0)
Carregando comentários...