Esse artigo faz parte da revista Java Magazine edição 33. Clique aqui para ler todos os artigos desta edição

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

...

Quer ler esse conteúdo completo? Tenha acesso completo