Netbeans + hibernate -> ou mettre les elements ?

mathieu kobsch <[email protected]> Tue, 20 Mar 2007 19:13:14 +0100
Newsgroups gmane.comp.java.netbeans.general.french
Message-ID <[email protected]>
bonjour
j'ai un petit probleme avec netbeans et hibernate malgré les tuto et le 
livre...
et j'ai déja chercher sur les forum et sur google ( plusieurs jours déja )
je suis déja à 2 semaine de java a temps plein

Environement:
Netbeans 5.5 -> environement choisi pour le projet
hibernate 3.2
MySQL 5.0 -> base de données choisi par le projet

je travail sur un exemple tout simple décrit beaucoup plus en détails ci 
dessous.
je dois signaler que mysql marche bien mais j'ai un doute sur la 
connexion entre hibernate et mysql ainsi que sur les paths des 
différents fichier à mettre en place

quelqu'un pourrais t'il m'indiquer les étapes et les repertoires où 
mettre mes différents fichiers parce que je ne comprend pas pourquoi 
cela ne marche pas
( message d'erreur tout a la fin )

par avance merci au gens qui voudront m'aider et le pourront

edit:

le mail étant assez long, j'ai ma réflexion sur le sujet qui a evoluer 
apres écriture et nouveau test :

je pense avoir trouver une piste pour probleme décrit ci dessous :
en regardant les log j'ai vu qu'il n'arrive pas a trouver le fichier de conf
dans netbeans on doit le mettre ou ?

je l'ai mis dans /WEB-INF/ mais rien n'y fait

Code :

  log4j:WARN No appenders could be found for logger 
(org.apache.commons.digester.Digester.sax). log4j:WARN Please initialize 
the log4j system properly. 20 mars 2007 17:14:00 
org.apache.catalina.core.StandardContext start INFO: Le conteneur 
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/test] a 
déjà été démarré Initial SessionFactory creation 
failed.org.hibernate.HibernateException: /hibernate.cfg.xml not found 


fin edit

dans la config de netbeans :

Dois je ajouter le driver MySQL dans Netbeans ? ( runtime -> drivers )
Ou est ce que je dois ajouter directement une data source via interface 
web dans http://localhost:8084/admin/ -> ressources -> une datasource

je dois dire que j'ai fait les deux successivement sans succes avec 
hibernate !
Par contre les ptit script normaux de connexion à une base de données 
marche.

Description de mes fichiers :

BASE DE DONNEES
user : toto
pass : toto
base : test
table : toto que j'ai rempli de quelque ligne

[code]
CREATE TABLE `toto` (
  `id` int(10) NOT NULL auto_increment,
  `nom` varchar(20) NOT NULL default 'toto',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
[/code]



NETBEANS
Nom du projet : test
type : application web
option particuliere :
l'option Set Source level to 1.4 est décoché
l'option JSF est coche, j'ai gardé la config donnée par défaut

Librairies:

nom: hibernate-mysql
contenu :
hibernate3.jar
mysql-connector-java-5.0.4-bin.jar
+ la liste ci dessous

liste des lib du tar.gz
[code]
_README.txt                     jaas.jar
ant-1.6.5.jar                   jaas.licence.txt
ant-antlr-1.6.5.jar             jacc-1_0-fr.jar
ant-junit-1.6.5.jar             javassist.jar
ant-launcher-1.6.5.jar          jaxen-1.1-beta-7.jar
ant-swing-1.6.5.jar             jboss-cache.jar
antlr-2.7.6.jar                 jboss-common.jar
antlr.license.txt               jboss-jmx.jar
apache.license-2.0.txt          jboss-system.jar
apache.license.txt              jdbc2_0-stdext.jar
asm-attrs.jar                   jdbc2_0-stdext.licence.txt
asm.jar                         jgroups-2.2.8.jar
c3p0-0.9.1.jar                  jta.jar
c3p0.license.txt                jta.licence.txt
cglib-2.1.3.jar                 junit-3.8.1.jar
checkstyle-all.jar              log4j-1.2.11.jar
cleanimports.jar                oscache-2.1.jar
commons-collections-2.1.1.jar   proxool-0.8.3.jar
commons-logging-1.0.4.jar       swarmcache-1.0rc2.jar
concurrent-1.3.2.jar            syndiag2.jar
connector.jar                   version.properties
connector.licence.txt           versioncheck.jar
dom4j-1.6.1.jar                 xerces-2.6.2.jar
ehcache-1.2.3.jar               xml-apis.jar
[/code]


JAVA CODE mis dans le meme package

pakage : essai

Class Toto : toto.java
[code]
package essai;

public class Toto
{
    public Toto(){}
   
    private Integer id;
    private String nom;
   
    public Integer getId() { return id; }
    private void setId(Integer id) { this.id = id; }

    public String getNom() { return nom; }
    public void setNom(String nom){ this.nom = nom; }
}
[/code]

servlet : voir.java
desc : afficher les elements (code recuperer et adapter du tuto officiel)
[code]
package essai;

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.ServletException;
import java.util.*;
import java.text.SimpleDateFormat;
import essai.HibernateUtil;

public class voir extends HttpServlet {
    protected void doGet(HttpServletRequest request,HttpServletResponse 
response)
    throws ServletException, IOException
    {
        try {
            
HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
            PrintWriter out = response.getWriter();
            List result = 
HibernateUtil.getSessionFactory().getCurrentSession().createCriteria(Toto.class).list();
            if (result.size() > 0) {
                for (Iterator it = result.iterator(); it.hasNext();) {
                    Toto toto = (Toto) it.next();
                    out.println("<p>");
                    out.println("<br />id : " + toto.getId() );
                    out.println("<br />nom: " + toto.getNom() );
                    out.println("</p>");
                }
            }
            out.flush();
            out.close();
            
HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().commit();
        }
        catch (Exception ex)
        {
            
HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().rollback();
            throw new ServletException(ex);
        }
    }
}
[/code]

Class: HibernateUtil.java
desc: une classe qui aide a la connexion à hibernate si j'ai saisi
[code]
package essai;

import org.hibernate.*;
import org.hibernate.cfg.*;

public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            sessionFactory = new 
Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." 
+ ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}
[/code]


XML -> je ne sais pas ou les mettres

config : hibernate.cfg.xml -> je l'ai mis dans WEB-INF sans succes et 
puis dans le package essai mais sans succes tjs
[code]
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD//EN"
  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property 
name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property 
name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property 
name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="hibernate.connection.username">toto</property>
        <property name="hibernate.connection.password">toto</property>
        <property name="show_sql">true</property>
       
         <!-- mapping de base-->
         <mapping resource="java/essai/Toto.hbm.xml"/>
       
    </session-factory>
</hibernate-configuration>
[/code]


config : Toto.hbm.xml -> je l'ai mis dans le package essai
[code]
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
       
       
<hibernate-mapping>

    <class name="Toto" table="toto">
        <id name="id" column="id">
            <generator class="increment"/>
        </id>
        <property name="nom" column="nom"/>
    </class>

</hibernate-mapping>
[/code]


enfin voila cela m'affiche ceci comme erreur

[code]
exception

javax.servlet.ServletException: L'exécution de la servlet a lancé une 
exception
    
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

cause mère

java.lang.NoClassDefFoundError
    essai.voir.doGet(voir.java:20)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

[/code]

merci au gens qui voudront m'aider et le pourront

cordialement

mathieu