-->
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.  [ 4 posts ] 
Author Message
 Post subject: Problème de montée en charge avec MySQL 5
PostPosted: Fri Sep 23, 2005 12:26 pm 
Newbie

Joined: Fri Sep 23, 2005 12:13 pm
Posts: 4
Location: Lille - France
Hibernate version: 3
MySQL 5.0.12
Driver jdbc 3.1.10


Bonjour,

Nous utilisons hibernate 3 pour un projet Java, avec Tomcat, Struts et MySQL 5.0.12 (qui est en beta). On utilise un pool dbcp de tomcat pour hibernate.

Lors des tests de montée en charge nous avons détecté un problème. Pour charger un objet de la base on utilise session.get(). Cette méthode est supposée ne renvoyer null que si la ligne n'existe pas dans la base. Or de temps en temps session.get() nous retourne null alors que l'objet existe en base. On est sûr qu'il exisye puisque tous les threads des tests de montée en charge appelle sesson.get() avec le même id et la plupart arrivent à charger l'objet.

Si on fait un boucle sur le chargement jusqu'à ce qu'il arrive à charger la ligne ça passe, mais on trouve ça bizarre quand même...

Si c'était MySQL qui n'arrivait plus à suivre je pense qu'on aurait des exceptions du type "too many connections", "try restarting transaction", "pool exhausted", etc. On a aussi des exceptions de ce type mais c'est "normal".

Donc ma question: est-ce que session.get() ne devrait pas retourner null si et seulement si l'objet n'existe pas dans la base ?

Pensez-vous que le problème vienne pluôt du fait que MySQL 5 est encore en beta, ou plutôt d'hibernate ou de notre mapping ?

Merci d'avance.


Top
 Profile  
 
 Post subject: Re: Problème de montée en charge avec MySQL 5
PostPosted: Fri Sep 23, 2005 4:45 pm 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
remi wrote:
Donc ma question: est-ce que session.get() ne devrait pas retourner null si et seulement si l'objet n'existe pas dans la base ?

Cela me semble être l'hypothèse de travail la plus raisonnable.

Une question: travaillez-vous avec des transactions? Avec quel niveau d'isolation? Comment fonctionne MySQL 5.0.12 dans ce domaine?

J'aurais tendance à penser que les réponses à vos questions sont à chercher par là plutôt que dans Hibernate.

Il serait bien sûr intéressant de tracer ce que fait Hibernate et/ou la BD, mais il est à craindre que cela influencerait trop les opérations en cours.

Cela dit, je ne suis pas un spécialiste de BD et mes commentaires sont donc à considérer avec prudence :-).

Erik


Top
 Profile  
 
 Post subject: afficher SQL
PostPosted: Fri Sep 23, 2005 7:46 pm 
Newbie

Joined: Fri Sep 23, 2005 7:39 pm
Posts: 7
Pouvez-vous poster le code qui vous permet de simuler cette montée en charge.
Outre l'intérêt d'avoir un exemple d'utilisation d'hibernate, cela nous permettra peut-être aussi d'avoir des idées.
Merci.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 26, 2005 5:19 am 
Newbie

Joined: Fri Sep 23, 2005 12:13 pm
Posts: 4
Location: Lille - France
Oui nous travaillons avec des transactions. Le niveau par défaut dans MySQL est SERIALIZATION mais on obtient la même chose avec READ COMMITTED.


un extrait du code :

Code:
try {
session = HibernateUtil.currentSession();
tx = session.beginTransaction();
Topic topic = (Topic) session.get(Topic.class, topicId);
if (topic==null)
{
....
}
else
{

//modification du topic
....
}

tx.commit();
}
catch (HibernateException hex)
            {
            if (tx != null)
                    tx.rollback();
            }
catch (Exception ex)
            {
                if (tx != null)
                    tx.rollback();
            }
finally {
                if (session != null)
                    HibernateUtil.closeSession();
           }



Petite précision comique : même avec une grosse montée en charge ça fonctionne très bien avec un pool de 1 connexion...

Pour les tests de montée en charge on utilise Jmeter.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 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.