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 Bibliotecas. 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).