MINISTÉRIO DA CIÊNCIA E TECNOLOGIA INSTITUTO NACIONAL DE PESQUISAS ESPACIAIS
INPE-7939-TDI/744
OBJETOS DISTRIBUÍDOS: CONCEITOS E PADRÕES
Samira Rachid da Costa
Dissertação de Mestrado em Computação Aplicada, orientada pelo Dr. Tatuo Nakanishi, aprovada em 27 de abril de 2000.
INPE
São José dos Campos 2000
681.3.06
COSTA, S. R.
Objetos distribuídos: conceitos e padrões / S. R. ta. - São José dos Campos: INPE, 1993.
230p. - (INPE-7939-TDI/744).
1.Processamento distribuído. 2. Programação orientada a objeto. 3 Sistemas cliente servidor. 4.Programação de putador. 5.Objetos distribuídos. I.Título.
Aprovado pela Banca Examinadora em cumprimento a requisito exigido para a obtenção do Título de Mestre em Computação Aplicada.
Candidato (a) : Samira Rachid da Costa
AGRADECIMENTOS
Ao Dr. Tatuo Nakanishi que orientou este trabalho de modo seguro, compreensivo e amigo.
À Embraer (VPI/DTE/GEN/NSI), na figura do sr. Laerte Jeronimo de Oliveira, que permitiu o desenvolvimento deste trabalho.
Ao colega Marcelo José Ruv Lemes pelos conselhos sempre tão pertinentes.
A meus pais, pelo amor e sacrifício; e a meus familiares e amigos pelo encorajamento.
A meus tão queridos Elcio, Pedro e Bruno pela paciência, compreensão, apoio e amor.
RESUMO
Ao se decidir distribuir um sistema deve-se considerar tanto o “overhead” que isto implica quanto o benefício que pode ser alcançado. Tipicamente, após iniciar-se o modelamento de um sistema, determina-se quais objetos precisam ser implementados como locais e quais como distribuídos. A modelagem apresenta um problema quanto à escolha da arquitetura de distribuição. Estas arquiteturas suportam o desenvolvimento de aplicações executando num ambiente heterogêneo e distribuído, dispondo de serviços comuns às aplicações, tais como, comunicação entre cliente e servidor, isolamento das aplicações em relação às plataformas de hardware, sistemas operacionais, protocolos de rede e linguagens de implementação. Cada uma delas apresentará vantagens e desvantagens, isto é, uma melhor adequação para cada sistema em particular. Através de pesquisa bibliográfica, verificou-se que as arquiteturas mais referenciadas são: o “Common Object Request Broker Architecture” (CORBA) e o “Distributed Component Object Model” (DCOM). Assim um estudo das similaridades e diferenças entre ambos, levantadas através de seus modelos de objeto, protocolos de comunicação, funcionalidades e abrangência, passa a ser um ponto de partida para obter um panorama do estado da arte da tecnologia de distribuição de objetos, assim como, para o desenvolvimento de aplicações distribuídas que se utilizem dessas arquiteturas de distribuição.
DISTRIBUTED OBJETS: CONCEPTS AND PATTERNS
ABSTRACT
When deciding to distribute a system, it should be taken into account that the distribution implies "overhead". Yet, the benefit it provides should be explored. Typically, after starting the modeling of a system, is necessary to determine which objects must be implemented as locals or as distributed. The modeling presents a problem in relation to the choice of the distribution architecture. These architectures support the development of applications performing in a heterogeneous environment. They also provide common services to the applications such as communication between server and client; isolation of applications concerned to hardware plataforms; operational systems; net protocols; and implementation languages. Each architecture will present advantages and disadvantages. That is, a more suitable architecture for each particular system. Through bibliographic research, it was possible to observe that the most referred architectures are: “Common Object Request Broker Architecture” (CORBA) and “Distributed Component Object Model” (DCOM). Thus a disquisition showing the similarities and differences between then could be the first step to obtain an overview of the distributed object technology; and also assist the development of distributed application based on one of this distribution architectures.
SUMÁRIO
Pág.
LISTA DE FIGURAS LISTA DE TABELAS
LISTA DE SIGLAS E ABREVIATURAS
CAPÍTULO 1 - INTRODUÇÃO ... 29
CAPÍTULO 2 - OBJETOS E DISTRIBUIÇÃO ... 35
2.1 - OBJETOS DISTRIBUÍDOS ... 35
2.2 - SISTEMAS DISTRIBUÍDOS ORIENTADOS A OBJETOS... 37
CAPÍTULO 3 - “MIDDLEWARE” ... 41
3.1 - ARQUITETURA CLIENTE/SERVIDOR ... 41
3.1.1 - ARQUITETURA CLIENTE/SERVIDOR DE DUAS CAMADAS ... 42
3.1.2 - ARQUITETURA CLIENTE/SERVIDOR DE TRÊS CAMADAS ... 43
3.1.2.1 - MONITORES DE PROCESSAMENTO DE TRANSAÇÃO ... 44
3.1.2.2 - SERVIDOR DE MENSAGENS ... 45
3.1.2.3 - “OBJECT REQUEST BROKER”... 46
3.2 - “MIDDLEWARE”... 47 3.2.1 - SERVIÇOS “MIDDLEWARE” ... 51 3.2.2 - TIPOS DE “MIDDLEWARE” ... 51 3.2.2.1 - COM/DCOM ... 52 3.2.2.2 - CORBA... 53 3.2.2.3 - JAVA... 53 3.2.2.4 - DCE ... 53
CAPÍTULO 4 - DCOM ... 57
4.1 - OBJETO COM... 57
4.2 - INTERFACES ... 64
4.2.1 - IDENTIFICADOR DE INTERFACE ... 64
4.2.2 - LINGUAGEM DE DEFINIÇÃO DE INTERFACE... 65
4.2.3 - “VTABLE” ... 65
4.2.4 - INTERFACE FUNDAMENTAL IUnknown... 67
4.2.4.1 - INTERFACE IUnknown::QueryInterface... 67
4.2.4.2 - INTERFACE IUnknown::AddRef / IUnknown::Release ... 68
4.3 - BIBLIOTECA COM ... 69
4.3.1 - CRIAÇÃO DE OBJETOS COM ... 71
4.3.2 - FÁBRICA DE OBJETOS ... 72
4.4 - PERSISTÊNCIA ... 74
4.4.1 - ARMAZENAGEM ESTRUTURADA ... 75
4.4.2 - INTERFACES IPersist... 78
4.5 - “MONIKERS” ... 79
4.6 - COMUNICAÇÃO CLIENTE/OBJETO COM... 82
4.6.1 - CLIENTE E SERVIDOR DE OBJETOS NO MESMO PROCESSO ... 82
4.6.2 - CLIENTE E SERVIDOR DE OBJETOS LOCAL ... 83
4.6.3 - CLIENTE E SERVIDOR DE OBJETOS REMOTO ... 85
4.6.4 - “MARSHALING” E “UNMARSHALING” ... 85
4.6.5 - “TYPE INFORMATION”... 87
4.7 - INTERFACE IDispatch ... 89
4.8 - DCOM... 91
4.8.1 - CRIAÇÃO DE UM OBJETO REMOTO... 91
4.8.1.1 - CRIAÇÃO DE UM OBJETO REMOTO - CoCreateInstance... 91
4.8.1.2 - CRIAÇÃO DE UM OBJETO REMOTO - CoCreateInstanceEx... 93
4.8.1.3 - CRIAÇÃO E INICIAÇÃO DE UM OBJETO REMOTO ... 95
4.8.2 - ACESSO A UM OBJETO REMOTO... 97 4.8.2.1 - OBJETO RPC... 97 4.8.2.2 - OXIDs ... 98 4.8.2.3 - OBJREFs... 99 4.8.2.4 - INTERFACE IRemUnknown ... 101 4.8.2.5 - “PINGING” ... 102
4.8.3 - ACESSO SEGURO A UM OBJETO REMOTO ... 103
4.8.3.1 - SEGURANÇA DE ATIVAÇÃO ... 103 4.8.3.2 - CHAMADA SEGURA... 103 4.9 - CONSIDERAÇÕES FINAIS... 104 CAPÍTULO 5 - CORBA ... 105 5.1 - MODELO DE OBJETO... 105 5.2 - COMPUTAÇÃO DISTRIBUÍDA ... 105
5.2.1 - ADIÇÃO DE “BROKER” ENTRE CLIENTES E SERVIDORES ... 106
5.2.2 - PROCESSOS SERVIDORES ... 108
5.2.3 - SUPORTE À COMUNICAÇÃO SÍNCRONA E ASSÍNCRONA ... 108
5.3 - CONCEITOS E TERMOS ASSOCIADOS AO CORBA ... 109
5.3.1 - REQUISIÇÕES ... 109
5.3.2 - IDL ... 110
5.3.3 - INSTÂNCIAS E REFERÊNCIAS DE OBJETOS ... 114
5.3.4 - IMPLEMENTAÇÃO DE OBJETOS ... 114
5.4 - ARQUITETURA CORBA ... 116
5.5 - “INTEROPERABILIDADE” CORBA ... 123
5.6 - “OBJECT MANAGEMENT ARCHITECTURE”... 126
5.7 - SERVIÇOS CORBA ... 127
5.7.1 - SERVIÇOS DE GERENCIAMENTO DE INFORMAÇÃO ... 128
5.7.1.1 - SERVIÇO DE PROPRIEDADE ... 128
5.7.1.3 - SERVIÇO DE CONSULTA ... 130
5.7.1.4 - SERVIÇO DE “EXTERNALIZAÇÃO” ... 131
5.7.1.5 - SERVIÇO DE PERSISTÊNCIA DE OBJETO ... 132
5.7.1.6 - SERVIÇO DE COLEÇÃO ... 133
5.7.2 - SERVIÇOS DE GERENCIAMENTO DE TAREFAS ... 134
5.7.2.1 - SERVIÇO DE EVENTOS ... 134
5.7.2.2 - SERVIÇO DE CONCORRÊNCIA ... 134
5.7.2.3 - SERVIÇO DE TRANSAÇÃO ... 135
5.7.3 - SERVIÇOS DE GERENCIAMENTO DE SISTEMA ... 136
5.7.3.1 - SERVIÇO DE NOMEAÇÃO ... 136
5.7.3.2 - SERVIÇO DE CICLO DE VIDA ... 139
5.7.3.3 - SERVIÇO DE LICENCIAMENTO ... 140 5.7.3.4 - SERVIÇO DE NEGÓCIOS ... 141 5.7.4 - SERVIÇOS DE INFRA-ESTRUTURA ... 142 5.7.4.1 - SERVIÇO DE TEMPO ... 142 5.7.4.2 - SERVIÇO DE SEGURANÇA ... 143 5.8 - FACILIDADES CORBA ... 144 5.8.1 - FACILIDADES HORIZONTAIS ... 145
5.8.1.1 - FACILIDADE DE INTERFACE DE USUÁRIO ... 145
5.8.1.2 - FACILIDADE DE GERENCIAMENTO DE INFORMAÇÃO ... 146
5.8.1.3 - FACILIDADE DE GERENCIAMENTO DE SISTEMA ... 147
5.8.1.4 - FACILIDADE DE GERENCIAMENTO DE TAREFA ... 147
5.8.2 - FACILIDADES VERTICAIS ... 148
5.9 - OMG ... 149
5.10 - CONSIDERAÇÕES FINAIS ... 150
CAPÍTULO 6 – CORBA / DCOM ... 153
6.1 - CORBA/DCOM ... 154
6.1.2 - MODELO DE OBJETO ... 156
6.1.3 - INTERFACE DE OBJETO ... 157
6.1.4 - IDL ... 161
6.1.5 - HERANÇA DE INTERFACE ... 164
6.1.6 - REPOSITÓRIO DE INTERFACES ... 165
6.1.7 - CICLO DE VIDA DO OBJETO ... 166
6.1.8 - PROTOCOLO ... 169 6.1.9 - ERROS E EXCEÇÕES ... 170 6.1.10 - PERSISTÊNCIA ... 171 6.1.11 - SERVIÇOS ... 172 6.1.12 - SEGURANÇA ... 178 6.2 - CLASSIFICAÇÃO ... 179 6.3 - “INTEROPERABILIDADE” CORBA/DCOM ... 181 6.4 – CONSIDERAÇÕES FINAIS ... 182 CAPÍTULO 7 - JAVA... 197 7.1 - CARACTERÍSTICAS DA LINGUAGEM ... 197 7.1.1 - INTERFACE ... 190 7.1.2 - BIBLIOTECAS JAVA ... 191 7.2 - RMI ... 194
7.2.1 - CAMADA “STUB / SKELETON” ... 197
7.2.2 - CAMADA DE REFERÊNCIA REMOTA ... 199
7.2.3 - CAMADA DE TRANSPORTE ... 200
7.3 - APLICAÇÔES UTILIZANDO RMI ... 200
7.4 - CARREGAMENTO DINÂMICO DE “STUB” ... 202
7.5 - “GARBAGE COLLECTION” DE OBJETOS REMOTAS ... 203
CAPÍTULO 8 - CONCLUSÕES ... 205
REFERÊNCIAS BIBLIOGRÁFICAS ... 209
LISTA DE FIGURAS
Pág.
3.1 - Arquitetura cliente/servidor de duas camadas ... 43
3.2 - Arquitetura cliente/servidor de três camadas ... 44
3.3 - Monitores de processamento de transações ... 45
3.4 - Funções do ORB... 46
3.5 - “Middleware” ... 48
3.6 - Arquitetura DCE... ... 54
4.1 - Objeto COM... ... 58
4.2 - Ponteiros para interfaces de objeto COM... ... 59
4.3 - Localização de objetos COM... ... 60
4.4 - Reuso por contenção... ... 62
4.5 - Reuso por agregação... 63
4.6 - Formato padrão... ... 66
4.7 - Uso do método QueryInterface da interface IUnknown... ... 68
4.8 - Criação de uma instância de um objeto COM... ... 71
4.9 - Criação de um objeto COM utilizando fábrica de objetos... ... 74
4.10 - Armazenagem Estruturada... ... 76
4.11 - Objeto COM acessando armazenadores e conjuntos de dados... ... 77
4.12 - Utilização de “Moniker”... ... 80
4.13 - Acesso a objetos COM no mesmo processo do cliente... 83
4.14 - Acesso a objetos COM locais... ... 84
4.15 - Acesso a objetos COM remotos... ... 85
4.16 - ”Type library”... ... 88
4.17 - Interface IDispatch... ... 90
4.18 - Criação de objeto COM remoto usando CoCreateInstance... ... 92
4.19 - Criação de objeto COM remoto utilizando CoCreateInstanceEx... ... 94
4.20 - Criação de objeto COM remoto utilizando “Monikers”... ... 96
4.21 - OXID “resolver”... ... 99
4.22 - Interface IRemUnknown... 101
5.1 - Relacionamentos clientes e servidores... 106
5.2 - Múltiplos clientes e servidores com ORB ... ... 107
5.3 - Exemplo de IDL CORBA mapeada para C... ... 112
5.4 - Exemplo de uma definição de interface... ... 113
5.5 - Um cliente associado a uma implementação no servidor... ... 115
5.6 - Arquitetura CORBA... 116
5.7 - Invocação via “stubs” e DII... 119
5.8 - Estrutura típica do Adaptador de Objeto... ... 121
5.9 - Relacionamento entre Repositórios de Interface e Implementação... 123
5.10 - Relacionamento entre os protocolos inter-ORB... 125
5.11 - Arquitetura de Gerenciamento de Objeto (OMA)... ... 127
5.12 - Exemplo de um Serviço de Relacionamento... ... 130
5.13 - Exemplo de um Serviço de Persistência de Objeto... ... 132
5.14 - Exemplo de um gráfico de nomes... 138
5.15 - Interação entre o negociante e seus clientes... 142
5.16 - Arquitetura de Gerência de Objetos... 151
6.1- Número de interfaces necessárias para integração entre objetos... 161
6.2 - Mapeamento do IDL CORBA ... 163
6.3 - Herança de interface CORBA e DCOM... ... 165
6.4 - Ciclo de vida de um objeto CORBA ... ... 158
6.5 - Windows DNA ... 173
6.6 - Esquema geral de um “gateway” entre CORBA e DCOM ... 181
7.1 - Ambiente Java... ... 193
7.2 - RMI... ... 197
LISTA DE TABELAS
Pág.
5.1 - Capacidades da facilidade de Interface de Usuário... 145
5.2 - Capacidades da facilidade de Gerenciamento de Informação ... 146
5.3 - Capacidades da facilidade de Gerenciamento de Sistema ... 148
5.4 - Capacidades da facilidade de Gerenciamento de Tarefa ... 149
5.5 - Capacidades das facilidades Verticais... 140
6.1 - Similaridades e diferenças entre CORBA e DCOM ... 183
A.1 – Interfaces IDL ... ... 224
A.2 – Implementação do cliente ... ... 225
A.3 – Implementação do objeto servidor ... 227
LISTA DE SIGLAS E ABREVIATURAS
ACID - Atomic, Consistent, Isolated, Durable
ACL - Access Control List
ANSI - American National Standards Institute API - Application Programming Interface
ASCII - American Standard Code for Interchange of Information
BNF - Backus-Naur Form
BOA - Basic Object Adapter
CDR - Common Data Representation
CDS - Cell Directory Service CLSID - Class Identifier
COM - Component Object Model
CORBA - Common Object Request Broker Architecture DBMS - Data Base Management System
DCE - Distributed Computing Enviroment
DCE ESIOP - DCE Especific Environment Inter-ORB Protocol
DCE RPC - Distributed Computing Enviroment Remoto Procedure Call DCOM - Distributed Component Object Model
DFS - Distributed File Service
DHTML - Dynamic Hipertext Markup Language DII - Dynamic Invocation Interface
DLL - Dynamic Link Library
DNA - Windows Distributed interNet Applications DSOM - Distributed Object Model
DSPID - Dispatch Identifier
DOT - Distributed Object Technology DTS - Distributed Time Service
EBCDIC - Extended Binary-Coded Decimal Interchange Code
EJB - Enterprise JavaBeans
GIOP - General Inter-ORB Protocol GUI - Graphic User Interface GUID - Globally Unique Identifier HTML - Hipertext Markup Language HTTP - Hiper Text Transfer Protocol IDL - Interface Definition Language IID - Interface Identifier
IIOP - Internet Inter-ORB Protocol
IP - Internet Protocol
ISO - International Standards Organization
JDK - Java Developer´s Kit
JIT - Just-in-Time
JRMP - Java Remote Method Protocol
JVM - Java Virtual Machine
LAN - Local Area Network
LDAP - Lightweight Directory Access Protocol MIDL - Microsoft Interface Definition Language
MS - Microsoft
MSQM - Microsoft Message Queue Server MS RPC - Microsoft Remoto Procedure Call MTS - Microsoft Transaction Server NDR - Network Data Representation
OA - Object Adapter
Object RPC - Object Remoto Procedure Call OMA - Object Management Architecture
OMG - Object Management Group
ORB - Object Request Broker
OSF - Open Software Foundation
OSI - Open System Interconnect
POA - Portable Object Adapter
RFC - Request for Comment
RFP - Request for Proposal
RMI - Remote Method Invocation
RPC - Remote Procedure Call
SQL - Structured Query Language
TIO - Time Interval Object
TP - Transaction Processing
TCP - Transmission Control Protocol
TCP/IP - Transmission Control Protocol / Internet Protocol UDA - Universal Data Access
UDP - User Datagram Protocol
UDP/IP - User Datagram Protocol / Internet Protocol UML - Unified Modeling Language
URL - Uniform Resource Locators ou Universal Resource Locators
UTO - Universal Time Object
UUID - Universally Unique Identifier
VM - Virtual Machine