Biblioteca
implementados pelos outros servidores. Numa
cenário realista, cada servidor registraria seu objeto
Biblioteca
com um serviço externo, como o trading
service, e usaria esse serviço para obter referências para as
outras Biblioteca
s. Faremos uma simplificação aqui. Como a
maioria (totalidade?) das equipes estão usando o MySQL, vamos guardar
num banco de dados MySQL as IORs dos objetos Biblioteca
de cada equipe.
O banco de dados com as IORs das bibliotecas | |
Convenções para registro das bibliotecas no BD | |
Geração da IOR |
bibliotecas
", com uma única
tabela, cujo nome é também "bibliotecas
" e cujas colunas
são:
+--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | equipe | int(11) | | PRI | 0 | | | nome | varchar(30) | | UNI | | | | cidade | varchar(30) | | | | | | estado | varchar(30) | | | | | | ior | text | | | | | +--------+-------------+------+-----+---------+-------+Para "registrar sua biblioteca", cada equipe deve inserir uma linha nessa tabela. Embora todos voces tenham direitos de leitura e escrita sobre toda tabela, cada equipe ficará responsável pela linha correspondente à sua biblioteca, não devendo mexer nas outras linhas.
equipe
.
Ponha na coluna ior
uma referência "stringficada" para o
objeto Biblioteca
implementado pelo seu servidor.
Nas colunas nome
, cidade
e estado
coloque os valores dos atributos correspondentes da sua biblioteca. Para
que as bibliotecas virtuais com alcance CIDADE
ou
ESTADO
não fiquem equivalentes a bibliotecas locais (nem a
bibliotecas globais), escolha valores para cidade
e
estado
conforme a convenção abaixo (o n
é o
número da equipe):
n
par: estado="SP"
n
divisível por 4: cidade="Capital"
n
não divisível por 4: cidade="Interior"
n
ímpar: estado="RJ"
n-1
divisível por 4: cidade="Capital"
n-1
não divisível por 4: cidade="Interior"
bibliotecas
, implemente em seu servidor a opção
"-i
". Quando chamado com essa opção, o servidor deve apresentar
na tela uma mensagem como
A IOR da biblioteca local é IOR:000000000000000b49444c3a44423a312e30000000000001000000000000004a000100000000000e3134332e3130372e34352e3536003c8c0000002e00504d43000000000000000b49444c3a44423a312e30000000000012726576657262656c44424d616e6167657200e retornar imediatamente.
Gere essa referência chamando object_to_string
sobre uma
referência para a sua BibliotecaVirtual
com alcance
LOCAL
. Para que consultas distribuídas não entrem em loop é
importante que as IORs sejam de bibliotecas locais.
A referência para a biblioteca local deve ser persistente. Por isso não
se esqueça de dar um nome ao objeto e de passar o nome ao construtor
da superclasse ImplBase
, bem como de registrar o objeto
via oadutil reg
.
Seu servidor consultará o banco de dados bibliotecas
para
obter IORs stringficadas para as outras bibliotecas. Sobre cada uma
dessas IORs o seu servidor deve fazer uma chamada a
string_to_object
(que retorna uma referência para
CORBA::Object
), seguida de uma chamada a
BibliotecaHelper.narrow
(que retorna uma referência para
Biblioteca
).