Atualização do arquivo IDL | |
SQL e JDBC | |
Dicas de última hora |
As principais novidades são:
os tipos InfoExemplar , InfoExemplares e
InfoLivro ;
|
|
a operação Biblioteca::pegaInfoLivro() ;
|
|
a operação Biblioteca::pegaExemplarDeLivro() ;
|
|
as definições incluídas tendo em vista a etapa 3 do projeto: o tipo
Alcance e a interface BibliotecaVirtual .
|
Fica para a etapa 3 a implementação de quatro objetos
BibliotecaVirtual
com alcances distintos
(LOCAL
, CIDADE
, ESTADO
e
GLOBAL
). Nesta segunda etapa será implementado somente o
objeto BibliotecaVirtual
com alcance
LOCAL
. (Essa BibliotecaVirtual
é praticamente
igual à Biblioteca
"normal".) A operação
BibliotecaVirtual::bibliotecaComAlcance
funcionará com a
restrição (provisória) abaixo:
Se invocada com parâmetro alcance diferente de
LOCAL , a operação
BibliotecaVirtual::bibliotecaComAlcance levanta a
exceção AlcanceNaoSuportado . Se invocada com
parâmetro alcance igual a LOCAL ,
essa operação retorna uma referência para a própria
BibliotecaVirtual .
|
O sistema que temos na rede do IME é o MySQL, um servidor SQL lightweight ("leve" e veloz, porém sem suporte a transações). O servidor MySQL está rodando no sushi. Para acessá-lo você precisará de um nome de usuário (com uma senha) e de direitos de acesso a um banco de dados. Escreva-me dizendo que senha gostaria de ter, que eu criarei um usuário MySQL e um banco de dados para você.
O programa mysql
é um cliente com o qual você pode emitir
comandos SQL interativamente. Se você já tiver uma conta no MySQL, abra
uma sessão num host Solaris (jaca, rebutosa, fradim, sushi, ...) e diga
mysql -h sushi -u seu_username -p seu_banco_de_dados
(O "-h sushi"
é desnecessário se você estiver no próprio
sushi.) Agora você pode interagir com seu banco de dados (que no início
estará completamente vazio), dando comandos create table
,
insert
, select
, etc.
Para mais detalhes, veja a documentação do MySQL:
MySQL Reference Manual (Table of Contents) | |
MySQL Documentation |
Você usará um driver JDBC para acessar o servidor MySQL de um cliente
Java. (Seu servidor CORBA será cliente do servidor MySQL!) Para isso,
inclua em seu CLASSPATH
o arquivo jar com o driver
JDBC. Na rede do IME esse arquivo está em
/home/mac/reverbel/JDBC/jdbc-mysql-mm.jar
.
A documentação do driver JDBC contém a "receita" que seu servidor deverá seguir para registrar o driver e se conectar com um banco de dados:
MM MySQL JDBC Driver (API documentation) |
É bom olhar também um exemplo de uso do driver JDBC. Aqui está um programa de teste do driver, que serve como exemplo de utilização.
Para mais informações sobre JDBC, veja a página JDBC - Connecting Java and Databases e, em especial, o documento JDBC Guide: Getting Started.
Uma object reference para um objetos ativado dinâmicamente
contém o nome associado ao Activator do objetos (o
"nome do serviço"). Para evitar conflitos, use nomes que tenham o
seu username como prefixo. Exemplos: "reverbelLivro"
(em vez de "LivroService" ),
"reverbelExemplar" (em vez de
"ExemplarService" ).
|
A object reference contém também o port do servidor.
Faça seu servidor usar sempre o mesmo port, passando a
propriedade "OAport" na chamada a
BOA_init :
java.util.Properties boaprops = new java.util.Properties(); boaprops.put("OAport", "o_numero_do_port_do_seu_servidor"); BOA boa = orb.BOA_init("TPool", boaprops); // pode usar "TPool" ou "TSession"Para evitar conflitos entre os servidores, use como número de port o número de sua equipe mais 20000, considerando esta numeração de equipes. No servidor da equipe 3 (por exemplo), a iniciação do BOA deve ser feita assim: java.util.Properties boaprops = new java.util.Properties(); boaprops.put("OAport", "20003"); BOA boa = orb.BOA_init("TPool", boaprops); // pode usar "TPool" ou "TSession"Não deveria ser preciso fixar números de ports. Mas só assim conseguimos fazer funcionar a ativação dinâmica de objetos...
|
Use o comando printIOR para ver o que há numa IOR.
Chamando printIOR com uma IOR para um objeto ativado
dinamicamente voce poderá conferir se o host, o port, o nome do
serviço e o id do objeto aparecem corretamente na IOR.
|
Se seu servidor tiver mais de um ativador, ele deve fazer mais de uma
chamada a boa.impl_is_ready() . Cuidado: o código
abaixo não funciona. (Porquê?)
boa.impl_is_ready("reverbelLivro", new LivroActivator(boa)); boa.impl_is_ready("reverbelExemplar", new ExemplarActivator(boa));O código correto é boa.impl_is_ready("reverbelLivro", new LivroActivator(boa), false); boa.impl_is_ready("reverbelExemplar", new ExemplarActivator(boa));
|
Quando registrar seu servidor via oadutil reg ,
não se esqueça de incluir o driver JDBC no CLASSPATH
passado ao executável. Note que, no caso de um servidor com
ativação dinâmica de objetos, deve-se usar a opção
"-s " e deve-se registrar todos os ativadores
implementados pelo servidor. Exemplo:
oadutil reg -s reverbelLivro \ -cpp /usr/local/jdk1.1.4/bin/java \ -a -classpath -a um_classpath_enorme_aqui \ -a Server oadutil reg -s reverbelExemplar \ -cpp /usr/local/jdk1.1.4/bin/java \ -a -classpath -a um_classpath_enorme_aqui \ -a Server
|