Nous allons donc commencer par configurer Hibernate (quand on fait de la programmation Java on configure beaucoup, je ne connais pas un autre langage avec autant de fichiers de configuration ! ).
Sur Hibernate.org, téléchargez la dernière version, la 3.0. Dans notre dossier « projects » que nous avons créé dans notre installation de NetBeans nous allons faire un nouveau dossier pour y stocker toutes nos librairies. Faites donc le dossier « netbeans/projects/lib/ » et mettez y toutes les librairies utiles pour faire fonctionner Hibernate. Vous les trouverez à la racine et dans le dossier « lib » de l'archive Hibernate. Nous allons prendre seulement ce dont nous avons besoin :
hibernate.jar, tous les commons-*.jar, le jdbc2.0.jar, antlr, asm, cglib, dom4j, ehcache, jta, log4j
Ensuite, dans votre projet, clic droit sur le dossier « Librairies », puis « add... » puis cliquez sur « Manage librairies ». Je vous déconseille d'être bordélique à ce niveau là, mieux vaut bien ranger ses librairies dès le départ. Cliquez sur « new librairie » et faites en une pour Hibernate, ensuite dans « classpath » cliquez sur « add jar's » et mettez :
hibernate, antlr, asm, cglib, dom4j, ehcache
Faites de même avec Commons en mettant dedans les commons*.jar, puis une autre pour Log4j, une autre pour JTA ...etc...
A la fin vous devriez finir avec, au niveau de vos libraires dans la colonne de gauche, Hibernate, Log4j, JTA, Commons. Ajoutez par précautions une librairie avec le driver de votre base de données (ici j'ai fait une librairie MySQL et le JDBC2.0.jar).
Voilà, fermez la fenêtre de gestion des JAR's, vous vous retrouvez dans « add ... », choisissez les packages que vous avez créé et cliquez sur « add library », NetBeans va les ajouter à votre projet et elles vont apparaître sous leur dossier.
Ouf, voilà, c'est fait ! Vous avez rien compris ? Relisez !
Maintenant nous allons nous occuper de la configuration de Hibernate. Faites un clic droit sur « source packages » et puis « new -> xml document ». Nommez votre fichier « hibernate.cfg » (NetBeans va rajouter l'extension automatiquement ne la mettez pas) et copier/coller le code suivant dedans :
<?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="connection.datasource"> java:comp/env/jdbc/mabase </property> <property name="show_sql">true</property> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <!Mapping files> <mapping resource="User.hbm.xml"/> </session-factory> </hibernate-configuration>
Ce que nous avons là est un fichier de configuration assez minimal, il dit à Hibernate d'utiliser notre Datasource, d'afficher les messages SQL, d'utiliser le dialecte MySQL (changez cela en fonction de votre BDD, consultez la doc de Hibernate pour connaître le dialecte qui correspond à votre base). Enfin nous avons créé un mapping vers une ressource « user » qui va nous servir à utiliser notre table Users de la dernière fois. En effet, dans Hibernate vous devez définir un fichier de configuration par objet, celui utilisant des POJO, des beans tout simples quoi, pour mapper les données avec la base. Hibernate se charge de remplir ces objets avec vos données, ou bien de les envoyer dans la base.
Voyons cela.
Avec la même méthode que pour le fichier de configuration de Hibernate nous allons faire celui de notre objet « User », créez le fichier « User.hbm.xml » et faites en sorte qu'il ressemble à cela :
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.bourzeix.hibernate.User" table="users"> <!l'ID de la table.> <id name="id" type="int" column="id" unsaved-value="0"> <generator class="identity"/> </id> <!le nom> <property name="nom"> <column name="nom" length="55" not-null="true"/> </property> <!le prenom> <property name="prenom"> <column name="prenom" length="55" not-null="true"/> </property> </class> </hibernate-mapping>
Ce fichier sert à faire le lien entre votre POJO et Hibernate. Ici on dit quel est le Bean (« com.bourzeix.hibernate.User ») et à quelle table il se rapporte, puis nous définissons ses colonnes pour qu'elles soient prise en charge par les Getter et Setter du Bean, nous avons donc ici « ID » qui est l'identifiant (d'où le generator class identity) et le « NOM » et le « PRENOM ».
Nous allons maintenant créer notre classe « User ». Faites « file -> new javaBean comp. » pour créer une classe de type Bean, dans par exemple « com.bourzeix.hibernate » et appelez la « User ». Dans la vue projet, dépliez votre classe et faites clic-droit sur « bean pattern » puis « add property », là ajoutez :
private int id; private String prenom; private String nom;
Cela va générer directement le code pour le Bean qui doit ressembler à cela ensuite :
/* * User.java * * Created on 22 mai 2005, 13:45 */ package com.bourzeix.hibernate; import java.io.Serializable; /** * @author Stéphane Bourzeix */ public class User extends Object implements Serializable { private int id; private String prenom; private String nom; public User() { } public int getId(){ return id; } public void setId(int value){ id = value; } public String getPrenom(){ return prenom; } public void setPrenom(String value){ prenom = value; } public String getNom(){ return nom; } public void setNom(String value){ nom = value; } }
Et voilà ! Toutes les déclarations et la configuration de Hibernate est complète, maintenant un petit « Compile » et un petit « Run » et votre projet doit démarrer sans aucun problème !
La prochaine fois nous ferons enfin une servlet qui utilisera tout ce que nous avons fait jusque là, et qui ira créer des enregistrements et les lire dans la base de données grâce à notre Bean « User » et à Hibernate !
1 De Ludo -
Very cool - tres bon- weblog sur NetBeans...
Bravo,
Ludo
Sun App server 8 et 9 et NetBeans J2EE lead.
2 De Da Bourz Blog -
NetBeans, Tomcat, Struts et Hibernate : Une application Web
Bon, nous allons partir du principe que vous avez une installation qui fonctionne pour NetBeans et MySQL. Ces programmes sont disponibles pour beaucoup trop de plate-formes (Linux, Windows, MacOSX ...) pour détailler chaque setup, reportez vous à la...
3 De Da Bourz -
Merci, merci, merci !
J'ai rajouter des trackbacks entre les articles pour ceux qui veulent suivre le fil en commençant par le mauvais bout !!
4 De Da Bourz Blog -
NetBeans, Une application Web : Hibernate et Servlet (partie III)
Après le premier épisode, la création de notre projet Web, le deuxième avec la configuration d'Hibernate et la déclaration de notre objet "Utilisateur", nous allons maintenant passer aux choses sérieuses et créer une servlet pour se connecter à notre BDD.
5 De dub -
bravo. Tutorial complet. avec eclipse ou lieu de netbean j ai reussi presque du premier coup à faire tout fonctionner !
Juste une petite remarque : avec hibernate3 il faut rajourter comme librairie ejb3-persistence.jar sinon calss not found quand il cree son premier objet avec une clé primaire
6 De DQD -
Salut tout le monde, si quelqu'un peut m'aider?????
Voilà ce que j'ai comme erreur (hic hic) quand je teste "localhost:8084/test/tests...
========================================
type Rapport d'exception
message
description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.
exception
javax.servlet.ServletException: L'exécution de la servlet a lancé une exception
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
cause mère
java.lang.ExceptionInInitializerError
com.bourzeix.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:20)
com.bourzeix.hibernate.TestServlet.processRequest(TestServlet.java:34)
com.bourzeix.hibernate.TestServlet.doGet(TestServlet.java:76)
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:362)
note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/5.5.7.
--------------------------------------------------------------------------------
7 De Da Bourz -
Hum , cela ne serait il pas un probleme avec LogForJ ? essaye de commenter la ligne :
private static Log log = LogFactory.getLog(HibernateUtil.class);
8 De dqd -
Merci DA Bourz pour la réponse mais .... j'ai tjrs la même erreur (hic)
9 De Da Bourz -
Et en mode Debig, en metant un point d'arret au debut de HibernateUtil, ça donne quoi ? A quel endroit il pete ?
10 De BADRI -
Moi aussi g rencontré la meme chose posté par "DQD"
si j'essay de localiser l'exception, elle est levé au niveau de cette instruction
sessionFactory = new Configuration().configure().buildSessionFactory();
et merci infiniment pour ce bloc
11 De BADRI -
La bogue c'était dans le fichier de configuration au niveau de commentaire ki été barré : <! Mapping files >
Excelent l'article est tt a fait bien redigé é le prgramme tourne sans faute ( c'était ma faute :D ) , merci et bonne continuation
12 De Scavenger -
Mouais c'est bizarre ces commentaires barrés.... Parce que du coup, mes copiers-collers (ah ben oui je veux pas m'y faire reprendre !), et bien ils ne marchent plus !!
13 De Da Bourz -
Oui, cela doit venir de ma feuille de style, ou de l'interprétation des tags de mon post, pas le temps de regarder ...
14 De kabylo -
j'ai un problem consernant hibernate :
exception
javax.servlet.ServletException: L'exécution de la servlet a lancé une exception
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
j'ai fait des modif dans hibernate.cfg.xml "<! mapping file" mais en vain
SOS !!!
15 De Scavenger -
Bon alors pour ceux qui seraient tentés de faire ça avec netBeans 5.0 et Hibernate 3.1.2 :
- ils ne doivent pas utiliser le jar "common-logging.1.0.4.jar" fourni dans le ZIP d'Hibernate, mais celui fourni par Netbeans pour son serveur Tomcat 5.5.9 ("commons-logging-api.jar"), tout en supprimant le jar "commons-logging.jar" de la librairie JSF 1.1 ;
- ils ne doivent pas non plus utiliser le jar "commons-collection.jar" du ZIP d'Hibernate, en faveur de celui offert par la même librairie JSF 1.1.
Ca leur évitera quelques prises de têtes superflues...
16 De Manu -
Je découvre les joies d'hibernate avec mysql...
merci donc pour ce tutorial ^^
Par contre, petit souci, pour ceux qui comme moi, en on marre de se retrouver avec la sempiternelle erreur "org.hibernate.HibernateException: Could not find datasource", il suffit de savoir que dans le fichier hibernate.cfg.xml, "connection.datasource" s'écrit en fait "connection.DataSource"
Bizarrement, après, ça marche bcp mieux ^^
17 De Manu -
encore moi ^^
J'ai désespérement voulu appliquer ce tutorial à mon "cas" (donc un standalone java, pas de tomcat...) et impossible d'échapper à "java.lang.UnsupportedOperationException: The user must supply a JDBC connection"
Il a jamais voulu du "connection.DataSource" mais ça fonctionne sans souci en passant par connection.driver_class + connection.url + connection.username + connection.password
j'imagine que la solution proposée dans ce tutorial fonctionne grace à Tomcat (et ses fichiers de conf), j'ai bon ? ^^
18 De hadzmr -
bonsoir, je suis en train de configurer un appli contenant des classes hibernate (
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;)
et j'ai rajouter les jar que vous avez signalé, mais il parait que ces classes n'existent pas dans ces jars.
please SOS, comment faire
Merci d'avance
19 De YAS -
SALUT tout le monde,
je suis un débutant dans la programation application web, j'ai une mission de faire une application web en utilisant eclipse tomcat et hibernate et jsf, il ya quelqu'un de m'orienter vers des documents ou bien un petit exemple qui utilise ces outils de j2EE.
je remercie tout le monde.
j'attend tes réponses.
yas