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

Tomcat et TomEE Java Discussion :

[Hibernate] obligé de relancer Tomcat pour maj données


Sujet :

Tomcat et TomEE Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 62
    Points : 36
    Points
    36
    Par défaut [Hibernate] obligé de relancer Tomcat pour maj données
    Bonjour à tous,

    Voila, je développe un projet Struts avec Tomcat comme serveur d'application et Hibernate pour gérer la persistance et l'accès à la base de données.

    Petite ombre au tableau, lorsque j'utilise mon application, je liste mes mangas.
    Je vais dans la base de données (MySQL) à l'aide d'un plugin pour Eclipse (Quantum DB), et je supprime carrement un Manga de la table Manga.

    Lorsque je reviens dans mon appli et que j'actualise la page qui liste mes mangas, ou que je rappelle l'action à partir du menu, et bien rien n'a changé.
    Je me suis dit que cela venait peut etre du browser (navigateur) donc je le ferme, je le reouvre, reviens sur mon appli, toujours les mêmes données.

    Au final, je suis obligé de relancer Tomcat, pour qu'en revenant sur ma page qui liste les mangas, je puisse constater ma suppression passée.
    Cela va être un petit peu génant de devoir relancer TomCat à chaque fois que je fais une modification ...
    Y a t-il une gestion de cache particulière ? Une case à décocher quelque part ?
    Quel épisode ai-je raté ?


    Merci beaucoup



    [Modéré par Didier] : ajout de tag dans le titre - Les règles du forum Java

  2. #2
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    1- As tu configuré un cache de second niveau ? (je m'attends à un non)
    2- Quand et comment fais tu le chargement de tes mangas ? Stockes tu le résultat quelque part ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    1. non, je n'ai rien touché au cache
    2. non, je ne les stocke pas en session. A chaque fois que j'appelle mon action, je vais cherché dans la base de données. Il n'y a donc pas de raison que cela me raffiche les mêmes résultats.

  4. #4
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    Aurais tu un bout de code a nous montrer ou peux tu expliquer comment est architecturée ton appli ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    Architecture classique
    avec un Data Access Object qui fait les requêtes en passant par des session hibernate.
    l'action Struts récupère le résultat de cette requête et la met en forme

  6. #6
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    un bout de code ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    query est un String (la requete SQL)

    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
    List liste =null;
    		Session session = null ;
     
    		try {
    			session = HibernateSessionFactory.currentSession();
    		    liste = session.find(query);
    		    session.flush();
     
    		} catch (HibernateException he) {
    			throw new PersistanceException(he.getMessage(),he);
    		} finally {
    			try {
    				if (session!=null && session.isOpen()) HibernateSessionFactory.closeSession();				
    			} catch (HibernateException he) {
    				throw new PersistanceException(he.getMessage(),he);
    			}
    		}
     
    		return liste;

  8. #8
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    Tu as quoi dans HibernateSessionFactory.currentSession() ? (et dans closeSession)

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    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
    public static Session currentSession() throws HibernateException {
            Session session = (Session) threadLocal.get();
     
            if (session == null) {
                if (sessionFactory == null) {
                    try {
                    	if(configFile==null)
                    		sessionFactory = cfg.configure().buildSessionFactory();                	
                    	else
                    		sessionFactory = cfg.configure(configFile).buildSessionFactory();
                    }
                    catch (Exception e) {
                        System.err.println("%%%% Error Creating SessionFactory %%%%");
                        e.printStackTrace();
                    }
                }
                session = sessionFactory.openSession();
                threadLocal.set(session);
            }
     
            return session;
        }

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     public static void closeSession() throws HibernateException {
            Session session = (Session) threadLocal.get();
            threadLocal.set(null);
     
            if (session != null) {
                session.close();
            }
        }

  11. #11
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    Je ne sais pas si ca peut venir de là mais penses tu bien à la gestion des transactions ?

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    yep, j'y pense lorsque j'en ai besoin

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    Bonjour,

    je pense que c'est le session.flush() qui ne remplit pas son rôle.

    Hibernate ne voit pas qu'un objet présent en session Hibernate (cache de premier niveau) à été supprimé de la base.

    Une solution radicale est de vider ton cache de premier niveau (remplace ton session.flush() par un session.clear())

    Par contre tu perds l'avantage du cache (à toi de voir).

    Une solution préférable serait de proposer la suppression au sein de ton application.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    Belle analyse Pietra et merci pour ta participation.
    J'ai longuement réfléchi à la question aujourd'hui et j'en suis arrivé aux mêmes conclusions que toi.
    En effet, ce comportement que je jugeais anormal est tout à fait normal

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/02/2013, 17h00
  2. sql2008 en miroring: creation de snapshot pour maj base de données
    Par scazikiss dans le forum Administration
    Réponses: 0
    Dernier message: 31/01/2013, 17h20
  3. Problème pour relancer Tomcat après une première utilisation
    Par narutoe dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 05/07/2012, 17h55
  4. Obligé de relancer le serveur Syslog pour envoyer les logs.
    Par neo62matrix dans le forum Administration système
    Réponses: 5
    Dernier message: 13/09/2010, 16h08
  5. langage pour manipulation données sous MySql
    Par halina dans le forum Administration
    Réponses: 2
    Dernier message: 31/01/2005, 10h33

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