voilemiss
Messages postés46Date d'inscriptionmardi 5 juin 2007StatutMembreDernière intervention16 janvier 2010
-
23 mars 2009 à 14:31
demokosamelde
Messages postés5Date d'inscriptionmardi 14 novembre 2000StatutMembreDerniè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 .
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
demokosamelde
Messages postés5Date d'inscriptionmardi 14 novembre 2000StatutMembreDerniè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
/*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);
}
/*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;
}
<!--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
*/
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);
}
}