-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: [Résolu] Hibernate3 - GWT - Mauvaises données récupérées
PostPosted: Wed Sep 12, 2012 7:43 am 
Newbie

Joined: Wed Sep 12, 2012 7:40 am
Posts: 1
Bonjour,

J'ai une application GWT utilisant Hibernate3 et la librairie GXT3.0.
J'ai du côté client, un tableau m'affichant une liste de demandes contenant un bouton permettant de l'accepter.
Lorsque je clique sur ce bouton, le statut de la demande est bien mis à jour dans ma BDD (MySQL).
Cependant lorsque je rafraîchi mon tableau, les données affichées sont aléatoirement : soit les anciennes, soit les nouvelles.

Lorsque je log les données renvoyées à l'IHM:

- si je récupère mes données avec un criteria.list() de Hibernate => Les valeurs sont mauvaises
- si je crée une requête HQL => Les données sont également mauvaises
- si je crée une requête SQL par Hibernate => Les données sont aussi mauvaises
- si je crée une requête SQL sans passer par Hibernate => les données sont bonnes.

J'ai essayé pas mal de choses dont :

- vérifier que le cache de 2nd niveau et query de hibernate soit désactivé, en ajoutant à hibernate.cfg.xml:

Code:
<property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="hibernate.cache.use_query_cache">false</property>


- A chaque modification en base faire :

Code:
currentSession().flush();
currentSession().getTransaction().commit();
currentSession().clear();
currentSession().close();


- A chaque ouverture de session :

Code:
SESSION_FACTORY.evictQueries();
s.setCacheMode(CacheMode.REFRESH);
s.setFlushMode(FlushMode.ALWAYS);


(J'ai également essayé avec tous les autres modes dont CacheMode.NEVER et FlushMode.COMMIT)

pour information : voici la méthode currentSession(); :


Code:
private static final ThreadLocal SESSION = new ThreadLocal();

/**
* Session Factory which manage the sessions.
*/
private static final SessionFactory SESSION_FACTORY;

static {
    try {
         SESSION_FACTORY = new Configuration().configure().buildSessionFactory();
    } catch (HibernateException ex) {
         throw new HibernateException("Problème de configuration : " + ex.getMessage(), ex);
    }
}

public static Session currentSession() throws HibernateException {
    Session s = (Session) SESSION.get();
    if (s == null || !s.isOpen() || !s.isConnected()) {
        s = SESSION_FACTORY.openSession();
        SESSION_FACTORY.evictQueries();
        SESSION.set(s);
    }
    s.setCacheMode(CacheMode.REFRESH);
    s.setFlushMode(FlushMode.ALWAYS);
    return s;
}


- J'ai aussi essayé de faire un refresh() systématique sur toutes les données que je récupère en base.

- J'ai également essayé de récupérer une première fois mes données, de faire un evict() sur chacune d'elles. De faire un clear() puis de les récupérer de nouveau.

- Enfin j'ai essayé d'appeler mes méthodes dans un test JUnit (avec une boucle for pour le lancer 50 fois vu que les données retournées sont aléatoirement bonne ou mauvaises). Lorsque je passe par JUnit les données sont les bonnes.

Je suis à court d'idées. Et c'est assez urgent.

Si quelqu’un à une suggestion je suis preneuse !

[Résolu]
J'ai remplacé mon
Code:
Session s = (Session) SESSION.get();
if (s == null || !s.isOpen() || !s.isConnected()) {
   s = SESSION_FACTORY.openSession();
   SESSION_FACTORY.evictQueries();
   SESSION.set(s);
}

par
Code:
public static Session currentSession() throws HibernateException {
Session s = SESSION_FACTORY.getCurrentSession();
return s;


Top
 Profile  
 
 Post subject: Re: [Résolu] Hibernate3 - GWT - Mauvaises données récupérées
PostPosted: Sat Sep 15, 2012 1:02 am 
Beginner
Beginner

Joined: Fri Sep 14, 2012 10:41 am
Posts: 20
Bonjour! Premièrement, assurez-vous que les données sont sauvegardées dans la BD. Si vous utilisez MySQL, vous devez savoir que MySQL a un utilitaire workbench qui permet de voir chaque rangés de chaque tableau de votre BD. Installer MySQL Workbench est utilisez le.

Après la sauvegarde, allez voir la rangée en question dans le tableau.

Ça devrait isoler le problème. Est-ce que le problème est dans l'écriture ou la lecture?

Je m'arrête ici sans faire présumer savoir la réponse.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.