Jsp /Hibernat

voilemiss Messages postés 46 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 16 janvier 2010 - 23 mars 2009 à 14:31
demokosamelde Messages postés 5 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 2 mai 2010 - 30 mars 2009 à 16:02
Salut,





Je suis  débutante en JSP et je veux faire la connexion ( le mapping )avec Hibernat,Alors j'ai  fais la connexion et un message d'erreur qui s'affiche disant Hibernat ne  fait pas la transaction .J'ai trouvé dans le site de Hibernat qu'il  faut  faire une classe HibernateListener pour que le serveur soit en écoute avec elle  aussi ajouter quelques balises dans le web xml <listener> ou je met  le chemin de la derniere classe .







Mon probleme c'est que en executant ma page ins.jsp (page inscription) une erreur dit que le serveur ne le trouve pas c'est a cause de lignes ajoutés au niveau de web xml .





voila le code de HibernateListener



package HibernateUtil;
import HibernateUtil.HibernatUtil;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class HibernateListener implements ServletContextListener
{
        public void contextInitialized(ServletContextEvent event) {
            HibernatUtil.getSessionFactory(); // Just call the static initializer of that class   
        }

        public void contextDestroyed(ServletContextEvent event) {
            HibernatUtil.getSessionFactory().close(); // Free all resources
      
    }
}










Les lignes q'uil faut les ajouter dans le web xm




<listener>
<listener-class>HibernateUtil.HibernateListener</listener-class>
</listener>







Pouvez vous me donner un coup de main ou mexpliquer comment faire avec Hibernat pour q'elle fonctionne ???














merci

1 réponse

demokosamelde Messages postés 5 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 2 mai 2010
30 mars 2009 à 16:02
Salut

Je ne sais pas si j'ai bien compris ton problème mais je vais essayer de dire quelque chose sur hibernate.

D'abord tu utilises hibernate pour faire du mapping objet relationnel. Cela veut dire que tu as un sgbd derrière pour la base de donnée et que tu as des classes javas (pojos) que tu mappes sur les tables de cette base de données en vue de pouvoir travailler qu'en java (entre autres) dans ton application. Donc première chose nous créeons une base de données en mysql appellée bd_voilemiss avec id root et password root. Et nous créeons un package pour les pojos qui sont des classes javas avec les attributs et leur getters et setter; une classe pour chaque table de la base de données; nous appellerons ce package org.voilemiss.pojos et nous y créons les classes Acteur.java et Role.java. Dans ce même package nous créeons les fichiers Acteur.hbm.xml et Role.hbm.xml qui permettent de lier les classes aux tables acteur et role de la base de données.

Puis il faut un fichier de mapping de tes pojos avec la base de donnée qui donne aussi d'autres paramètres; ce ficier nous l'appellerons hibernate.cfg.xml (c'est en xml).

Une fois que nous avons fait hibernate.cfg.xml, et que nous avons la base de donnée et les pojos nous allons crée une classe java que nous appellerons HibernateUtil.java et c'est cette classe que nous appellerons dans nos applis pour récupérer des sessions de connexion à notre base de données. Nous mettrons hibernate.cfg.xml et HibernateUtil.java dans un package appelé org.voilamiss.utils.

Dans la suite nous donnons les contenus des fichiers ci-dessus cités

Acteur.java
/*
 * Acteur.java
 *
  */
package org.voilamiss.pojos;

import java.util.Collection;
import java.util.HashSet;

public class Acteur {
   
/*This attribute is used as an "hibernate" key*/
private long id;

/*These attributes descibe a generic actor*/
private String nom= "-";
private String prenom="-";
private String login="-";
private String pwd="-";

/*These attributes  represent class in association with Acteur
 *Collection is used for one to many or many to many associations
 *Otherwise the attribute is typed by the class in association with
 */
//Role of the actor
private Role role;
   
    /*Creates a new instance of Acteur */
    public Acteur() {
    }
   
    /*Getters and setters of the attributes previously described*/

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public String getPrenom() {
        return prenom;
    }

    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = cryptePassword(pwd);
    }

  
    public Role getRole() {
        return role;
    }

    public void setRole(Role role) {
        this.role = role;
    }
}
}

Role.java
package org.voilemiss.pojos;

import java.util.Collection;
import java.util.HashSet;

