Colocando o Hibernate prá funcionar

Estou com a seguinte saída para configuração do Hibernate:

2005-05-25 01:37:13,953 INFO  hibernate.cfg.Environment  -> Hibernate 2.1.7
2005-05-25 01:37:13,953 INFO  hibernate.cfg.Environment  -> hibernate.properties
 not found
2005-05-25 01:37:13,968 INFO  hibernate.cfg.Environment  -> using CGLIB reflecti
on optimizer
2005-05-25 01:37:13,968 INFO  hibernate.cfg.Environment  -> using JDK 1.4 java.s
ql.Timestamp handling
2005-05-25 01:37:13,984 INFO  hibernate.cfg.Configuration  -> Mapping resource:
Cadastro.hbm.xml
2005-05-25 01:37:14,453 DEBUG hibernate.util.DTDEntityResolver  -> trying to loc
ate http://hibernate.sourceforge.net/hibernate-mapping.dtd in classpath under ne
t/sf/hibernate/
2005-05-25 01:37:14,453 DEBUG hibernate.util.DTDEntityResolver  -> http://hibern
ate.sourceforge.net/hibernate-mapping.dtdnot found in classpath
2005-05-25 01:37:36,171 ERROR hibernate.cfg.Configuration  -> Could not configur
e datastore from input stream
org.dom4j.DocumentException: Connection timed out: connect Nested exception: Con
nection timed out: connect
        at org.dom4j.io.SAXReader.read(SAXReader.java:358)
        at net.sf.hibernate.cfg.Configuration.addInputStream(Configuration.java:
286)
        at net.sf.hibernate.cfg.Configuration.addClass(Configuration.java:354)
        at CadastroDAO.<init>(CadastroDAO.java:10)
        at TesteCadastro.main(TesteCadastro.java:29)
Nested exception:
java.net.ConnectException: Connection timed out: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
        at java.net.Socket.connect(Socket.java:505)
        at java.net.Socket.connect(Socket.java:455)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:364)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:476)
        at sun.net.www.http.HttpClient.<init>(HttpClient.java:213)
        at sun.net.www.http.HttpClient.New(HttpClient.java:286)
        at sun.net.www.http.HttpClient.New(HttpClient.java:298)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLC
onnection.java:720)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConne
ction.java:672)
        at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection
.java:597)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLCon
nection.java:837)
        at java.net.URL.openStream(URL.java:1007)
        at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown So
urce)
        at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
        at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source
)
        at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Sourc
e)
        at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(
Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Un
known Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at org.dom4j.io.SAXReader.read(SAXReader.java:339)
        at net.sf.hibernate.cfg.Configuration.addInputStream(Configuration.java:
286)
        at net.sf.hibernate.cfg.Configuration.addClass(Configuration.java:354)
        at CadastroDAO.<init>(CadastroDAO.java:10)
        at TesteCadastro.main(TesteCadastro.java:29)
net.sf.hibernate.MappingException: Error reading resource: Cadastro.hbm.xml
        at net.sf.hibernate.cfg.Configuration.addClass(Configuration.java:357)
        at CadastroDAO.<init>(CadastroDAO.java:10)
        at TesteCadastro.main(TesteCadastro.java:29)
Caused by: net.sf.hibernate.MappingException: org.dom4j.DocumentException: Conne
ction timed out: connect Nested exception: Connection timed out: connect
        at net.sf.hibernate.cfg.Configuration.addInputStream(Configuration.java:
296)
        at net.sf.hibernate.cfg.Configuration.addClass(Configuration.java:354)
        ... 2 more
Caused by: org.dom4j.DocumentException: Connection timed out: connect Nested exc
eption: Connection timed out: connect
        at org.dom4j.io.SAXReader.read(SAXReader.java:358)
        at net.sf.hibernate.cfg.Configuration.addInputStream(Configuration.java:
286)
        ... 3 more

Já adicionei todos os arquivos da pasta lib do Hibernate no meu classpath e criei as classes necessárias. Acho q não tô sabendo aonde colocar os .properties e o .hbm.xml.

Abraços

Onde está seu hibernate.properties?

2005-05-25 01:37:13,953 INFO  hibernate.cfg.Environment  -> hibernate.properties
  not found

Ele realmente não está sendo encontrado, ele deve ficar na raiz do seu projeto, coloque a estrutura dos seus diretórios se vc tiver dúvida de onde colocar.

Se a minha aplicação tiver na pasta projeto e nela tiverem as pastas WEB-INF, classes e lib eu devo colocar:

  1. Na pasta raiz (projeto)
  2. Na pasta WEB-INF
  3. Na pasta lib
  4. Ou na lib/ext do java?

A estrutura de diretórios seria:

- projeto
  - WEB-INF
  - classes
  - lib

Você fez um arquivo de configuração do Hibernate?

Com certeza! Só q está no lugar errado… :shock:

Ele é assim:

hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect 
hibernate.connection.driver_class = org.gjt.mm.mysql.Driver 
hibernate.connection.url = jdbc:mysql://localhost:3306/test 
hibernate.connection.username = root 
hibernate.connection.password = root

Coloca ele dentro de “classes”.

Continuo com o mesmo problema… Ele não encontra o hibernate.properties. oloquei na pasta classes também as minhas classes que fazem mapeamento, o arquivo .hbm.xml e o arquivo log4j.properties e nada! :roll:

Deve estar na raiz do classpath.

Bom, vamos por partes então.
Você teoricamente precisa destes 3 recursos para fazer tua aplicação funcionar:

[list]hibernate.cfg.xml (ou o antigo hibernate.properties)[/list]
[list]log4g.xml (ou o tb antigo log4j.properties)[/list]
[list]Recursos HBM (Mapeamentos de seus beans x tabelas)[/list]

Ok? E você diz que tem os 3 recusos em seu classpath. Então vejamos qual o erro. Durante o deploy de sua aplicação, a ordem de necessidade dos arquivos, é que primeiramente será necessário o arquivo de configuração do log4j. Este iniciado, a iniciação passa a ser do arquivo de configuração do hibernate, que por sua vez, mapeia teus hbm. ok!?

Pelo que deu para ver na tua primeira mensagem, o arquivo do log4j está sendo achado normalmente. Pode-se ver pelas várias saídas de log:

2005-05-25 01:37:13,968 INFO  hibernate.cfg.Environment  -> using CGLIB reflection optimizer

A inicialização do hibernate já não está acontecendo com sucesso como pode-se ver nesta linha:

2005-05-25 01:37:13,953 INFO  hibernate.cfg.Environment  -> hibernate.properties not found

Concorda? Ele realmente não está achando teu arquivo de configuração do hibernate. Então é aí que temos que prestar atenção agora. O ‘cecaldas’ comentou sobre isto e disse que ele tem que ficar na raiz do teu projeto. Já eu discordo um pouco, ele deve ficar dentro de qualquer ponto em teu classpath (cara chato mesmo né? ;D). Enfim, se você colocar ele dentro da pasta que está teus arquivos compilados.

Que tal passar alguns detalhes da situação? Por exemplo, você tá usando Eclipse? Se estiver, você pode colocar o teu arquivo dentro da tua pasta de codigos fontes, quando você dá o build no projeto (ou apenas o famoso CTRL + S), ele faz a cópia de tudo que tá ali para a pasta classes. Já se for algum outro editor, tipo o JCreator ou algum editor mais simples, você tem que colocar ele ‘na mão’ ali…

Bom, 2 outras coisinhas, eu vi ali no debug, que ele tá tentando já mapear os hbm mesmo sem ter iniciado. Por um acaso você tá mapeando eles na classe? Que tal deixar no xml de configuração do proprio hibernate? Eu particularmente acho mais limpo!

E outra coisa. Ao fazer o deploy, ele não tá achando a dtd do hibernate. Dá uma olhada aqui:

2005-05-25 01:37:14,453 DEBUG hibernate.util.DTDEntityResolver -> <a href="http://hibern" target="_blank" rel="nofollow">http://hibern</a> ate.sourceforge.net/hibernate-mapping.dtdnot found in classpath

Me diga que raios de tag HTML é essa ai? Hehehehehe, se você tiver sem internet aponte para um recurso local, mas saiba que sem a dtd carregada, o deploy de aplicações com o Hibernate é impossível!

Valeu…

Ok Lucas. O que eu tô querendo saber mesmo é onde colocar cada arquivo necessário prá fazer funcionar o hibernate, segundo essa configuração de diretórios:

 - projeto
   - WEB-INF
   - classes
   - lib

Por que ele não está encontrando o hibernate.properties? Já tentei colocá-lo na pasta classes e não funcionou!

Você já tentou em vez de usar o arquivo hibernate.properties usar o hibernate.cfg.xml?

Poste um dos seus arquivos de mapeamento aqui pra olhar esse negócio da DTD.

E mais uma coisa, baixe o Caveat Emptor (uma aplicação demo do Hibernate): http://caveatemptor.hibernate.org/

E teste aí no seu servidor, se não funcionar, só terreiro de macumba…

Tentei não… Rola usar?

<?xml version="1.0"?>
&lt;!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping.dtd"&gt;
&lt;hibernate-mapping&gt;
    &lt;class name="Cadastro" table="cadastro"&gt;
        &lt;id name="username" column="username" type="string"&gt;
            &lt;generator class="assigned"/&gt;
        &lt;/id&gt;
        &lt;property name="senha" type="string"/&gt;
    
        &lt;property name="idFoto" type="integer"/&gt;
        &lt;property name="nome" type="string"/&gt;
        &lt;property name="sexo" type="boolean"/&gt;
        &lt;property name="nascimento" type="date"/&gt;
        &lt;property name="pais" type="string"/&gt;
        &lt;property name="cidade" type="string"/&gt;
        &lt;property name="webpage" type="string"/&gt;
        &lt;property name="email" type="string"/&gt;
        &lt;property name="about" type="string"/&gt;
        &lt;property name="passions" type="string"/&gt;
        &lt;property name="sports" type="string"/&gt;
        &lt;property name="activities" type="string"/&gt;
        &lt;property name="books" type="string"/&gt;
        &lt;property name="music" type="string"/&gt;
        &lt;property name="tvshows" type="string"/&gt;
        &lt;property name="movies" type="string"/&gt;
        &lt;property name="cousines" type="string"/&gt;
        &lt;property name="msn" type="string"/&gt;
    &lt;/class&gt;
&lt;/hibernate-mapping&gt;

Ahh, tô usando o Hibernate 2.1

Pois é, tá parecendo tudo normal…

É melhor você baixar o Caveat Emptor, se nem ele funcionar, aí você pode começar a ficar preocupado.

Sério, ainda não consigo acreditar que o arquivo tá lá e não tá sendo encontrado. Isso é impossível! ;D

Me diga, tua app tá rodando lá… Com ela RODANDO vá na pasta classes e veja se o arquivo tá lá… Se você tiver usando o eclipse (como eu disse), quando ele faz o build ele compila tudo e joga lá, e se o xml não tiver no sources, acaba não indo para o classes.

Faz essa verificação aí! (enfim, vc usa eclipse ou não?)

Uso eclipse não… Tô usando tudo na mão mesmo…

Pior q tá…

Então é mágica :shock:

O nome dele é hibernate.properties ? Desse mesmo jeitinho, com todas as letras?

Veja letra por letra!

Tô dizendo… o negócio tá complicado…

Vc pode especificar também aonde o arquivos do hibernbate estão.
eu estou montando um protótipo com o hibernate e pretendo usar a seguinte estrutura.

  • com
    -projeto
    • hibernateMappings
      hibernate.cfg.xml
      no cóidgo eu chamo
Configuration c = new Configuration();
        SessionFactory sessionFactory =  c.configure("/com/projeto/hibernateMappings/hibernate.cfg.xml").buildSessionFactory(); 
        Session session = sessionFactory.openSession();

Agora estou com a seguinte saída do Tomcat:

log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly.

Que devo fazer?