ht=34 alt=imagem_pdf.jpg src="/imagens/imagem_pdf.jpg" width=34 border=0>
Tira-Dúvidas
EntityManager e driver JDBC
Estou desenvolvendo para minha monografia uma aplicação com EJB 3.0, utilizando o Hibernate, fazendo uso da API Hibernate EntityManager. Para a criação do meu EntityManager crio um factory:
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("sistemabancario");
Mas recebo um ClassDefNotFoundException. Além disso, o meu classpath contém o arquivo mysql-connector-java-<versão>-bin.jar, que acredito ser o equivalente ao hsqldb.jar utilizado pelo exemplo da matéria na Edição 28.
Guilherme Melo
Quanto à primeira dúvida, o EntityManager deve ser utilizado somente para EJBs dentro de um container EJB (parte do servidor JEE). Ele é usado quando se usa o Hibernate como a implementação do CMP (persistência gerenciada pelo container) do servidor de aplicações, e exige passos adicionais de configuração que são dependentes do container EJB utilizado. Então em vez de utilizar diretamente as classes e configurações para EJB 3.0 do Hibernate, devem ser utilizadas as classes da especificação EJB 3.0 e as configurações oferecidas pelo seu servidor de aplicações – JBoss 4, Glassfish, Oracle AS ou outro que já inclua um preview do EJB 3.0.
Observe que os exemplos do artigo da Edição 28 em nenhum momento utilizam o EntityManager. Os exemplos funcionam sem modificações em um container web ou mesmo num container EJB (em EJBs session, por exemplo), incluindo suporte a CMT (transações gerenciadas pelo container) e DataSources do container. O que muda é apenas o arquivo de configuração hibernate.cfg.xml (a documentação do Hibernate indica as mudanças necessárias).
Quanto à segunda dúvida, o arquivo mysql-conector-stable-<versão>-bin.jar é a distribuição completa do MySQL JDBC Connector (nome pomposo do driver JDBC do MySQL), que contém fontes, exemplos e documentação. Você deve descompactar esse jar (utilizando o comando jar xvf ou qualquer descompactador para arquivos zip). É dentro dele que está o arquivo jar com o driver JDBC do MySQL.
Experimente usar uma aplicação Java simples para conectar ao banco de dados, para ter certeza de que estão sendo usados o driver, a url e outros parâmetros corretamente antes de tentar usar o Hibernate. E lembre-se que no MySQL será necessário criar um usuário com permissão para estabelecer conexões "remotas" partindo do endereço IP 127.0.0.1 (que para o MySQL é diferente do localhost).
Fernando Lozano
Hibernate na web e pools de conexões
Escrevi uma aplicação web com Struts baseada no exemplo (não-web) do artigo sobre Hibernate, publicado na Edição 28. Percebi que as conexões com o HSQLDB ficam abertas depois de listar os clientes. Minha aplicação web conecta ao mesmo banco de dados HSQLDB que o usado no exemplo do artigo (porém estou usando o modo Server). Quando executo o exemplo e depois visualizo as conexões no prompt do Linux com o comando netstat aparece:
tcp 0 0 127.0.0.1:1078 127.0.0.1:9001 TIME_WAIT
Indicando que a aplicação abriu uma conexão, pesquisou os valores e fechou a conexão. Agora, vejam o retorno do mesmo comando depois de executar minha aplicação web:
tcp 0 0 127.0.0.1:9001 127.0.0.1:1067 ESTABELECIDA
tcp 0 0 127.0.0.1:9001 127.0.0.1:1066 ESTABELECIDA
A conexão fica aberta e a cada nova carga da página são abertas mais conexões – que nunca são fechadas. O que está acontecendo? (Estou abrindo e fechando os objetos Session e Transaction, assim como no exemplo.)
Alexandre de Castro
...