| |
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
|