openbus.tex 33.6 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
%
%  OpenBus 2.0
%
%  Created by Hugo Roenick on 2012-05-22.
%  Copyright (c) 2012 Tecgraf/PUC-Rio. All rights reserved.
%
\documentclass[]{article}

% Use utf-8 encoding for foreign characters
\usepackage[latin1]{inputenc}

\usepackage[brazil]{babel}

% Setup for fullpage use
\usepackage{fullpage}

% Uncomment some of the following if you use the features
%
% Running Headers and footers
%\usepackage{fancyhdr}

% Multipart figures
%\usepackage{subfigure}

% More symbols
%\usepackage{amsmath}
%\usepackage{amssymb}
%\usepackage{latexsym}

\usepackage{hyperref}

% Surround parts of graphics with box
\usepackage{boxedminipage}

% Package for including code in the document
36
\usepackage{../mwlabinputs2}
37
38
39
40
41
42
43

% If you want to generate a toc for each chapter (use with book)
\usepackage{minitoc}

% This is now the recommended way for checking for PDFLaTeX:
\usepackage{ifpdf}

44
45
46
%% Redefines the label 'Listing' for ..
\def\lstlistingname{Código}
\codestyle{colorful}
47
\imagedir{figs}
48

49
% new commands
50
\newcommand{\foreign}[1]{\textit{#1}}
51
52
53
54
55
56
57
\newcommand{\term}[1]{\textit{#1}}
\newcommand{\code}[1]{\texttt{#1}}

\newcommand{\openbus}{\textsc{OpenBus}}
\newcommand{\corba}{\textsc{CORBA}}
\newcommand{\orb}{\textsc{ORB}}
\newcommand{\scs}{\textsc{SCS}}
58
59
\newcommand{\lua}{\textsc{Lua}}
\newcommand{\oil}{\textsc{OiL}}
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
\newcommand{\version}{2.0.0}


%\newif\ifpdf
%\ifx\pdfoutput\undefined
%\pdffalse % we are not running PDFLaTeX
%\else
%\pdfoutput=1 % we are running PDFLaTeX
%\pdftrue
%\fi

\ifpdf
\usepackage[pdftex]{graphicx}
\else
\usepackage{graphicx}
\fi

Hugo Roenick's avatar
Hugo Roenick committed
77
\title{Manual do \openbus{} \version{}}
78
\author{Tecgraf}
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

\date{\today}

\begin{document}

\ifpdf
\DeclareGraphicsExtensions{.pdf, .jpg, .tif}
\else
\DeclareGraphicsExtensions{.eps, .jpg}
\fi

\maketitle

\tableofcontents

\section{Introdução}

96
O \openbus{}~\cite{web:OPENBUS} é um projeto de um middleware para integração de sistemas computacionais heterogêneos, ou seja, desenvolvidos em diferentes linguagens de programação e plataformas computacionais.
Hugo Roenick's avatar
Hugo Roenick committed
97
O \openbus{} se baseia em duas tecnologias complementares para constituir uma infraestrutura básica de integração de sistemas.
98
99
100
São elas:
%
\begin{description}
Hugo Roenick's avatar
Hugo Roenick committed
101
  \item[\corba{}]
102
  \foreign{Common Object Requester Broker Architecture}~\cite{omg08corbaspec} é um padrão da indústria que especifica um middleware para sistemas distribuídos heterogêneos orientados a objetos.
Hugo Roenick's avatar
Hugo Roenick committed
103
104
105
106
107
  \corba{} define o modelo básico de comunicação usado nas integrações de sistemas feitas com o \openbus{}.
  \corba{} tem suporte para inúmeras linguagens de programação e plataformas computacionais, que nos permite integrar com o \openbus{} uma grande variedade de sistemas.
  \item[\scs{}]
  \foreign{Software Component System}~\cite{web:SCS} é um modelo simples e flexível de componentes de software baseado em \corba{} que permite estruturar sistemas usando uma arquitetura baseada em componentes.
  O \scs{} é usado no \openbus{} tanto como um modelo arquitetural básico para a infraestrutura básica oferecida como também para estruturar a forma como as intregrações são feitas.
108
109
\end{description}

Hugo Roenick's avatar
Hugo Roenick committed
110
Em cima dessas duas tecnologias o \openbus{} introduz duas novas extensões, que basicamente definem a infraestrutura especializada para integração de sistemas computacionais:
111
112
113
%
\begin{description}
  \item[Barramento de Integração]
Hugo Roenick's avatar
Hugo Roenick committed
114
  É o conceito central do \openbus{}.
115
  O barramento é o meio através do qual toda interação e comunicação entre os sistemas integrados é feita.
Hugo Roenick's avatar
Hugo Roenick committed
116
  O barramento é uma extensão de \corba{} com suporte a controle de acesso, que basicamente consiste na autenticação de todo acesso a sistemas através do barramento, permitindo assim identificar de forma segura da origem de toda comunicação (chamadas \corba{}) feita através do barramento.
117
  \item[Serviços de Apoio à Integração]
Hugo Roenick's avatar
Hugo Roenick committed
118
  Juntamente ao barramento, o \openbus{} também provê suporte para registro e descoberta de serviços ofertados pelos sistemas integrados, comunicação baseada em eventos, entre outras funcionalidades através de uma arquitetura orientada a serviços (\emph{Service-Oriented Architecture}, ou SOA~\cite{erl2005service}).
119
120
121
122
  O objetivo desses serviços é oferecer funcionalidades básicas e essenciais que visem facilitar e agilizar o desenvolvimento da integração dos diferentes sistemas.
\end{description}

% TODO: review the summary of the text.
123
Este documento tem como objetivo apresentar o \openbus{} \version{} e seus conceitos principais.
124
Nesta seção introdutória apresentaremos uma definição do projeto e os motivadores para o seu uso.
125
126
Na seção~\ref{sec:architecture} apresentamos a arquitetura do sistema, e entramos um pouco mais em detalhes de como ocorre a comunicação dentro do barramento na seção~\ref{sec:communication}.
Em seguida, na seção~\ref{sec:perspectives} falamos um pouco mais sobre o projeto de acordo com a visão de cada tipo de usuário, e, por fim, na seção~\ref{sec:glossary} apresentamos um glossário com os conceitos principais do projeto.
127

128
129
130
131
132
133
134
135
136
137
138
139
\subsection{Quando Utilizar o \openbus{}}

O \openbus{} é um middleware para integração de sistemas heterogêneos.
Contudo, a integração de sistemas pode se dar de diversas formas diferentes e envolver requisitos diversos.
Por exemplo, uma forma de integração extremamente simples entre dois sistemas que apenas precisam trocar dados é por meio da troca de arquivos num formato adotado por ambos sistemas.
Inclusive esses arquivos podem ser transmitidos pela rede manualmente ou automaticamente.

Em outros cenários, a integração pode também exigir alguma colaboração entre os sistemas, através da execução comandos por exemplo.
Nesse caso, é necessário que os sistemas forneçam alguma forma para receber comandos, que pode ser através de mensagens enviadas por um socket, comandos de um WebService, chamadas a um objeto remoto, etc.
Fazer uma sistema implementar inúmeras interfaces de acesso para integração com diferentes sistemas é uma solução pouco razoável num cenário em que devam existir vários sistemas a serem intergrados.
Idealmente, deve-se adotar uma tecnologia de comunicação genérica e eficiente o suficiente para ser adequada ao uso com sistemas com diferentes requisitos.

140
Outra necessidade comum na integração de sistemas cooporativos é o controle de acesso e a governança das integrações.
141
142
Ou seja, quando os sistemas integrados não são abertos ao acesso público e irrestrito, é necessário que a infraestrutura forneça mecanismos que permitam restringir quais serviços podem ser integrados e como essas integrações podem ser feitas.

143
O \openbus{} oferece uma infraestrutura adequada para implementar integrações entre sistemas tendo essas questões e necessidades em mente.
Hugo Roenick's avatar
Hugo Roenick committed
144
145
Em particular, o \openbus{} se baseia na tecnologia \corba{} para definir uma tecnologia de comunicação genérica e eficiente para integração de sistemas escritos em diferentes linguagens de programação e plataformas computacionais.
Além disso, o \openbus{} estende a tecnologia \corba{} com suporte a um rigoroso controle de acesso que permite a inspeção e controle das integrações através de um modelo de governança onde um gerente do barramento pode controlar quais sistemas accessam o barramento e se integram a outros sistemas.
146
147
148

\section{Arquitetura}\label{sec:architecture}

149
150
151
A infraestrutura mínima do \openbus{} é representada pelo seu núcleo principal, que é composto por um barramento de comunicação e serviços essenciais, denominados serviços núcleo.
Além do núcleo do barramento, a arquitetura \openbus{} também define um conjunto de elementos adicionais que fornecem outras facilidades importantes, tais como bibliotecas e serviços extras.

152
153
154
A figura~\ref{fig:architecture}, apresenta a arquitetura do \openbus{} e suas partes principais. 
Entraremos em detalhes sobre as partes principais do \openbus{} nas subseções a seguir.

Amadeu Andrade Barbosa Junior's avatar
Amadeu Andrade Barbosa Junior committed
155
156
157
158
159
160
\begin{figure}
\centering
\includegraphics[width=\textwidth]{figs/architecture.png}
\caption{Arquitetura do \openbus{}}
\label{fig:architecture}
\end{figure}
161

162
\subsection{Barramento}\label{sec:barramento}
163

164
O barramento é o meio de comunicação entre os sistemas integrados.
Hugo Roenick's avatar
Hugo Roenick committed
165
Toda comunicação feita pelos sistemas integrados através do barramento consiste de chamadas de objetos distribuídos usando o padrão \corba{}.
166
Contudo, ao contrário das chamadas de \corba{} comuns, nas chamadas feitas através do barramento, é imposto um rigoroso controle de acesso que só permite chamadas autenticadas por entidades previamente autorizadas a acessar o barramento.
167

168
169
170
Essas entidades são tipicamente sistemas computacionais e usuários desses sistemas.
Cada entidade é identificada por um nome único no barramento a ser definido pelo gerente barramento.
Tipicamente, os nomes de entidade são nomes de sistemas computacionais que oferecem serviços no barramento e nomes de contas de usuários numa base de diretórios como o LDAP.
171

Hugo Roenick's avatar
Hugo Roenick committed
172
Todo acesso ao barramento é autenticado através de credenciais ocultas nas chamadas de objetos \corba{}.
173
174
175
176
177
Essas credenciais de acesso especificam um login no barramento.
Todo login é sempre autenticado em nome de uma entidade, que é responsável por todos os acessos feitos através daquele login.
Cada login possui um identificador único que é utilizado para identificar acessos ao barramento feitos através daquele login.
Uma mesma entidade pode ter mais de um login para acesso ao barramento simultaneamente.
Por exemplo, no caso de um serviço implementado como um sistema distribuído composto por mais de um processo que acessa o barramento simultaneamente, é interessante que cada processo possa utilizar um login próprio para acesso ao barramento.
178

Hugo Roenick's avatar
Hugo Roenick committed
179
O \openbus{} define três formas para autenticação de um entidade no processo de criação de logins de acesso.
180
Essas três formas de autenticação são:
181

182
183
184
185
186
\begin{description}
  \item[Autenticação por Senha] Neste caso, a autenticação é feita através de uma senha fornecida juntamente com o nome da entidade.
  A senha é validada por um módulo de validação de senhas especificado pelo gerente do barramento.
  Tipicamente esse módulo de validação é integrado a alguma base de dados de usuário que fornece informações para validação das senhas.
  Essa forma de autenticação é geralmente utilizada para incoroporar ao barramento um grande número de usuários mantidos num sistema separado.
Hugo Roenick's avatar
Hugo Roenick committed
187
  Um exemplo dessa integração é o validador de senhas LDAP fornecido pelo \openbus{}, que permite autenticar nomes de usuários num serviço de diretórios LDAP como entidades para acesso ao barramento.
188
189
190
191
192
193
  Neste caso, todos os nomes de usuários na base LDAP são automaticamente entidades autorizadas a acessar o barramento.

  \item[Autenticação por Certificado] Neste caso, a autenticação é feita através de um certificado previamente cadastrado pelo gerente do barramento em nome de uma entidade particular.
  Para que a autenticação ocorra é preciso decodificar um desafio encriptado com a chave pública contida no certificado cadastrado.
  Para tanto, é necessário ter a chave privada correspondente ao certificado cadastrado.
  Essa forma de autenticação é geralmente utilizada para autorizar o acesso de sistemas computacionais específicos que forneçem serviços através do barramento.
194
  Toda gerência dos certificados de acesso cadastrados no barramento é de responsabilidade do gerente do barramento, que utiliza ferramentas fornecidas pelo \openbus{} para adicionar, remover e consultar os certificados cadastrados.
195
196
197
198
199

  \item[Autenticação Compartilhada] Neste caso, a autenticação é feita em colaboração com outro sistema que já possua um login no barramento, ou seja, já está autenticado em nome de uma entidade para acessar o barramento.
  Neste caso, o sistema já autenticado produz um segredo a ser compartilhado com o outro sistema que é utilizado na autenticação desse novo sistema em nome da entidade autenticadora do sistema original.
  Essa forma de autenticação é geralmente utilizada quando um sistema deseja compartilhar sua forma de autenticação com outro sistema sem fornecer informações privilegiadas como senhas ou chaves privadas.
\end{description}
200

201
Tipicamente os logins de acesso ao barramento ficam válidos por um período denominado \term{lease}.
Hugo Roenick's avatar
Hugo Roenick committed
202
Após o período de \term{lease}, o login deve ser renovado para que possa continuar válido\footnote{Essa tarefa de renovação de login é feita automaticamente pela biblioteca de acesso do \openbus{}.}.
203
Independentemente disso, todo login pode se tornar inválido a revelia da aplicação.
Hugo Roenick's avatar
Hugo Roenick committed
204
Neste caso, uma nova autenticação deve ser realizada para obtenção de um novo login para continuar acessando o barramento\footnote{A identificação de que o login ficou inválido e o restabelecimento do login podem ser feitos através da callback \code{onInvalidLogin} da biblioteca de acesso do \openbus{}.}.
205
Uma vez inválido, um login nunca volta a ser válido novamente.
206

207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
O barramento possui algumas características importantes que devem ser mencionadas.
Uma delas, é que o barramento persiste todo o seu estado no diretório de dados.
Dessa forma, sempre que ele é iniciado, e o mesmo já possui uma base de dados populada, esses dados serão recarregados e farão parte do estado inicial do barramento.

Outra característica importante é que o barramento mantém compatibilidade com a a versão imediatamente anterior do barramento.
Ou seja, mesmo que a versão do barramento evolua, as entidades ainda conseguem acessar o barramento utilizando bibliotecas de acesso de uma versão anterior.
O \openbus{} utiliza um esquema de versionamento com quatro números, no formato \emph{A.B.C.D}, onde:

\begin{itemize}
  \item Campos \textbf{A} e \textbf{B} significam a versão da IDL e deve ser igual em todos os pacotes que são compatíveis: versão IDL, barramento e bibliotecas de acesso.
  \item Campo \textbf{C} é incrementado quando ocorre alguma modificação que não altera a IDL do núcleo do barramento.
  \item Campo \textbf{D} representa uma versão apenas com correções de falhas.
\end{itemize}

Sendo assim, o barramento 2.0 permite a realização de acesso utilizando as bibliotecas de acesso de versão 1.5.x, onde \emph{x} pode assumir qualquer valor de \emph{C.D}.
Porém, é importante deixar claro que versão 2.0 traz muitas melhorias no quesito de segurança, e essas melhorias não serão usufruídas por clientes que acessam o barramento com versões antigas das bibliotecas de acesso.
O barramento permite que clientes 1.5 se comuniquem com clientes 2.0, e vice-e-versa, porém essas comunicações se realizam com o mesmo nível de segurança que existia na versão 1.5 do barramento.

225
226
\subsection{Serviços Núcleo}

227
228
O barramento oferece em seu núcleo um serviço essencial denominado Registro de Ofertas.
Através dele é possível publicar, buscar e monitorar os demais serviços disponíveis através do barramento.
229

230
231
232
Todo serviço a ser ofertado através do Registro de Ofertas deve ser implementado como um componente \scs{}~\cite{web:SCS} que oferece diferentes facetas através das quais o serviço é acessado.
No momento do registro de uma oferta de serviço, deve ser fornecido um conjunto pares nome e valor que devem descrever propriedades particulares do serviço sendo ofertado.
Essas propriedades poderão ser utilizadas como critério de filtro no momento de buscar por ofertas de serviço no Registro de Ofertas.
233

234
Além das propriedades fornecidas no registro da oferta, o próprio serviço de Registro de Oferta também gera um conjunto de propriedades automáticas que descrevem:
235

236
237
238
239
\begin{itemize}
  \item login com que a oferta foi registrada.
  \item nome da entidade que registrou a oferta.
  \item momento do registro da oferta.
Hugo Roenick's avatar
Hugo Roenick committed
240
241
  \item nome e versão do componente \scs{} que implementa o serviço.
  \item facetas e interfaces do component \scs{} que implementa o serviço.
242
\end{itemize}
243
244

O Registro de Ofertas também disponibiliza um mecanismo de observação de publicação, atualização e remoção de ofertas.
245
Maiores detalhes sobre a especificação e o uso do serviço de Registro de Ofertas podem ser encontrados nos manuais de uso das bibliotecas de acesso~(seção \ref{sec:library})
246
247
248

\subsection{Serviços Extras}

249
A versão atual do \openbus{} oferece um serviço extra denominado Serviço de Colaboração.
250
251
252
253
254
255
256
Esse serviço tem como principais funcionalidades:

\begin{itemize}
  \item criar e compartilhar uma sessão de colaboração
  \item oferecer um canal de comunicação para enviar eventos para todos os membros da sessão
\end{itemize} 

257
Não entraremos em maiores detalhes sobre as funcionalidades e o uso do Serviço de Colaboração neste documento. Para mais informações, consulte o manual do próprio serviço~\cite{collaboration1.0}.
258

259
\subsection{Biblioteca de Acesso}\label{sec:library}
260

261
262
263
O \openbus{} também disponibiliza uma biblioteca de acesso ao barramento a ser utilizada na implementação da integração de sistemas ao barramento.
Essa biblioteca basicamente implementa uma API simplificada para acesso ao barramento, ocultando detalhes do protocolo de comunicação do \openbus.
Através dessa biblioteca é possível realizar as seguintes operções, dentre outras:
264

265
266
267
268
269
270
271
272
\begin{itemize}
  \item Autenticação de entidades;
  \item Obtenção de logins;
  \item Renovação automática de \term{lease} de logins;
  \item Receber notificação de o login se tornou inválido;
  \item Realizar chamadas utilizando diferentes logins;
  \item Identificar os logins e entidades que originaram cada chamada recebida.
\end{itemize}
273

274
A biblioteca de acesso do \openbus{} tem implementações nas quatro diferentes linguagens de programação suportadas oficialmente pelo \openbus{}, em particular, Java~\cite{sdk2.0.0-java}, C\#~\cite{sdk2.0.0-csharp}, C++~\cite{sdk2.0.0-cpp} e Lua~\cite{sdk2.0.0-lua}.
275

276
\subsubsection{Comunicação Através do Barramento}\label{sec:communication}
277

278
279
O barramento é internamente implementado como uma arquitetura orientada a serviços (SOA).
Em princípio, todas as chamadas feitas através do barramento envolvem chamadas a esses serviços internos, em particular, o serviço de Controle de Acesso.
280

281
282
Para evitar a sobrecarga dessas chamadas adicionais a serviços internos do barramento, a biblioteca de acesso, implementa otimizações eficientes que permitem reduzir drasticamente essa sobrecarga nos cenários de uso mais comuns.
Em particular, a biblioteca de acesso faz uso de vários caches internos para minimizar a necessidade de chamadas adicionais a serviços internos da implementação do barramento.
283

284
285
286
287
288
289
Em cenários de integração típicos, a maior parde da comunicação através do barramento é feita diretamente entre os sistemas integrados, sem necessidade de acesso à infraestrutura interna do barramento.
Essa característica da bibliotea de acesso trás duas vantagens importantes:
\begin{itemize}
  \item Primeiramente, o desempenho da comunicação entre dois sistemas só depende da qualidade da rede de comunicação entre esses dois sistemas.
  \item Além disso, mesmo que a infraestrutura do barramento fique indisponível por alguma falha inesperada, a comunicação entre os serviços pode continuar, mesmo que com um nível de qualidade limitado.
\end{itemize}
290

291
\section{Perspectivas}\label{sec:perspectives}
292
293

Agora que já apresentamos a arquitetura e os conceitos gerais do \openbus{}, iremos falar um pouco sobre algumas características específicas do \openbus{}, que dependem do papel que o usuário tem no barramento.
294
Os papéis abordados são:
295

296
297
298
299
300
\begin{description}
  \item[Administrador de Sistema] As pessoas que possuem acesso a máquina onde o barramento será executado e são os responsáveis por levantar e parar o barramento.
  \item[Gerente do Barramento] Aqueles que irão desempenhar o papel de organizar e acompanhar o que é publicado no barramento.
  \item[Desenvolvedor de Sistemas Integrados] Responsáveis por implementar a integração de seus respectivos serviços e aplicações ao barramento.
\end{description}
301

302
\subsection{Administradores de Sistema}
303

304
305
306
307
308
O barramento e os serviços núcleo são distribuídos em um mesmo programa, o \emph{busservice}. Logo, para disparar o barramento, basta executar o programa passando as suas configurações por linha de comando ou por arquivo de configuração.
Se uma configuração não for explicitada, será utilizado o seu valor padrão.

As opções de configuração são:
\begin{description}
309
  \item [-host] Endereço de rede usado pelo barramento.\\
310
Valor padrão é ``*", que significa que vai ouvir em todos os IPs da máquina.
311
  \item [-port] Número da porta usada pelo barramento.\\
312
313
Valor padrão é 2089.

314
  \item [-database] Arquivo de dados do barramento.\\
315
Valor padrão é ``openbus.db".
316
  \item [-privatekey] Arquivo com chave privada do barramento.\\
317
318
Valor padrão é ``openbus.key"

319
  \item [-leasetime] Tempo em segundos de lease dos logins de acesso.\\
320
Valor padrão é 180 segundos.
321
  \item [-expirationgap] Tempo em segundos que os logins ficam válidos após o lease.\\
322
323
Valor padrão é 10 segundos. 

324
  \item [-admin] Usuário com privilégio de administração.\\
325
Não é definido um valor padrão.
326
  \item [-validator] Nome de pacote de validação de login.\\
327
328
Não é definido um valor padrão.

329
  \item [-loglevel] Nível de log gerado pelo barramento.\\
330
O valor padrão é 3. Os níveis vão de 0 a 5, onde 5 é o nível com mais detalhes, e o 0 desativa o log.
331
  \item [-logfile] Arquivo de log gerado pelo barramento.\\
332
Por padrão o log é direcionada para a saída padrão (\emph{standard output}).
333
  \item [-oilloglevel] Nível de log gerado pelo \oil{}~\cite{maia06oil,web:oil} (debug).\\
334
  O valor padrão é 0. Os níveis vão de 0 a 5, onde 5 é o nível com mais detalhes, e o 0 desativa o log.
335
  \item [-oillogfile] Arquivo de log gerado pelo \oil{} (debug).\\
336
Por padrão o log é direcionada para a saída padrão (\emph{standard output}).
337

338
339
  \item [-noauthorizations] Desativa o suporte a autorizações de oferta.
  \item [-nolegacy] Desativa o suporte à versão antiga do barramento.
340

341
  \item [-configs] Arquivo de configurações adicionais do barramento.\\
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
O valor padrão é ``openbus.cfg".
\end{description}

As opções ``admin" e ``validator" podem receber mais de um valor.
Quando essas opções são configuradas por linha de comando, basta repetir a opção o número de vezes desejadas.
Quando são configuradas através do arquivo de configuração, é necessário informar a lista de valores desejados, no formato de uma tabela \lua{}~\cite{web:lua}.
O código~\ref{lst:openbus.cfg} apresenta um exemplo de arquivo do configuração.

\begin{samplelisting}[language=lua]{openbus.cfg}{Exemplo de arquivo de configuração.}
validator = {"openbus.test.core.services.TesterUserValidator"}
loglevel = 5 
admin = {"admin1", "admin2"}
leasetime = 30
\end{samplelisting}

Existem duas formas de se definir o arquivo de configuração que o programa irá utilizar: utilizando a opção ``config'' por linha de comando, ou definindo um valor para a variável de ambiente \emph{OPENBUS\_CONFIG}.
358
Porém, as opções passadas por linha de comando tenham prioridade sobre as opções definidas no arquivo de configuração.
359

360
Através da opção ``validator'' informa-se o módulo do validador de senhas que será utilizado pelo barramento. 
361
Disponibilizamos em \texttt{openbus.core.services.passwordvalidator.LDAP} um validador LDAP, que precisa ser configurado com a lista de servidores utilizados na autenticação. Para maiores informações como configurar o validador LDAP, consulte~\cite{ob2.0install}.
362
363
364
365

%% NOTE: comentado parte que falava sobre o validador de teste: 
% e em \\\texttt{openbus.test.core.services.TesterUserValidator} disponibilizamos um validador para ambientes de teste, que permite acesso quando o login é igual a senha.

366
Também é possível desabilitar o suporte de compatibilidade com a versão anterior através da opção ``nolegacy''. Ao ativar essa opção o barramento deixa de permitir que entidades se autentiquem no barramento utilizando as bibliotecas de acesso de versão 1.5.x. 
367
368


369
\subsection{Gerentes do Barramento}
370

371
Para desempenhar o papel de gerente do barramento, disponibilizamos a ferramenta \emph{busadmin}, que permite que se realize atividades de governança (administração) sobre o barramento.
372
373
374
375
376
377
378
379
380

Antes de entrar em detalhes sobre o uso e as funcionalidades do \emph{busadmin}, vamos agora apresentar alguns conceitos importantes de governança dentro do \openbus{}.
Existem os conceitos de:
\begin{description}

  \item[Categoria] Representa uma categoria de entidades no barramento.
  Categorias de entidade são agrupamentos usados exclusivamente para facilitar a gerência das diversas entidades cadastradas no barramento pelo administrador.

  \item[Entidade] Representa uma entidade do barramento registrada.
381
382
383
  Entidade é tudo aquilo que pode fazer login no barramento e usufruir dos seus   recursos.
  Em particular, tanto usuários como implantações de sistema são considerados entidades.
  Entidades podem ou não ser cadastradas no barramento, mas apenas entidades cadastradas podem ser autorizadas a ofertar serviços.
384
385
386
387
388
389
390

  \item[Certificado] Chave pública que pode ser usado para autenticar uma
dada entidade no barramento.
  É possível adicionar certificados para entidades não cadastradas no barramento.

  \item[Interface] Definição de uma interface IDL de um serviço que pode ser ofertado no barramento.

391
  \item[Autorização] Associação de uma interface IDL a uma entidade, indicando que processos conectados como essa entidade possam oferecer serviços que implementem essa interface no Registro de Ofertas do barramento.
392
393
394
395
396
397
398
399

\end{description}

Para utilizar a ferramenta, deve-se executar:
\begin{verbatim}
busadmin [opções] --login=<usuário> <comando>
\end{verbatim} 

400
Para adicionar e remover categorias, entidades, certificados, interfaces e autorizações, aconselhamos que se defina um arquivo de script \lua{} com o formato especificado no código~\ref{lst:openbus.adm}, porque ele serve de entrada para os comandos ``script'' e ``undo-script'' da ferramenta \emph{busadmin}, que executa ou desfaz a execução do lote de comandos especificados pelo arquivo de script.
401
402

\begin{samplelisting}[language=lua]{openbus.adm}{Exemplo de script para a ferramenta \emph{busadmin}.}
403
404
405
406
407
-- Definição de uma categoria
-- * comando: Category
-- * parâmetros:
--   * id = identificador da categoria
--   * name = descrição da categoria
408
Category {
409
410
  id = "TEST_Category",
  name = "Descrição da categoria",
411
}
412
413
414
415
416
417
-- Definição de uma entidade
-- * comando: Entity
-- * parâmetros:
--   * id = identificador da entidade
--   * category = identificador da categoria que a entidade pertence
--   * name = descrição da entidade
418
Entity {
419
420
421
  id = "TEST_Entity",
  category = "TEST_Category",
  name = "Descrição da entidade",
422
}
423
424
425
426
427
-- Definição de um certificado
-- * comando: Certificate
-- * parâmetros:
--   * id = identificador da entidade
--   * certificate = caminho para arquivo de certificado associado a entidade
428
Certificate {
429
430
  id = "TEST_Entity",
  certificate = "teste.crt",
431
}
432
433
434
435
-- Definição de uma interface
-- * comando: Interface
-- * parâmetros:
--   * id = repID da interface
436
Interface {
437
  id = "IDL:script/Test:1.0"
438
}
439
440
441
442
443
-- Conceder autorização
-- * comando: Grant
-- * parâmetros:
--   * id = identificador da entidade a ser autorizada
--   * interfaces = lista de interfaces a serem autorizadas.
444
Grant {
445
  id = "TEST_Entity",
446
  interfaces = {
447
    "IDL:script/Test:1.0",
448
449
  }
}
450
451
452
453
454
-- Remover autorização
-- * comando: Revoke
-- * parâmetros:
--   * id = identificador da entidade
--   * interfaces = lista de interfaces a serem desautorizadas.
455
Revoke {
456
  id = "TEST_Entity",
457
  interfaces = {
458
    "IDL:script/Test:1.0",
459
460
461
462
463
464
  }
}
\end{samplelisting}

O \emph{busadmin} também permite realizar esses cadastros e descadastros manualmente, além de realizar consultas e outras atividades de gerência do barramento.
A listagem completa dos comandos disponíveis é apresentada a seguir:
465

466
\begin{itemize}
Hugo Roenick's avatar
Hugo Roenick committed
467
  \item \textbf{Opções:}
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483

\begin{description}
  \item[\texttt{--}host=\textless endereço\textgreater] Informa o endereço do Barramento.\\
  Valor padrão é 127.0.0.1.

  \item[\texttt{--}port=\textless porta\textgreater] Informa a porta do Barramento.\\
  Valor padrão é 2089.

  \item[\texttt{--}verbose=\textless nível\textgreater] Aciona o verbose da API \openbus{}.\\
  Valor padrão é 0.
  Os níveis vão de 0 a 5, onde 5 é o nível com mais detalhes, e o 0 desativa o log.
  
  \item[\texttt{--}oilverbose=\textless nível\textgreater] Aciona o verbose do \oil{}.\\
  Valor padrão é 0.
  Os níveis vão de 0 a 5, onde 5 é o nível com mais detalhes, e o 0 desativa o log.

Hugo Roenick's avatar
Hugo Roenick committed
484
485
486
  \item[\texttt{--}certificate=\textless arquivo\textgreater] Informa a chave privada para realizar a autenticação por certificado ao invés de ser por senha.
O padrão é realizar a autenticação por senha, onde a ferramenta pergunta a senha antes de executar o comando.

487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
\end{description}

  \item \textbf{Controle de Categoria:}
\begin{description}

  \item[\texttt{--}add-category=\textless id\textgreater \space
        \texttt{--}name=\textless nome\textgreater] Adiciona uma categoria com o identificador e nome descritivo especificado.

  \item[\texttt{--}del-category=\textless id\textgreater] Remove a categoria com o identificador especificado.

  \item[\texttt{--}set-category=\textless id\textgreater \space
        \texttt{--}name=\textless nome\textgreater] Altera o nome descritivo da categoria com o identificador especificado.

  \item[\texttt{--}list-category] Mostra as informações de todas as categorias cadastradas.

  \item[\texttt{--}list-category=\textless id\textgreater] Mostra informações da categoria especificada.

\end{description}

  \item \textbf{Controle de Entidade:}

\begin{description}

  \item[\texttt{--}add-entity=\textless id\textgreater \space
        \texttt{--}category=\textless id\_categoria\textgreater \space
        \texttt{--}name=\textless nome\textgreater] Adiciona uma entidade com o identificador, categoria e nome descritivo especificado.

  \item[\texttt{--}del-entity=\textless id\textgreater] Remove a entidade com o identificador especificado.

  \item[\texttt{--}set-entity=\textless id\textgreater \space
        \texttt{--}name=\textless nome\textgreater] Altera o nome descritivo da entidade com o identificador especificado.

  \item[\texttt{--}list-entity] Mostra as informações de todas as entidades cadastradas.

  \item[\texttt{--}list-entity=\textless id\textgreater] Mostra informações da entidade especificada.

  \item[\texttt{--}list-entity\space
        \texttt{--}category=\textless id\_categoria\textgreater] Mostra informações das entidades pertencentes a categoria especificada.

\end{description}

  \item \textbf{Controle de Certificado:}

\begin{description}

  \item[\texttt{--}add-certificate=\textless id\_entidade\textgreater \space
        \texttt{--}certificate=\textless certificado\textgreater] Cadastra o certificado para a entidade especificada.

  \item[\texttt{--}del-certificate=\textless id\_entidade\textgreater] Remove o certificado da entidade especificada.

\end{description}

  \item \textbf{Controle de Interface:}

\begin{description}

  \item[\texttt{--}add-interface=\textless interface\textgreater] Adiciona a interface na lista de interfaces permitidas no barramento.

  \item[\texttt{--}del-interface=\textless interface\textgreater] Remove a interface da lista de interfaces permitidas no barramento.

  \item[\texttt{--}list-interface=\textless interface\textgreater] Mostra as interfaces permitidas no barramento.

\end{description}

  \item \textbf{Controle de Autorização:}

\begin{description}

  \item[\texttt{--}set-authorization=\textless id\_entidade\textgreater \space
        \texttt{--}grant=\textless interface\textgreater] Autoriza a entidade a publicar a interface especificada.

  \item[\texttt{--}set-authorization=\textless id\_entidade\textgreater \space
        \texttt{--}revoke=\textless interface\textgreater] Remove a autorização da entidade de publicar a interface especificada.

  \item[\texttt{--}list-authorization] Mostra todas as autorizações concedidas no barramento.

  \item[\texttt{--}list-authorization=\textless id\_entidade\textgreater] Mostra todas as autorizações da entidade especificada.

  \item[\texttt{--}list-authorization 
        \texttt{--}interface=``\textless interface1\textgreater \space
          \textless interface1\textgreater \dots 
          \textless interfaceN\textgreater''] Mostra todas as autorizações contendo as interfaces especificadas.

\end{description}

  \item \textbf{Controle de Ofertas:}

\begin{description}

  \item[\texttt{--}del-offer] Lista todas as ofertas publicadas no barramento e aguarda a escolha de uma oferta para ser removida.

  \item[\texttt{--}del-offer \texttt{--}entity=\textless id\textgreater] Lista todas as ofertas publicadas pela entidade especificada e aguarda a escolha de uma oferta para ser removida.

  \item[\texttt{--}list-offer] Lista todas as ofertas publicadas no barramento.

  \item[\texttt{--}list-offer=\textless id\textgreater] Lista todas as ofertas publicadas pela entidade especificada.

  \item[\texttt{--}list-props] Lista todas as ofertas publicadas no barramento e aguarda a escolha de uma oferta para listar todas as suas propriedades.

  \item[\texttt{--}list-props=\textless id\textgreater] Lista todas as ofertas publicadas pela entidade especificada e aguarda a escolha de uma oferta para listar todas as suas propriedades.

\item \end{description}

  \item \textbf{Controle de Logins:}

\begin{description}

  \item[\texttt{--}del-login=\textless id\textgreater] Remove o login especificado.

  \item[\texttt{--}list-login] Mostra todos os logins ativos no barramento.

  \item[\texttt{--}list-login \texttt{--}entity=\textless id\textgreater] Mostra todos os logins ativos da entidade especificada.

\end{description}

  \item \textbf{Script:}

\begin{description}

  \item[\texttt{--}script] Executa um script \lua{} com um lote de comandos.

  \item[\texttt{--}undo-script] Desfaz a execução de um script \lua{} com um lote de comandos.

\end{description}

  \item \textbf{Relatório:}

\begin{description}

  \item[\texttt{--}report] Constrói um relatório sobre o estado atual do barramento.

\end{description}

\end{itemize}

622
\subsection{Desenvolvedores de Sistemas Integrados}
623

624
625
Como informando na seção~\ref{sec:barramento}, oferecemos uma biblioteca de acesso, que implementa o protocolo e exporta uma API de programação, que oferece alguns facilitadores e auxilia a interação com o barramento.
Para maiores informações, consulte o manual de uso da biblioteca de acesso~(seção \ref{sec:library}).
626
627
628
629
630


\include{glossary}

\bibliographystyle{plain}
631
\bibliography{../references}
632
633

\end{document}