Professional Documents
Culture Documents
Introdução aos
Eleri Cardozo
Sistemas Distribuídos
FEEC/UNICAMP
http://www.fee.unicamp.br/~eleri
Julho de 2002
MIPS Mbits/s
100000
20 BIPS
10000 10000 10 Gbits/s
1000 1000
DEC Alpha ATM
Gigabit Ethernet
HP PA
100 100 T. Ring Fast Ethernet
Pentium FDDI
10 Mips 10 Ethernet
486
ISDN Frame Relay
386 X.25
1 286 1
1982 1987 1992 1997 2002 2007 1982 1987 1992 1997 2002 2007
(c) FEEC/UNICAMP 5 (c) FEEC/UNICAMP 6
Downsizing Downsizing: Benefícios
CORBA CORBA
Objetos de
Facilities Facilities
Uma implementação de referência provê código Aplicação (vertical) (horizontal)
fonte aberto (não necessariamente gratuito) para
os componentes de uma arquitetura que são Object Request Broker (ORB)
fundamentais para a interoperabilidade entre
diferentes implementações desta arquitetura. O modelo de Serviços CORBA
Exemplos: FreeDCE, TMN API, HTTPd. referência OMA. (CORBAservices)
Implementações de referência garantem o maior CORBA especifica o Object Request Broker do modelo OMA.
nível possível de interoperabilidade para implemen- Interoperabilidade entre implementações CORBA é garantida
tações de sistemas abertos. pela linguagem IDL e pelo protocolo IIOP.
• IDL e IIOP garantem que duas implementações Sistemas abertos são fundamentais para:
CORBA sempre irão interoperar no tocante a
invocação remota de métodos. • tornar as implementações menos dependentes
de fornecedor individual;
• Serviços CORBA (CORBAservices) nem sempre
• incentivar a competição entre diferentes
interoperam pois apenas suas interfaces são
especificadas (faltam implementações de referência fornecedores por melhores produtos;
e/ou melhor especificação de comportamento). • desenvolver aplicações portáveis, confiáveis,
com alto grau de interoperabilidade e capazes
• Gerência, configuração e recursos avançados de de evoluir de forma ordenada;
diferentes implementações CORBA não interoperam.
• incentivar a inserção de novas tecnologias.
OPA! Isto eu
conheço!!!
O Conceito de
Middleware APLICAÇÃO
APRESENTAÇÃO
SESSÃO
TRANSPORTE
REDE
ENLACE
FÍSICO
Medicina
Telecomunicações
Finanças
Agente
Cliente Agente
} Gerenciamento de Rede
APLICAÇÃO
Ex: funções típicas de
telecomunicações } Domínio de aplicação
APLICAÇÃO
APRESENTAÇÃO
APRESENTAÇÃO
SESSÃO
SESSÃO
TRANSPORTE Um novo Modelo OSI: camada nível 8
TRANSPORTE contendo funções típicas dos vários
REDE domínios de aplicação:Medicina,
REDE Finanças, Telecomunicações, etc.
ENLACE
ENLACE
FÍSICO
FÍSICO
(c) FEEC/UNICAMP 21 (c) FEEC/UNICAMP 22
Domínio da aplicação
agentes
APLICAÇÃO componentes
APRESENTAÇÃO objetos
Necessidade de distribuídos
chamada de
SESSÃO Padronização do procedimento
Middleware remoto (RPC)
troca de
mensagens
}
Sistema
Operacional Sistemas Heterogêneos!
+
Hardware 1977 1982 1987 1992 1997 2002 2007
(c) FEEC/UNICAMP 25 (c) FEEC/UNICAMP 26
Aplicação Aplicação
tarefa 1 tarefa 2
Send Receive
API independente do send(M1)
TLI CPC-I Socket Named Pipes transporte send(M1)
bloqueio
send(M2)
NDIS ODI Drivers de Rede
Aplicação Aplicação
sistema de sistema de
transporte transporte NDIS ODI
(TCP/IP) (TCP/IP)
LAN / WAN
Token-ring Ethernet
ISDN
(c) FEEC/UNICAMP 29 (c) FEEC/UNICAMP 30
RPC: Semântica RPC: Implementação
a2 a1 P2
API API
(socket) (socket)
resultado
Interface Padrão
(c) FEEC/UNICAMP 33 (c) FEEC/UNICAMP 34
• toda a interação com um objeto se dá através da invocação de Classificação: objetos são organizados em classes. Uma
seus métodos declarados como públicos; classe define o comportamento dos objetos dela derivados.
• métodos declarados como privados só podem ser invocados Relacionamento: classes podem apresentar relações de
pelos demais métodos definidos pelo objeto; interdependência, por exemplo
• herança (relação tipo é-um /é-uma);
• as variáveis de estado são manipuladas apenas pelos métodos • composição (relação tipo parte-de);
(públicos ou privados) definidos pelo objeto (isto é, são invisíveis • colaboração (relações tipo usa, delega, autoriza, etc).
externamente ao objeto).
classe classe
Instanciação: objetos são criados através de uma operação relação
(denominada de instanciação) sobre uma classe.
Deve-se notar que as tecnologias de middleware procuram Objetos distribuídos apresentam as seguintes vantagens
acompanhar as tecnologias de desenvolvimento de software: sobre troca de mensagens e RPC:
• troca de mensagens: estende o paradigma de programação • flexibilidade: qualquer entidade de software pode ser
não estruturada à programação de sistemas distribuídos transformada em um objeto distribuído;
(programação distribuída); • granularidade: objetos distribuídos podem apresentar
diferentes níveis de granularidade;
• RPC: estende o paradigma de programação estruturada à • confiabilidade: objetos distribuídos são entidades auto-
programação distribuída; contidas o que facilita a identificação, isolação e correção
de falhas;
• objetos distribuídos: estende o paradigma de programação • custo: o desenvolvimento de objetos distribuídos é mais
orientada a objetos à programação distribuída. econômico graças ao reuso de software propiciado pela
programação orientada a objetos.
Objetos distribuídos são capazes de interagir através de uma rede Objetos distribuídos devem definir pelo menos uma interface
de comunicação (LAN, Intranet, Internet) de forma semelhante à remota capaz de processar invocações através da rede. Em
interação entre objetos locais. Para tanto, padrões são necessários padrões neutros (independentes de linguagem de programação)
para prover: como CORBA e DCOM, uma linguagem de definição de interface
• definição de interfaces remotas; (IDL) é especificada. ORBs provêem compiladores IDL para cada
• identificação de objetos (referências); linguagem alvo.
• "nomeação" de objetos (naming);
• associação nome-referência (binding); RMI, por ser uma solução puramente Java, utiliza interfaces Java
• suporte à invocação remota de métodos (RPC). derivadas da interface Remote para definir interfaces remotas.
Estes padrões são oferecidos por uma infra-estrutura denominada Um servant (ou implementação) é um objeto que implementa
ORB (Object Request Broker). Por exemplo, RMI é o ORB nativo uma interface remota (i.e., supre código para os métodos da
da linguagem Java. interface). Um objeto distribuído é constituído por um ou mais
servants.
(c) FEEC/UNICAMP 41 (c) FEEC/UNICAMP 42
Referência de Objetos
Objetos Distribuídos: Implementação
Descrição da(s) ORB (biblioteca) Objetos distribuídos devem possuir uma identificação
Interface(s) (referência) capaz de localizá-lo na rede. Esta identificação
é dependente do ORB. Por exemplo, CORBA utiliza um
identificador denominado IOR (Interoperable Object
Compilador
Compilador de
Reference) que agrega o endereço de rede do objeto (host e
(C++, Java, ...)
Interfaces port do servidor), sua classe, seu identificador no servidor,
etc. IOR é armazenado em uma cadeia de bytes.
M1 M1 objeto
M2 upcall M2 distribuído
invocação local M3 protocolo M3
de RPC
ORBs provêem serviços de nomes para armazenar e recuperar A invocação de métodos remotos exige protocolos de RPC
associações nome-referência de objeto. No caso do RMI, um (Remote Procedure Call). Tais protocolos especificam:
servidor de nomes denominado rmiregistry é fornecido com a • como parâmetros são codificados (número de parâmetros,
plataforma Java. tipos, valores e indireções);
• como invocações e retornos são estruturados;
servidor • que protocolo de transporte é utilizado (TCP ou UDP);
de nomes 1. bind/rebind • como exceções são propagadas de volta para o cliente.
2. lookup
DCOM EJB
servidor Indústria (Microsoft) (Sun)
RMI .NET
cliente objeto (SUN) (Microsoft)
servant
distribuído
DCE CORBA SOAP
Consórcios (OSF) (OMG) (W3C)
Serviços Nomes Eventos Segurança 1977 1982 1987 1992 1997 2002
Plataforma Java 2
Linguagem Java
Máquina Virtual
APIs
Servidor EJB
OMG COSNaming
JNDI SPI
JNDI API
Container EJB RMI Registry
EJB Home
Interface EJB Bean JNDI Naming
Cliente Manager
Cliente
EJB Remote Internet LDAP
Interface
Database
Novell NDS
JDBC
Driver C Database C Resource
Datastores Manager(s)
• Outras Tecnologias: Java Media Framework (JMF): API para manipulação (local e
através da rede) de áudio e vídeo;
Java Server Pages (JPS) e Servlets: APIs que permitem estender Java TV API: API para serviços interativos em TV digital (ex:
as funcionalidades de um servidor WWW; vídeo sob demanda);
Java Phone API: API para serviços de telefonia (ex: click-to-dial);
Java Message Service (JMS): API para serviços de mensagens; Java Commerce Toolkit: pacote para desenvolvimento de
aplicações de comércio eletrönico;
JavaMail: API para serviços de E-mail; Java Cryptography Extension e Java Authentication and
Authorization Service: extensões de segurança;
J2EE Connector: arquitetura para conectar a plataforma Java 2 Java 2D, Java 3D, Java Advanced Imaging: APIs para
com outros serviços de informação da empresa.
computação gráfica;
Jini: serviços de suporte à redes com topologia variável;
.......... Dentre muitos outros !!!
(c) FEEC/UNICAMP 61 (c) FEEC/UNICAMP 62
Naming.lookup host
RMI é um ORB nativo da linguagem Java que provê uma rmi://host:port/Name rmiregistry
infra-estrutura para invocação de métodos remotos, um
compilador para geração de stubs e skeletons (rmic) e um Naming.bind
cliente RMI ObjRef rmi://host:port/Name
servidor de nomes (rmiregistry). RMI utiliza o mecanismo de
ObjRef
segurança nativo da linguagem Java através de security Naming
managers e class loaders. s.M1(...) servidor RMI
Naming
RMI tem como vantagens simplicidade e plena integração rmic Servant
com Java (segurança, carregamento dinâmico de classes, M1 M2 M3
M1 M2 M3
Java RMI
RMI: Interfaces Remotas
import java.rmi.*;
Parâmetros e retornos em invocações remotas são sempre import java.rmi.server.*;
passados por valor (isto e, uma cópia é passada). Objetos
Java passado como parâmetros devem ser "serializáveis" public class AccountServant implements Account
(todos os tipos nativos são). {
long balance;
Referências de objetos remotos podem ser passados como long limit;
parâmetros ou retorno (no caso, uma cópia de seu stub é
passada). Tais objetos devem possuir apenas interfaces public AccountServant(long lim) throws RemoteException {
remotas. super();
balance = 0;
Caso a classe de um objeto passado ou retornado não se limit = lim;
encontra presente na JVM, a mesma pode ser carregada }
dinamicamente via HTTP (detalhes a seguir).
(c) FEEC/UNICAMP 67 (c) FEEC/UNICAMP 68
import java.rmi.*;
import java.net.*;
try {
String host = (InetAddress.getLocalHost()).getCanonicalHostName(); public class AccountClient {
String name = "rmi://" + host + "/Account"; public static void main(String args[]) {
Account objRef = new AccountServant((long)1000); if(args.length != 1) {
Naming.rebind(name, objRef); // bind System.out.println("I need the server's host name as argument");
System.out.println("AccountServant registered"); System.exit(0);}
} catch (Exception e) { // if no security manager was set, set the RMI´s one
System.err.println("AccountServant exception: " + if (System.getSecurityManager() == null) {
e.getMessage()); System.setSecurityManager(new RMISecurityManager());}
e.printStackTrace(); try { // get reference of the remote object
} String host =
} (InetAddress.getByName(args[0])).getCanonicalHostName();
String name = "rmi://" + host + "/Account";
Account accountRef = (Account) Naming.lookup(name);
(c) FEEC/UNICAMP 75 (c) FEEC/UNICAMP 76
Empresa
Padrão OSI/ITU-T para processamento distribuído aberto
(ITU-T X.901,902,903,904).
Informação SD Computação
SD
implementação
ponto de vista
ORB
Tecnologia
Engenharia
O ponto de vista de computação modela o sistema No ODP, objetos computacionais básicos (BCO: basic
computacional object) possuem múltiplas interfaces
em termos de entidades de processamento de computacionais, cada uma associada a determinado tipo.
informação. Estas entidades, denominadas objetos O tipo define as características da interface.
computacionais, são os blocos fundamentais a
partir dos quais o sistema distribuído é contruido.
interface computacional
Este ponto de vista pode ser descrito através de BCO
notação gráfica introduzidas por metodologias de
desenvolvimento orientado a objeto (UML, OMT, …). T2
T1 tipo da interface
operação T T’
terminação
BCO BCO
produtor consumidor
fluxo T’: tipo complementar a T
stream
Na ligação composta dois objetos computacionais O ponto de vista de engenharia fornece a visão
básicos têm suas interfaces conectadas com o auxílio “espacial” (distribuída) do sistema. Nesta visão os
de um artefato específico de interconexão. Na visão de objetos computacionais (BCO e BO) da visão de
computação este artefato é representado por um objeto computação são realizados através de objetos
de ligação (BO: binding object). básicos de engenharia (BEO: Basic Engineering
Object). Regras de estruturação que estabelecem
agrupamentos e ligações entre BEOs.
interface
de controle
Este ponto de vista pode ser descrito através de
diagramas de distribuição (deployment) da notação
BCO BO BCO UML.
T T’ T T’
Binder
Protocol Adapter
Binder é responsável pelo gerenciamento fim-a-
fim do canal. Funções típicas do binder: Protocol Adapter é responsável pela
monitoramento do fluxo de informação através comunicação fim-a-fim no canal. Funções
do canal, gerência de qualidade de serviço e típicas: estabelecimento e encerramento de
destruição de seu extremo do canal. conexões de transporte através da rede.
Possui interfaces de dados para o stub e Apresenta uma interface de dados para o
protocol adapter, além de uma interface de binder e uma interface de controle utilizada
controle utilizadada pelo controlador de canal. pelo controlador de canal.
Controlador de Canal
BCO1 BEO1 BEO2
Controlador de canal apresenta uma interface única
de controle para o canal. Esta interface realiza na
visão de engenharia a interface computacional do stub stub
Tipos de transparência:
Transparência é um conceito chave que permite a
visão de engenharia (associada à implementação • acesso;
do sistema) se aproximar da visão de computação • localização;
(associada ao modelamento do sistema). • migração;
• concorrência (transação);
• relocação;
Transparência deve ser provida pelo núcleo, • falha;
canal e demais infra-estruturas de suporte à • replicação;
implementação (ORBs, repositórios, etc.). • persistência.
HARDWARE
(c) FEEC/UNICAMP 113 (c) FEEC/UNICAMP 114
DCE: Threads DCE: Threads
espaço de en- espaço de endere-
OBJETIVO: uniformizar a programação multithreaded. dereçamento çamento comum
escalonamento
Utiliza o padrão POSIX 1003.4a (IEEE). T
H
T T T
Provê três esquemas de escalonamento de threads: R
H H
H
• FIFO (First In First Out) E
R R R
A
• RR (Round Robin) E E E
D tempo
• Default (RR com prioridades) A A A
D D D
processo
monothreaded processo multithreaded
cliente RR A B C A B C B C B B
req #1
servidor
multi-
DEF. A B C A B C C
threaded
cliente
req #2
Pb > Pa, Pc
contém a definição
Editor arquivo IDL
da interface do serviço runtime lib código do código do runtime lib
(cliente) cliente servidor (servidor)
compilador IDL
Compilador C Compilador C
stub do stub do
cliente cabeçalho código C SERVIDOR
servidor CLIENTE
(c) FEEC/UNICAMP 121 (c) FEEC/UNICAMP 122
fonte de tempo
Objetivo: garantir que os relógios das máquinas
(não requerida)
com DCE instalado:
• são consistentes (marcam o mesmo tempo); time time
• são corretos (seguem a mesma referência). server server
time ?
DTS é necessário para a ordenação de eventos rede
numa aplicação distribuída.
Forma de operação:
Objetivo: manter a localização (host) de servidores.
UTC server #1
O serviço de diretório é estruturado em dois níveis:
UTC server #2 • Nível local (de célula): registra os recursos
locais (CDS: Cell Directory Service)
UTC server #3 • Nível Global: permite acesso a recursos remotos
UTC server #4 (GDS: Global Directory Service)
clientes
fileset replication BOS backup
server server server server
servidores DFS
chamadas locais chamadas DFS
servidores de
segurança,
subsistema de
Episode arquivo local diretório e time
(+ extensões)
(c) FEEC/UNICAMP 135 (c) FEEC/UNICAMP 136
Services
São interfaces (denominadas verticais) para serviços São interfaces para os serviços específicos da
em domínios específicos. Exemplo: aplicação. Estes serviços em geral utilizam os
serviços de objetos, as facilidades comuns ou
• CORBA/TMN and CORBA/SNMP Interworking serviços específicos do domínio.
• CORBA/Intelligent Networks Interworking
• Notification Service Exemplo: uma aplicação de gerência de redes
• Control and Management of A/V Streams pode utilizar o serviço de eventos (serviço de
• Telecom Log Service objetos) e o Telecom Log Service (serviço
• Wireless Access & Control específico do domínio).
Repositório Repositório de
de Interfaces Implementação
ORB (IBM)
Módulo
Compiladores IDL traduzem as interfaces IDL em Definições (tipos complexos, exceções)
construções de uma linguagem alvo (Java, C++,
etc.), bem como geram stubs e skeletons para Interface
clientes e servidores que utilizam e disponibilizam a Atributos
interface. Operações
Uniões:
• contruções capazes de armazenar um tipo IDL dentre um
Strings:
conjunto de tipos declarados.
• armazenam uma sequência de caracteres ASCII com tamanho
máximo especificado (bounded) ou não (unbounded).
Exemplo:
enum formato {formatoString, formatoDigital};
Exemplos:
struct DataStruct {
string<30> cliente; // maximo 30 caracteres
short dia;
string cliente; // tamanho ilimitado
short mes;
short ano;
};
union Data switch (formato) {
case formatoString: string dataString;
case formatoDigital: long dataDigital;
default: DataStruct dataStruct;
(c) FEEC/UNICAMP 163 (c) FEEC/UNICAMP 164
};
Seqüências:
• armazenam uma seqüência de um mesmo tipo IDL
Arrays:
com tamanho máximo especificado (bounded) ou não
• armazenam um mesmo tipo IDL em uma estrutura multi-
(unbounded).
dimensional.
Exemplos:
Exemplos:
sequence<string, 10> nomes; // máximo 10 elementos
DataStruct vencimentos[16];
sequence<string> nomes;
float Z[50][50];
sequence<DataStruct> vencimentos;
Tipo Any:
Typedefs: • permite armazenar um valor pertencente a qualquer tipo
• permitem definir nomes para tipos complexos. IDL (simples ou complexo), inclusive outro tipo any.
Nota: o compilador IDL gera métodos get e set para operação com atributos.
(c) FEEC/UNICAMP 173 (c) FEEC/UNICAMP 174
IDL: Parâmetros de Operações IDL: Retorno de Operações
Ao declarar uma interface em IDL, está-se declarando É comum referenciar uma interface antes da mesma ser definida. IDL
também um novo tipo complexo. Este tipo pode ser utilizado permite postergar a definição de interface declarando-se apenas o
em parâmetros e retornos de operações. Exemplo: seu nome. Exemplo:
Tal como classes holder, cada tipo IDL X possui uma classe
Exemplo:
XHelper associada quando mapeado para Java. Classes helper
// IDL // Java oferecem três funcionalidades (via métodos estáticos):
interface Account { intHolder amt = new IntHolder(); • inserção do tipo em um tipo any:
... amt.value = 10000; void insert(org.omg.CORBA.Any a, X that);
void withdraw(inout long amount); acc.withdraw(amt);
}; System.out.println("Amount: " + • extração do tipo armazenado em um tipo any:
amt.value); X extract(org.omg.CORBA.Any a);
// Java
public interface AccountOperations {
...
• criação de stubs a partir da referência do objeto remoto:
void withdraw(intHolder amount); X narrow(org.omg.CORBA.Object obj);
};
Account.idl
interface Account {
void deposit(
in long long arg0 );
Interface class class void withdraw(
AccountOperations AccountHolder _AccountStub in long long arg0 ) raises (LimitExceeded);
long long balance( );
Interface class class
Account AccountHelper AccountPOA };
package AccountPackage;
CORBA, por ser um padrão neutro, não suporta passagem de
public final class LimitExceeded extends org.omg.CORBA.UserException objetos nas invocações de métodos remotos. Recentemente, o
{
OMG introduziu o padrão denominado "Objeto por Valor"
public String reason = null;
(Object by Value - OBV).
public LimitExceeded ()
{ OBV permite:
super(LimitExceededHelper.id()); • definir um objeto em IDL (estado + métodos);
} // ctor • utilizar este objeto como parâmetro ou retorno de invocações,
passando-o por valor.
public LimitExceeded (String _reason)
{
super(LimitExceededHelper.id());
reason = _reason;
} // ctor
(c) FEEC/UNICAMP 191 (c) FEEC/UNICAMP 192
IDL: OBV IDL: OBV (cont.)
// construtor
factory init(in string n, in string c, in float i);
};
import org.omg.CORBA.*;
// creia fabrica de Empregados (local) import java.util.*;
EmpregadoDefaultFactory fact = new EmpregadoDefaultFactory();
Empregado e = fact.init("Jose", "gerente", (float)43.0); public class RHServant extends RHPOA
implements RHOperations {
rh.adicionaEmpregado(e);
EmpregadoDefaultFactory the_factory = null;
Empregado e1 = rh.obtemEmpregado("Joao"); Hashtable empregados = null;
System.out.println("Empregado obtido: " + e1.nome + float massaSalarial = 0;
" - cargo: " + e1.cargo + " - idade: " + e1.idade);
public RHServant() {
// cria fabrica e hashtable
System.out.println("O salario de " + e1.nome + " e' " +
e1.computaSalario()); // <<< chamada local !! the_factory = new EmpregadoDefaultFactory();
empregados = new Hashtable();
}
IDL: Valutypes - lado servidor (cont.) CORBA: Basic Object Adapter (BOA)
compartilhada não compartilhada por método A tendência é utilizar a instanciação por processo
e servidores multitheaded (para cada evocação
o servidor cria uma thread para processá-la).
M1 M1 M1 M1
M2 O BOA implementa também funções elementares
de segurança (Ex: verificação se um cliente possui
M3 M2 M2 M2 permissão para instanciar um servidor) via atributos
do sistema de arquivos.
cliente servant
POA (Portable Object Adapter) é uma parte importante da value = gridRef.get(x,y) result = get(n, m)
arquitetura CORBA que trata do controle dos objetos que
implementam interfaces remotas (objetos servants). POA result = get(n, m)
vem eliminar muitas das deficiências do BOA (Basic Object
out skeleton in
Adapter), principalmente sua dependência de implemen-
tação. stub
in out
invoke
(implementações)
Object ID código
Políticas
Servants
POA P2 Um POA é sempre criado a partir de um
desenvolvedor Object ID desenvolvedor
Object ID
POA pai (exceto o Root POA) através
do método create_POA invocado no Object ID
POA pai.
Mapa de
POA P3 Objetos Ativos
• time; servant
• persistência; CORBA
diretório de nomes
servidor de nomes (persistente ou transiente)
dentre muitos outros !
(c) FEEC/UNICAMP 221 (c) FEEC/UNICAMP 222
CORBAServices: Ciclo de Vida CORBAServices: Propriedades
O serviço de propriedades proporciona operações que O serviço de propriedades proporciona operações que
permitem criar, destruir, copiar objetos. permitem definir pares atributo-valor (propriedades) e
associa-los a qualquer entidade da aplicação.
find_factories servant
CORBA
create_propertyset
FactoryFinder create_initial_propertyset servant
encontra
create_constrained_propertyset CORBA
GenericFactory define_property
cria
get_property servant
copy delete_property CORBA
servant
move
CORBA ......
remove PropertySet
servidor de propriedades
LifeCycleObject
(c) FEEC/UNICAMP 223 (c) FEEC/UNICAMP 224
Trader, conceito introduzido no modelo ODP, foi padronizado pelo • ORBIX (IONA Technologies Ltd.)
OMG. Trader é um serviço de nomes mais sofisticado que permite • VisiBroker (Borland)
clientes encontrar servidores que melhor atendam suas necessidades.
Cenário típico de utilização do trader é dado abaixo. • ORBacus (Object Oriented Concepts / IONA)
• CORBAplus (Expersoft)
cliente
Trader
servidor • Nouveau (Rogue Wave)
CORBA CORBA
• vários outros ...
4 2 3 1
stubs, skeletons,
compilador IDL server template
No Orbix o Object Request Broker (ORB) consiste de dois
componentes:
parser gerador
IDL de código
árvore de
1. Uma interface de programação (API) que provê funções
arquivo IDL parsing relativas ao ORB para clientes e servidores tais como binding,
DII (cliente); iniciação de servidores, DSI (servidor);
ORBIX daemon
(orbixd) Rep. Orbix ORB possui as seguintes características básicas:
Impl.
instancia servidor • suporte para DII (Dynamic Invocation Interface);
• suporte para BOA e POA (Basic/Portable Object Adapter);
código da aplicação (cliente) código da aplicação (servidor) • suporte para DSI (Dynamic Skeleton Interface).
API API
Orbix ORB provê ainda uma interface para operações de
manipulação de typos (Any, NVList, ...), disponibilização de
código do stub código do skeleton
(gerado pelo ORB ORB (gerado pelo
servidores, busca de serviços disponíveis (nomes, eventos,
compilador IDL) (lib) requisição IIOP (lib) compilador IDL) ...), dentre muitas outras.
VisiBroker possui versões para desenvolvimento em VisiBroker possui as seguintes características básicas:
C++ e Java para as seguintes plataformas:
• repositórios de interface e implementação;
• Microsoft Windows ; • suporte para DII (Dynamic Invocation Interface);
• Sun Solaris; • suporte para BOA e POA (Basic/Portable Object Adapter);
• Linux; • suporte para DSI (Dynamic Skeleton Interface);
• HP-UX; • suporte a multithreading (vários modelos de threading);
• IBM AIX; • suporte a Object-by-Value (OBV);
• Digital/Compaq UNIX; • Filtros (Interceptors).
• Silicon Graphics IRIX;
• IBM OS/390 Mainframe.
A favor do CORBA:
Onde utilizar CORBA ?
• CORBA é orientado a objeto (enquanto DCE é
orientado a procedimento); CORBA é uma arquitetura para sistemas distribuídos,
• OMG IDL permite herança e tipo any, além de mapear tipicamente utilizada em:
para várias linguagens de programação;
• CORBA permite late-binding via DII;
• novos desenvolvimentos;
• CORBA especifica uma vasta gama de serviços • integração de produtos e sistemas “legados”;
(poucos destes disponíveis atualmente !); • hooks e gateways de interoperabilidade.
• CORBA define repositórios de interfaces e implemenação;
• CORBA vem despertando mais interesse que o DCE.
A utilização de CORBA em novos desenvolvimentos se justifica CORBA é uma tecnologia adequada para a integração de
devido a: sistemas “legados” (exemplo: controle de estoques desen-
volvido em COBOL para IBM OS/390 utilizando DB2).
• ampla aceitação por parte da indústria;
• maturidade dos produtos CORBA disponíveis no mercado; Nestes casos, a interação com o sistema legado pode se dar
• neutralidade em termos de plataformas e linguagens de através de um wrapper dividido em duas partes:
programação; 1. parte responsável pela interação com um ORB, por exemplo,
• simplicidade de uso quando comparado a outras tecnologias através de stub gerado por compilador IDL;
(ex: DCOM e DCE); 2. parte responsável pela interação com o sistema legado
• integração natural com tecnologias relacionadas à Internet através de, por exemplo, interfaces de programação (APIs).
(applets, browsers, etc.).
SNMP Gateway
Gerente COM permite a comunicação entre aplicativos executando
IDL - SNMP
CORBA no mesmo processador. Portanto, COM é um mecanismo
Agente
SNMP de comunicação inter-processos (IPC).
IIOP
ORB ORB Comercial DCOM estende COM permitindo a comunicação entre
IDL “exportada”
aplicativos executando em diferentes processadores.
Domínio de
Gerência pelo gateway Domínio de Portanto, DCOM é um middleware.
SNMP Gerência
CORBA
Atualmente, DCOM está integrado nas plataformas COM+ e
.NET.
(c) FEEC/UNICAMP 255 (c) FEEC/UNICAMP 256
SCM segurança DCE RPC SCM segurança DCE RPC classe O objeto, sua interface e a lib a qual
(coclass) pertence são individidual- e globalmente
protocolos de rede (TCP/IP) protocolos de rede (TCP/IP) identificados por um UUID (ou GUID)
interface (Universally/Globally Unique IDentifier),
uma sequência de 128 bits gerada por
hardware hardware
um aplicativo denominado guidgen.
classe
(coclass) guidgen leva em conta a data, hora,
SCM: Service Control Manager rede host ID, etc. para gerar um GUID.
(parte do Windows)
lib interface
[uuid(3C6E0347-479C-11D4-96B9-0090272BDBDA), helpstring("AccountComObject Class")] Nos ambientes Microsoft, clientes e servidores COM/DCOM são
coclass AccountComObject {
[default] interface IAccountComObject; }; desenvolvidos a partir de um wizard (ATL COM AppWizard).
};
A favor do DCOM: