Hibernate 2 com webwork

Galera, estou “tentando” rodar o hibernate 2 com o webwork.

Bom, configurei o hibernate no server.xml adicionando o contexto, os arquivos hibernate.cfg.xml e o mapeamento da minha classe.

Porém, ocorre aquela nossa querida cachoeira de execeções…

Resumidamente falando…

Caused by: Initial SessionFactory creation failed net.sf.hibernate.HibernateException: Could not find datasource.
.
.
.
Caused by: javax.naming.NameNotFoundException: Name icarus is not bound in this Context

Acredito que são apenas problemas de configuração nos xml. Eu revisei os arquivos, talves database name ou algum parâmetro de acesso ao sgbd errado, porém, não encontrei nada incorreto no acesso propriamente dito.

Alguém já teve um problema semelhante?

Valeu pessoal, aguardo qualquer dica.

[]'s.
Leo Lima

Posta o seu hibernate.cfg.xml e/ou seu hibernate.properties

Não se esqueça de remover informações sobre usuário e senha.

Cara, tu chegaste a criar um dataSource para o teu contexto no Tomcat?

A princípio passei pelo mesmo problema e consegui resolver após criar o mesmo no Tomcat.

Pode fazê-lo através do Tomcat Admin ou criando este arquivo no seguinte caminho: TOMCAT_HOME/conf/Catalina/localhost/

<?xml version='1.0' encoding='utf-8'?>
<Context docBase="_NOME_DA_APLICACAO_" path="/_NOME_DA_APLICACAO_" workDir="_CAMINHO_ONDE_APLICACAO_ESTA_ARMAZENADA_">
  <Resource name="jdbc/_NOME_DA_BASE" type="javax.sql.DataSource"/>
  <ResourceParams name="jdbc/_NOME_DA_BASE">
    <parameter>
      <name>url</name>
      <value>jdbc:jtds:sybase://100.100.100.10:4100/_NOME_DA_BASE;TDS=5.0</value>
    </parameter>
    <parameter>
      <name>password</name>
      <value>_SENHA_DO_USUARIO_DA_BASE_</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>4</value>
    </parameter>
    <parameter>
      <name>maxWait</name>
      <value>5000</value>
    </parameter>
    <parameter>
      <name>driverClassName</name>
      <value>net.sourceforge.jtds.jdbc.Driver</value> <!-- DRIVER DO BD QUE TU ESTIVER UTILIZANDO -->
    </parameter>
    <parameter>
      <name>username</name>
      <value>_USUARIO_DA_BASE_</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>2</value>
    </parameter>
  </ResourceParams>
</Context>

Como o Jack Estripador, vamos em partes… vou colocar o contexto do server.xml para vcs verem…

[code]



factory
org.apache.commons.dbcp.BasicDataSourceFactory

    <!-- connection configuration -->
    <parameter>
        <name>url</name>
        <value>jdbc:mysql://192.168.212.184:3306/mundial</value>
    </parameter>
    <parameter>
        <name>driverClassName</name><value>com.mysql.jdbc.Driver</value>
    </parameter>
    <parameter>
        <name>username</name>
        <value>usuario</value>
    </parameter>
    <parameter>
        <name>password</name>
        <value>senha</value>
    </parameter>

    <!--  pooling options -->
    <parameter>
        <name>maxWait</name>
        <value>3000</value>
    </parameter>
    <parameter>
        <name>maxIdle</name>
        <value>100</value>
    </parameter>
    <parameter>
        <name>maxActive</name>
        <value>10</value>
    </parameter>
</ResourceParams>

[/code]

Bom, as vezes deixamos passar algo, mas parece que tudo está certo.

Bem, aparentemente você está chamando um datasource chamado ‘icarus’

 Caused by: javax.naming.NameNotFoundException: Name icarus is not bound in this Context 

mas na verdade o nome dele é ‘wad’

 &lt;ResourceParams name="wad"&gt;

Foi mal LIPE, acabei fazendo umas modificações e não enviei a informação coerentemente.

Na realidade segue assim…

server.xml

<Context path="/wad" docBase="wad">
    <Resource name="jdbc/icarus" scope="Shareable" type="javax.sql.DataSource"/>
    <ResourceParams name="jdbc/icarus">
        <parameter>
            <name>factory</name>
            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
        </parameter>

        <!-- DBCP database connection settings -->
        <parameter>
            <name>url</name>
            <value>jdbc:mysql://192.168.212.184:3306/icarus</value>
        </parameter>
        <parameter>
            <name>driverClassName</name><value>com.mysql.jdbc.Driver</value>
        </parameter>
        <parameter>
            <name>username</name>
            <value>usuario</value>
        </parameter>
        <parameter>
            <name>password</name>
            <value>senha</value>
        </parameter>

        <!-- DBCP connection pooling options -->
        <parameter>
            <name>maxWait</name>
            <value>3000</value>
        </parameter>
        <parameter>
            <name>maxIdle</name>
            <value>100</value>
        </parameter>
        <parameter>
            <name>maxActive</name>
            <value>10</value>
        </parameter>
    </ResourceParams>
</Context>

hibernate.cfg.xml

[code]<?xml version='1.0' encoding='utf-8'?>

<session-factory>

    <property name="connection.datasource">jdbc/icarus</property>
    <property name="show_sql">false</property>
    <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>

    <!-- Mapping files -->
    <mapping resource="Cliente.hbm.xml"/>

</session-factory>

[/code]

[]'s

Leo.

Este link te ajuda?
http://www.hibernate.org/114.html

Trabalheira né cara? Essas intermináveis customizações das configurações as vezes me aborrecem…

Put here, paste there… change it, add it… try it, therefore… did work?

WebWork, Hibernate e Velocity.

Um milhão de .xml, .properties… im boring…

Vc usa o Xdoclet LIPE? Achei bom o conceito, mas a prática, não sei…
Vejo que tens experiência e como grande defensor do WW talves tenha se deparado com essa situação, alguma sugestão?

Cara, o que você faz no xml inevitavelmente faria dentro de Java de qualquer maneira. Já que esse tipo de informação (nomes, urls, ips) muda com uma certa frequência, eu acho ótimo poder alterar sem ter que recompilar qualquer coisa.

Mas com certeza absoluta é um SACO colocar o bixo pra funcionar. Mas depois desse passo fica bem menos dolorido.

E quanto a XDoclet … bem, eu fico nervoso (no sentido de neurotico) com qualquer ferramenta que gere código para mim. Portanto, salvo raríssimas exceções como relatórios, prefiro escrever tudo à mão.

Depois que se acostumar com os arquivos e tiver os básicos funcionando, vai se impressionar com o que esse Trio é capaz de fazer hehe delicioso :smiley:

LIPE, mantive os esforços e tive um tímido avanço.

Agora acontece o seguinte…

“Cannot create JDBC driver of class ‘’ for connect URL ‘null’”

A URL nula?? isso que eu não entendi, server.xml e hibernate.properties estão aparentemente corretos.

Do you have any tip?

Bem, aparentemente estão apenas aparentemente corretos hehe

Bem, o parametro URL deveria ser declarado apenas no datasource. Você está utilizando também o hibernate.properties? Se sim, postaí pra gente :smiley:

Poisé, se está sendo informado a URL, e os parâmentros do banco no server.xml. Qual o objetivo de haver o hibernate.properties?

A lógica seria por acaso -> se não houver um hibernate.properties no contexto da aplicação, os parâmetros de acesso ficam então a mão do server.xml?

Ou seja, cada aplicação do servidor pode precisar de uma configuração especial para o hibernate acessar os dados, então cada contexto pode ter seu próprio hibernate.properties. Caso contrário, o hibernate utiliza os parâmetros do server.xml.

Seria isso?

fiz dois testes, assim…

hibernate.connection.driver_class = com.mysql.jdbc.Driver # o driver
hibernate.connection.url = jdbc:mysql://192.168.212.184:3306/icarus # a url
hibernate.connection.username = insenic # o username
hibernate.connection.password = insenic # a senha

e assim…

hibernate.connection.driver_class = com.mysql.jdbc.Driver # o driver
hibernate.connection.url = jdbc:mysql://192.168.212.184:3306/icarus?user=usr&password=pass # a url

Bom, como pode-se ver, aqui ilustrei os parâmetros.

Bom, se você está usando um DataSource, não deveria passar os parâmetros da conexão, mas o nome JNDI do seu DataSource:

hibernate.connection.datasource = java:/comp/env/MyDataSource

[]'s

Tenho sério problema para notar detalhes, preciso desenvolver isso. Fiz isso como vc disse caio, e nada!

Meu server.xml é aquele que postei anteriormente, a tag context está escrita na seguinte hieraquia…

&lt;Engine&gt;< Host> <\Context ..

È isso?

o hibernate.cfg.xml é o mesmo publicado. Lá dentro tem “connection.datasource” então pra que colocar no hibernate.properties também, na realidade ainda nao vi utilidade pra ele…

o hibernate.properties é o que o caio me sugeriu. Tentei iniciar o servidor sem ele, e o erro simplesmente foi o mesmo. O hibernate.properties é essencial? È possivel que ele nao esteja sendo encontrado em “WEB-INF\classes” ?

Erro - > “Cannot create JDBC driver of class ‘’ for connect URL ‘null’”.

Galera, tá ficando cansativo pra vcs esse topico né? Foi mal, mas não é por acaso que vcs tantas mensagems publicadas, não é mesmo…

free your mind!

[]'s.

Não é necessário o hibernate.properties no seu caso. Ele é útil quando precisa alterar as propriedades un runtime.

Por estar usando datasource, você não precisa declarar nada relacionado à conexão com o banco (user, url, pwd).

Como o caio apontou, troque a linha da declaração do datasource no hibernate.cfg.xml para

&lt;property name="connection.datasource"&gt;java:/comp/env/jdbc/icarus&lt;/property&gt;

E relaxa quanto às mensagens cara :smiley: configurar é sempre uma chatisse.

galera, qual tomcat é esse q vcs estão usando? no tomcat 5 (ou 5.5) o datasource é definido de forma diferente:

&lt;Context
       		path="/app"
       		docBase="app"&gt;
       		&lt;Resource
       			name="jdbc/app_db"
       			auth="Container"
       			type="javax.sql.DataSource"
       			driverClassName="driver.class"
       			url="jdbc:@//servidor:porta/servico_ou_bd"
       			username="user"
       			password="pass"
       			maxActive="30"
       			maxIdle="10"
       			maxWait="-1"/&gt;
&lt;/Context&gt;

:roll:

E ai galera…

Fiz, refiz todos os passos, e as coisas parecem começarem a serem melhor compreendidas. Eu agora estou com um erro famoso, “no suitable driver”, porém,
meu jdbc driver no caso mysql, está dentro do path global do meu container “TOMCAT/common/lib” como sugerido na documentação do Hibernate. Imaginei que fosse talves uma imcompatibilidade da versão do driver, porém baixei a versão de produção mais atual e nada.

  • Detalhe, o acesso via jdbc sem o hibernate “no braço”, funciona.

Alguma idéia?

Poxa, isso aqui

driverClassName="driver.class"

não resolve nada né? hehe

Entre no site do driver e veja qual o pacote e classe corretos :thumbup:

ahhahaha… essa foi boa Lipe… eu só queria demonstrar como era e daí não coloquei o nome do pacote né? rs…

Acho que o LIPE pensou que fui eu que publiquei o codigo, e logo depois coloquei a duvida… hehehe!

Essa foi engraçada mesmo…