As dependências do Hibernate 3.5 e 3.6 - Blog da Caelum: desenvolvimento, web, mobile, UX e Scrum
As dependências do Hibernate 3.5 e 3.6
Postado dia 14/04/2010 por Paulo Silveira em Programação 40
O primeiro desafio de um iniciante em Hibernate, antes mesmo de fazer um tutorial prático, como o disponível na apostila FJ-21 da Caelum, é organizar as dependências necessárias. Até o Hibernate 3.3, a maneira a qual ele era distribuído dava trabalho pra quem precisasse usar a JPA: além do zip contendo o hibernate, era necessário fazer o download de um outro jar contendo a implementação do EntityManager e ainda outro contendo as anotações e interfaces da JPA.
A versão 3.5, como a 3.6, além de trazer uma implementação da JPA2, juntou todos esses pacotes em um só. A documentação está ainda mais completa, assim como a parte explicando o processo de setup do seu primeiro projeto. Apesar disso, como se pode ler na documentação, ela é feita assumindo que você esteja usando o maven. Muitos iniciantes em Java ainda tem dificuldades pra encarar o Maven, ou há ainda quem prefira usar o Ant, Ivy ou gerenciar as dependências manualmente. Quais dependências preciso então para rodar uma aplicação com Hibernate 3.5/3.6?
Para facilitar seu trabalho, deixamos aqui um zip com todas essas dependências do Hibernate 3.5.0, além de um arquivo de configuração para o Log4J, um hibernate.cfg.xml e jars opcionais. O arquivo do Hibernate antigo não é mais recomendado. Melhor seguir o passo a passo e obter o Hibernate mais novo.
Ou então você pode juntar esses jars seguindo o passo a passo: primeiramente precisa baixar a distribuição 3.5/3.6 a partir da página de downloads do hibernate no sourceforge. Ao descompactá-la, encontramos os seguintes arquivos e diretórios:
O hibernate3.jar é um jar contendo as classes fundamentais do Hibernate. Agora, dentro de lib, temos o diretório required, que são dependências que sempre precisaremos utilizar junto com o Hibernate. Todas essas 6 dependências são necessárias:
Dentro de lib, ainda precisamos do jar hibernate-jpa-2.0-api-1.0.0.Final.jar que está na pasta jpa para poder utilizar as anotações do Java EE. Caso você va usar o MySQL, também precisa fazer o download do driver JDBC para ele.
Ainda não terminou. Precisamos do nosso logging funcionando. Se você tentar executar algum exemplo agora, vai receber o conhecido Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder. O SL4J, usado pelo Hibernate, é uma casca para as outras ferramentas de logging, e precisa então de um jar que indique qual logger será utilizado como backend. Na página de distribuições do SL4J você deve baixar a versão correspondente que está usando, seria a 1.5.8 no caso do Hibernate 3.5.0, e pegar o adaptador slf4j-log4j12-1.5.8.jar. Para o Hibernate 3.6.2, é necessário o slf4j-log4j12-1.6.1.jar. Também precisamos do jar do Log4J 1.2.x.
Principais dependências opcionais
Usar o Hibernate facilita muito o desenvolvimento com banco de dados, porém para uma performance e escalabilidade adequada é necessário ficar atento em alguns pontos fundamentais, e também simples, para que ele não se torne um gargalo na sua aplicação. Dentro do diretório optional, destaco como essenciais o c3p0 para pool de conexão e o ehcache para second level cache. O ehcache necessitará do commons-logging por sua vez.
Para você tirar todo o poder da JPA 2, vai querer também usar a api de meta modelos, e pra isso precisa do gerador de modelos do Hibernate.
Tags: c3p0, connection pool, dependências, fj-25, hibernate, Java, jpa, log4j, maven
Danilo 14/04/2010 at 20:08 #
O Edson Gonçalves vem fazendo um trabalho em ensinar a JPA já incluindo a versão 2.0 em seu blog, ao qual fez um post ensinando sobre a utilização do Hibernate 3.5 antes da versão final. Caso alguém esteja iniciando, recomendo:
http://www.edsongoncalves.com.br/category/jpa-2-0/
seufagner 16/04/2010 at 23:56 #
Porque não o Infinispan para 2LC ?
Paulo Silveira 17/04/2010 at 01:29 #
@danilo excelente link!
@Fagner todos o providers de second level cache do hibernate são ótimos. não excluo nenhum. Sempre tive excelentes resultados com ehcache, e o jar dele já vem com o hibernate. Quando precisamos de um cache maior e distribuído, ai não tem como fugir do JBoss Cache, Infinispan, ou ainda memcached "na mao" ou do antiquissimo SwarmCache pra quem lembra.
Garcia 18/04/2010 at 17:25 #
O suporte a Infinispan foi uma das melhores features do H3.5, embora o JBoss Cache sempre me atendeu muito bem para caches distrubuídos.
Paulo, na sua segunda imagem está faltando o DOM4J, que infelizmente é uma dependência necessária, mesmo que você não use os infames HBMs.
E complementando, se você está usando um appserver que suporte JEE6 vocẽ não precisará do hibernate-jpa-2.0-api.
Porém é uma pena você engessar o post no LOG4J, já que o SLF4J permite que você use outras implementações de logging.
Paulo Silveira 18/04/2010 at 17:43 #
Verdade, o DOM4J é obrigatório, mas não entendi seu comentário. Ele está sim lá na pasta required e é o 3o icone que você pode ver na imagem. Ele também está no zip que disponibilizei.
Verdade também sobre a API da JPA, mas nesse caso ele não vai precisar de nenhum jar do Hibernate, já que se for pra usar JPA2 num container Java EE6 ele é obrigado a vir com uma implementação (exemplo, no JBoss você não precisa de nenhum dos jars que citei aqui)! Lembrando que esse post é pra quem está começando com Hibernate standalone.
Não quero engessar não! Tanto o Log4J, Ehcache e o C3P0 tem suas alternativas. Aqui é apenas uma sugestão pra quem está começando. Quanto ao Log4J, é uma pena até agora ele não tenha suporte a java 5. Sem varargs gera um problema grande de early evaluation da mensagem de log e criando aquele idiomistmo de if (log.isDebugEnable())
Garcia 18/04/2010 at 17:54 #
Paulo, é verdade, acho que eu olhei um pouco rápido e não notei o jar alí. My bad, sorry. Olhei correndo e me confundo mesmo.
Rafael Carneiro 18/04/2010 at 20:58 #
Eu e o Paulo Sobreira elaboramos um hibernate-blank e disponibilizamos no endereço http://code.google.com/p/hibernate-blank/
Mais uma fonte para aprendizado.
Mauricio 28/04/2010 at 15:51 #
Parabéns pelo tutorial, muito didático e me ajudou bastante. Tive apenas um problema: mesmo importando a lib do c3p0 e configurando os parâmetros dele no hibernate.cfg.xml, continuo tendo a saída no console de:
INFO DriverManagerConnectionProvider:64 – Using Hibernate built-in connection pool (not for production use!)
Meu hibernate.cfg.xml está assim:
property name="hibernate.c3p0.acquire_increment" 2
property name="hibernate.c3p0.idle_teste_period"100
property name="hibernate.c3p0.max_size"20
property name="hibernate.c3p0.min_size"5
property name="hibernate.c3p0.max_statements"5
property name="hibernate.c3p0.timeout"100
Imagino que como no hibernate 3.2.x, apenas configurar estes parâmetros já é o suficiente para desligar o gerente de pool de conexões do hibernate, fazendo com que ele passe a usar o c3p0. Faltou alguma coisa??? No 3.5 agora é diferente?
Mauricio 29/04/2010 at 07:52 #
Engraçado! Quando mudo as configurações do log4j para as classes do hibernate para debug, a saida do console do meu eclipse indica que ele esta usando o c3p0. Mas quando mudo para info, aparece a famigerada:
Paulo Silveira 29/04/2010 at 08:32 #
oi mauricio! a partir do 3.3 precisa disso: property name="hibernate.connection.provider_class" org.hibernate.connection.C3P0ConnectionProvider
Mauricio 30/04/2010 at 14:41 #
Olá Paulo, valeu, agora está tudo certo, o c3p0 assumiu a gerência do pool. Só que neste caso tem um furo no manual do que vem na versao 3.5.1, na página 37, logo depois de malhar o algoritmo de pool do Hibernate, ele recomendo o uso de um pool de terceiros, sugere o c3p0 e diz que para ativar o org.hibernate.connection.C3P0ConnectionProvider basta configurar as propriedades hibernate.c3p0.*. Era aí que eu estava vendido:) Valeu pela ajuda mais uma vez, resolveu direitinho meu problema.
Luiz Henrique 06/05/2010 at 22:48 #
galera valeu mesmo eu tinha perdido os meu jar.
outra coisa quando eu terminei o curso orientados objetos da caelum
eu peguei todos e do fj21 tbm….. alguem ainda tem essas pasta da caelum
para poder passar
agradeço desde já……
Robson 19/05/2010 at 12:05 #
Show de bola esse post! Ajudou pra caramba! Os caras do hibernate tem que colocar isso lá viu. Parabéns!
Celso Romão 07/07/2010 at 18:36 #
Pessoal configurei o hibernate com as libs acima, quando executo aplicação pelo um método main, a aplicação funciona executo algumas consultas na base de Dados(MySQL).
O problema é que quando tento usar o HIbernate com estes jar no JBoss 5.1, ele dá erro quando lê o hibernate.config.xml.
Estou tentando configurar uma aplicação JSF(Richfaces) e HIbernate.
Alguém sabe quais libs que preciso?
Paulo Silveira 08/07/2010 at 01:11 #
Qual erro ele da Celso?
Usando o jboss, voce nao deveria colocar essas libs, ja que o container ejb ja as contem e pode dar problema de jar hell
Washington Machado 08/07/2010 at 17:01 #
O Paulo comentou sobre não precisar dessas libs caso utilize jboss…mas isso ocorre porque o jboss utiliza o hibernate como implementação da jpa?
E se for utilizar TomCat ou Glassfish? Também não preciso das libs?
Sou iniciante…se as questões não fizerem sentido desconsiderem…obrigado.
Paulo Silveira 09/07/2010 at 12:49 #
Ola Washington. A pergunta faz muito sentido: se voce usa Tomcat, precisará dos jars aqui. Se você usa um container Java EE completo, como o glassfish e o jboss, não precisa, e nem deve colocar esses jars.
Luciano 08/03/2011 at 10:29 #
Desculpe ressucitar o tópico mas quais seriam as dependências para o hibernate 3.6.0?
jabi 02/04/2011 at 21:36 #
Deculpe-me mais alguém poderia me ajudar estou tendo dificuldades para migrar pra versão 3.6 quais seria a versão correta do hibernate-annotations…
Levy 28/06/2011 at 08:16 #
Eu estou começando a usar o maven e antes do mesmo importava esses jars na unha, alguém poderia conferir se esta ok?
https://gist.github.com/1050921
Utilizei as mesmas versões dos jars do post.
Paulo Henrique - PH 26/07/2011 at 09:23 #
Os pacotes atuais do Hibernate não vêm mais com o ehcache.
Mas o que eu estou com dúvida mesmo é como utilizar o Hibernate com o Cache e o pool de conexões.
Se eu "disser" no hibernate.cfg que vou utilizar o C3P0 e o oscache, por exemplo, é bastante para que o Hibernate passe a fazer cache de segundo nível e utilizar o pool de conexões?
A pergunta é se existem configurações default caso eu não tenha determinado outras explicitamente. Ou se existe a exigência de configurações adicionais para utilizar essas ferramentas (C3P0 e oscache) além de citá-las no hibernate.cfg.
Paulo Silveira 26/07/2011 at 12:15 #
No OSCache com certeza vai faltar configuracoes, como anotar quais entidades voce precisa de cache com @Cache, quais queries voce quer cachear com setCacheable(true), etc.
No C3P0, nao sei se já ha defaults para min, max, test_idle_connection, test_on_burrow, etc, mas é bom voce deixar explicito mesmo se houver.
Paulo Henrique 26/07/2011 at 16:15 #
Está ocorrendo uma exceção que acredito ser por causa do C3p0, mas não tenho certeza!
Você sabe o pq dessa exceção?
org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:152)
at br.inf.bluestar.dao.conexao.HibernateUtil.(HibernateUtil.java:26)
at br.inf.bluestar.dao.AbstractDAO.(AbstractDAO.java:28)
at br.inf.bluestar.dao.UsuarioDAO.(UsuarioDAO.java:16)
at br.inf.bluestar.negocio.UsuarioNegocio.efetuarLogin(UsuarioNegocio.java:11)
at br.inf.bluestar.action.UsuarioAction.efetuarLogin(UsuarioAction.java:39)
Meu arquivo de configuração do Hibernate está assim:
jdbc:oracle:thin:@192.168.72.128:1521/xe
<!– jdbc:oracle:thin:@localhost:1521/xe –>
<!– create –>
Alguma dica para solucionar esse problema???
Paulo Silveira 26/07/2011 at 16:20 #
ta faltando configurar a propriedade hibernate.dialect. seu arquivo nao aparece direito por causa dos sinais de xml/html. coloca ele num http://pastebin.com/ pra gente ver
Paulo Henrique - PH 26/07/2011 at 17:01 #
Eu já tentei com e sem o dialeto mas nada:
http://pastebin.com/nF7Gcuyg
A maioria das linhas que estão comentadas eu testei com e sem o comentário!
Estou louco por uma solução!
Paulo Silveira 26/07/2011 at 17:14 #
Esta tudo certo, entao eu apostaria que o erro é o classpath. Onde voce colocou o arquivo? Ele precisa estar no seu WEB-INF/classes, na raiz, por exemplo.
Paulo Henrique - PH 26/07/2011 at 17:21 #
Ele estava dentro do src, como na apostila da Caelum 🙂
Coloquei na pasta que você falou acima e vou testar!
Paulo Silveira 26/07/2011 at 17:25 #
se esta no src, deveria funcionar (se voce utilizar eclipse e o arquivo esta sendo copiando para o /web-inf/classes).
Paulo Henrique - PH 26/07/2011 at 17:29 #
Paulo, não tenho como agradecer o tempo que você gastou quebrando a cabeça comigo!
Colocando o arquivo dentro do WEB-INF/classes funcionou.
Aqui no meu eclipse o arquivo apareceu, além da pasta citada, dentro de Java Resources e não do src (Que fica dentro do Java Resources).
Ainda não parei para analisar essa organização do Eclipse, mas pareceu ter diferença!
Dei uma limpada no .cfg e vou testar agora com as outras configurações.
Paulo Henrique - PH 26/07/2011 at 17:53 #
Só mais uma observação, com o ehcache tenho uma exceção lançada na hora que configuro o Hibernate!
Já com o oscache ele está configurando perfeitamente.
Baixei todas as bibliotecas recentemente logo estou com as últimas versões.
Estou com um mal pressentimento por não ter achado a biblioteca do ehcache nas libs que vieram com a última versão do Hibernate e essa exceção que está sendo lançada quando tento utiliza-la.
É um class not found de uma classe edu.emory.mathcs.backport.java.util.concurrent.BlockingQueue
Sabem o porquê dessa exceção?
Paulo Henrique - PH 26/07/2011 at 18:06 #
Prometo que é o último post! 🙂
Com o EhCache core 2.4.3 funcionou!!!
Leandro 20/10/2011 at 16:35 #
Boa tarde. Existe uma maneira de juntar 2 projetos ORM em java(Eclipse Helios) em um só, sem alterar nenhum dos projetos, apenas utilizando os métodos? Exemplo, proj1 orm banco 1, proj 2 orm banco 2, proj 3 busca dados em proj 1 e em proj 2. Erro: org.hibernate.MappingException: Unknown entity: pkt.Classe. Hibernate só esta reconhecendo as classes de um dos projetos e não dos dois aos mesmo tempo. Obrigado.
Marcius 08/12/2011 at 20:19 #
Como configuro o Hibernate Validator com o H 3.6.8?? As anotations ,org.hibernate.validator.NotEmpty por exemplo, não existem mais. 🙁 Tem como eu continuar usando essas anottations no H3.6.8-Final?
Diogo 21/09/2012 at 20:44 #
O link para o download do arquivo .zip preparado pela caelum do hibernate está fora do ar.
fandrefh 13/10/2012 at 22:43 #
Sei que já faz dias esse post, mas fiquei interessado no zip que foi disponibilizado contendo todas a dependências pois ainda não consigo usar o maven e sinceramente, uma das dificuldades realmente é montar um conjunto de bibliotecas pois na maioria da vezes é preciso sair fazendo download delas em sites diferentes, garimpando mesmo as bibliotecas…
O link do zip está quebrado, não existe mais??!!!
Edu 19/08/2017 at 02:51 #
Sou Iniciante como faça para resolver esse problema, já procurei mas não consigo corrigir¹
C:\Users\Eduardo\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:4: Unexpected element "{}hibernate-configuration" {antlib:org.apache.tools.ant}hibernate-configuration