IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Pb de rafraichissement des pages


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 309
    Par défaut Pb de rafraichissement des pages
    J'utilise Hibernate pour accéder à mes données Oracle et le cache de niveau 2 pour les données du référentiel. J'utilise le système de version pour gérer la concurrence d'accès. J'ai un problème de rafraichissement des pages. Un utilisateur sauvegarde des données et la page n'est pas rafraichie correctement. Exemple :
    Utilisateur A sur poste A avec login "ges".
    Utilisateur B sur poste B avec login "ges". (poste n'ayant jamais accédé à l'application)
    L'utilisateur A modifie la Mobilite d'identifiant 44. (données bien modifiées en base) Il va ensuite sur la recherche des Mobilite et cherche la 44. L'affichage lui donne parfois l'ancienne version.
    Même chose pour B où il ne peut pas y avoir de cahce navigateur car il n'a jamais accédé à l'application.

    hibernate.cfg.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <property name="hibernate.connection.autocommit">true</property> 
    <property name="hibernate.cglib.use_reflection_optimizer">false</property>
     
    <property name="cache.use_second_level_cache">true</property>
    <property name="cache.provider_class">org.hibernate.cache.OSCacheProvider</property>
    <property name="cache.use_query_cache">false</property>
    ...
    <class-cache class="fr.cg92.stase.business.profil.Profil" usage="read-write" />
    HibernateSessionFactory.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    private static final ThreadLocal threadLocal = new ThreadLocal();
    private static final Configuration cfg = new Configuration();
    private static SessionFactory sessionFactory;
     
    public static Session currentSession() throws HibernateException {
    	Session session = (Session) threadLocal.get();
     
    	if (session == null) {
    		if (sessionFactory == null) {
    			try {
    				// cfg.configure(CONFIG_FILE_LOCATION);
    				cfg.configure();
    				sessionFactory = cfg.buildSessionFactory();
    			} catch (Exception e) {
    				System.err.println("%%%% Error Creating SessionFactory %%%%");
    				e.printStackTrace();
    			}
    		}
    		session = sessionFactory.openSession();
    		threadLocal.set(session);
    	}
    	return session;
    }
    Enregistrement d'une Mobilite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public static void store(Mobilite mobilite) throws StaleObjectStateException, Exception {
    	Session session = HibernateSessionFactory.currentSession();
    	try {
    		session.beginTransaction();
    		session.saveOrUpdate(mobilite);
    		session.getTransaction().commit();
    		session.clear();
    	} catch (StaleObjectStateException sose) {
    		log.error("Mobilites - store ", sose);
    		session.getTransaction().rollback();
    		session.clear();
    		throw new StaleObjectStateException("Mobilites - store ", sose);
    	} catch (Exception e) {
    		log.error("Mobilites - store ", e);
    		session.getTransaction().rollback();
    		session.clear();
    		throw new Exception("Mobilites - store ", e);
    	}
    }
    Avec le "session.clear();" il y a moins de pb mais il y en a quand même. J'ai essayé de le remplacer par "session.flush();" ou "session.refresh(mobilite);" mais ce n'est pas mieux.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Par défaut
    ferme ta session à la fin de ta transaction. Et ouvre une nouvelle session au début

  3. #3
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Oui je serais aussi d'avis de fermer ta session après ton traitement au lieu de faire des session.clear() tout le temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public static void store(Mobilite mobilite) throws StaleObjectStateException, Exception {
    	Session session = HibernateSessionFactory.currentSession();
    	try {
    		session.beginTransaction();
    		session.saveOrUpdate(mobilite);
    		session.getTransaction().commit();
    	} catch (StaleObjectStateException sose) {
    		log.error("Mobilites - store ", sose);
    		session.getTransaction().rollback();
    		throw new StaleObjectStateException("Mobilites - store ", sose);
    	} catch (Exception e) {
    		log.error("Mobilites - store ", e);
    		session.getTransaction().rollback();
    		throw new Exception("Mobilites - store ", e);
    	} finally{
                  session.close();
                 }
    }

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 309
    Par défaut
    J'ai le pb suivant avec le close :
    20 mars 15:26:47 ERROR [http-8080-Processor25] org.hibernate.LazyInitializationException - could not initialize proxy - the owning Session was closed
    org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:56)
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:98)
    at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:158)
    Avec HibernateSessionFactory.closeSession(); ça passe la première fois mais le deuxième enregistrement (à la suite) ça fait la même erreur. Et les données sont enregistrées. aapamment c'est lors du rechargement de la page.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);
        if (session != null) {
            session.close();
        }
    }

  5. #5
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    C'est pêut-etre parce que tu ne l'a réouvre pas.

    Essaye HibernateSessionFactory.getSession au lieu de HibernateSessionFactory.getCurrentSession

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 309
    Par défaut
    "cfg.buildSessionFactory();" ne la recrée pas ?
    Dans l'exemple que j'ai il n'y a pas de getSession.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 09/04/2010, 10h29
  2. rafraichissement des pages en php
    Par Stéph utilisateur d'acces dans le forum Débuter
    Réponses: 4
    Dernier message: 02/09/2009, 16h48
  3. [Wamp] rafraichissement des pages en local
    Par errog dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 09/08/2008, 22h40
  4. Rafraichissement des pages consultées
    Par al1_24 dans le forum Internet
    Réponses: 10
    Dernier message: 11/06/2007, 13h25
  5. [AJAX] Rafraichissement des données sur la page
    Par TreizeSegments dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/05/2006, 18h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo