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 :

Session flush et multithread


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut Session flush et multithread
    J'utilise Hibernate dans une application Java2E. A partir d'un fichier XML contenant "n" enregistrements, des lignes sont insérées en base.
    La lecture du fichier est réalisé via un parseur SAX et les enregistrements sont traités l'un après l'autre de manière séquentielle, jusqu'à là pas de problème.
    Je tente de paralléliser les traitements afin de pouvoir traiter "simultanément" plusieurs enregistrements, chacun dans un thread propre. Pour cela, la session Hibernate est attaché au thread via un ThreadLocal. De manière aléatoire, l'exception suivante est produite lors de l'appel à Session.flush() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
    ...
    Caused by: java.sql.BatchUpdateException: ORA-00001: violation de contrainte unique (XX.YY)
    Je ne vois pas d'où vient l'exception car lorsque je la catche, je parcours le cache Hibernate (la collection renvoyée par Session.getStatistics().getEntityKeys()), et je ne détecte aucun doublon
    Quelqu'un aurait-il une idée sur ce qui se passe ? Merci pour vos réponses

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Je pense qu'il serait bon de montrer les classes concernées et le mapping.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Le mapping de la clef primaire est le même pour tous les objets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <hibernate-mapping>
      <class name="xx.yy" table="XX.YY">
     
      <composite-id>
            <key-property name="a" column="A" type="java.lang.String" length="50"/>
            <key-property name="b" column="B" type="java.util.Integer" length="2" />
      </composite-id>
    Le code de la méthode flush dans le Dao est le suivant :
    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 class DaoImpl extends HibernateDaoSupport
     
    	private static final ThreadLocal<Session> session = new ThreadLocal<Session>();
     
    	public void flush() {
    		getSession().flush();
    	}
     
    	public Session getSession() {
    		Session s = (Session) session.get();
     
    		if (s == null || !s.isOpen()) {
    			s = getSessionFactory().openSession();
    			session.set(s);	
    		} 
     
    		return s;
    	}

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/12/2012, 07h47
  2. Don't flush the Session after an exception occurs
    Par yohan_al dans le forum Hibernate
    Réponses: 1
    Dernier message: 31/03/2009, 15h57
  3. Réponses: 6
    Dernier message: 15/08/2008, 12h09
  4. [AJAX] multithreads et sessions PHP ne font pas bon ménage !
    Par Tanhys dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 29/10/2006, 15h47
  5. Multithreading sous HP Ux 11
    Par pykoon dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 18/10/2002, 23h36

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