public class Role {
   
/*This attribute is used as an "hibernate" key*/
private long id;

/*These attributes represent the name in three langs*/
private String nom ="-";
private String nomEn= "-";
private String nomPt="-";

/*These attributes  represent class in association with Role
 *Collection is used for one to many or many to many associations
 *Otherwise the attribute is typed by the class in association with
 */
private Collection acteurs;

    /*Creates a new instance of Role */
    public Role() {
    }
   
    /*Getters and setters of the attributes previously described*/

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public Collection getActeurs() {
        if(acteurs==null)
            acteurs=new HashSet();
        return acteurs;
    }

    public void setActeurs(Collection acteurs) {
        this.acteurs = acteurs;
    }
}
}

Acteur.hbm.xml
<?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 schema="bd_sigis" package="org.voilemiss.pojos">
    <class name="Acteur" table="acteur" schema="bd_voilemiss" optimistic-lock="none">
       
            <generator class="increment"/>
           
       
       
       
       
      
        <many-to-one name="role" entity-name="org.voilemiss.Role" cascade="none" foreign-key="Role_id" not-null="false" column="role_id"/>
       
    </class>
</hibernate-mapping>

Role.hbm.xml
<?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 schema="bd_sigis" package="org.voilemiss.pojos">
    <class name="Role" table="role" schema="bd_sigis" optimistic-lock="none">
       
            <generator class="native"/>
       
           
      
 
            <key foreign-key="Role_id" column="role_id"/>
            <one-to-many entity-name="org.voilemiss.pojos.Acteur"/>
       
       
    </class>
</hibernate-mapping>

hibernate.cfg.xml
<?xml version ="1.0" encoding= "UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        20

        20

        1

        com.mysql.jdbc.Driver

        roo t

        jdbc:mysql://localhost:3306/bd_voilemiss

        root

        org.hibernate.dialect.MySQLInnoDBDialect

        true

        <!--Ces deux lignes suivantes ont été ajoutées pour gérer les lobs -->
        0

        true

               
       
        <!-- A changer au final -->
        <!-- Enable Hibernate's automatic session context management -->
        thread

        <!-- Disable the second-level cache  -->
        org.hibernate.cache.NoCacheProvider

        <!-- Echo all executed SQL to stdout -->
        true


        <!-- Attention à décommenter ça juste pour la première création de ta base et à commenter after because it Drop and re-create the database schema on startup
        create

  -->
       
        <!-- reference les mappings des pojos -->    
        <mapping resource ="org/voilemiss/pojos/Acteur.hbm.xml"/>
         <mapping resource= "org/voilemiss/pojos/Role.hbm.xml"/>
       
 </session-factory>
</hibernate-configuration>

HibernateUtil.java
/*
 * HibernateUtil.java
 * Fait le 27 octobre 2007
 */

package org.voilemiss.utils;

import java.net.URL;
import org.hibernate.*;
import org.hibernate.cfg.*;

public class HibernateUtil {   
    private static final SessionFactory sessionFactory;
   
    static {
        try {
            // Cree SessionFactory a partir de hibernate.cfg.xml
            URL configFileURL = HibernateUtil.class.getResource("hibernate.cfg.xml");
            sessionFactory = new Configuration().configure(configFileURL).buildSessionFactory();          
        } catch (Throwable ex) {
            System.err.println("Echec dans l'initialisation de SessionFactory " + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
   
    public static SessionFactory getSessionFactory() {
        System.out.println("Initialisation de la fabrique de Session ...");
        return sessionFactory;
    }
   
    public static synchronized Session getSession() {
        return sessionFactory.openSession();
    }      
}

Il faut bien évidemment que tu ajoutes à tes librairies celles qu'Hibernate utilise. Tu peux les avoir sur sourceforge.
Un exemple de code de méthode pour créer un acteur par exemple serait

public static void ajouter(Acteur acteur){
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.setFlushMode(FlushMode.COMMIT);
        try{
            session.beginTransaction();
            if(acteur.getNomRole()!=null){                Role role (Role)session.createQuery("from Role as role where role.nom ?").setString(0, acteur.getNomRole()).uniqueResult();
                acteur.setNomRoleEn(role.getNomEn());
                acteur.setNomRolePt(role.getNomPt());
                role.addActeur(acteur);
            }
            session.save(acteur);
            session.getTransaction().commit();
        } catch(HibernateException e ){
            session.getTransaction().rollback();
            System.out.println("erreur dans ServiceActeur.ajouter "+ e);
        }
    }

Essaies et dis si tu te bloques!

La vie ne vaut rien mais rien ne vaut la vie!
0
Rejoignez-nous