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

Langage Java Discussion :

Exception impossible à catcher


Sujet :

Langage 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 Exception impossible à catcher
    Je n'arrive pas à catcher une exception (StaleObjectStateException générée lors d'un accès concurrent par Hibernate). L'exception générée par Mobilites.store n'est pas du tout catchée, celle générée par Utilisateurs.store est catchée comme Exception et pas StaleObjectStateException.
    Classe action de Mobilite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
    ...
    try {
    ...
      // enregistrement de la mobilite dans la BDD
      Mobilites.store(mobilite);
      succes.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("mobilite.succes.record"));
    } catch (Exception e) {
      log.error("MobSaiAction - sauvegarde " + e.getMessage(), e);
      errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("mobilite.error.record"));
    }
    Mobilites.store
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static void store(Mobilite mobilite) throws Exception {
    	Session session = HibernateSessionFactory.currentSession();
    	try {
    		session.beginTransaction();
    		session.saveOrUpdate(mobilite);
    		session.getTransaction().commit();
    		session.clear();
    	} catch (Exception e) {
    		log.error("Mobilites - store ", e);
    		session.getTransaction().rollback();
    		throw new Exception("Mobilites - store ", e);
    	}
    }
    Classe action de Utilisateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
    try {
    ...
    	Utilisateurs.store(user);
    } catch (StaleObjectStateException sose) {
    	log.error("UtilisateurRecordAction - " + sose.getMessage(), sose);
    	errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("user.error.record.concurrence.acces"));
    } catch (Exception fe) {
    	log.error("UtilisateurRecordAction - " + fe.getMessage(), fe);
    	errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("user.error.record"));
    }
    Utilisateurs.store
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static void store(Utilisateur utilisateur) throws Exception {
    	Session session = HibernateSessionFactory.currentSession();
    	try {
    		session.beginTransaction();
    		session.saveOrUpdate(utilisateur);
    		session.getTransaction().commit();
    		session.clear();
    	} catch (Exception e) {
    		log.error("Utilisateurs - store ", e);
    		session.getTransaction().rollback();
    		throw new Exception("Utilisateurs - store ", e);
    	}
    }

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Christophe P.
    L'exception générée par Mobilites.store n'est pas du tout catchée
    Ca c'est louche...

    celle générée par Utilisateurs.store est catchée comme Exception et pas StaleObjectStateException
    Ca c'est normal, vu que dans Utilisateurs.store() tu as créé puis envoyé une "new Exception()" et pas une "new StaleObjectStateException()"
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    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
    Citation Envoyé par pseudocode
    Ca c'est louche...
    Effectivement, si j'avais un peu plus de cheveux je me les arracherai !
    Citation Envoyé par pseudocode
    Ca c'est normal, vu que dans Utilisateurs.store() tu as créé puis envoyé une "new Exception()" et pas une "new StaleObjectStateException()"
    Merci. Qu'est-ce que je fais comme conneries !

    D'après ta signature tu as compris comment on joue au sirop, tu connais un site web qui en donne les règles ? (au moins les simplifiées)

  4. #4
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Trés louche.

    Mais peux-tu préciser ce qui se passe exactement au niveau de tes traces quand tu dis "elle n'est pas cacthée".

    A+

  5. #5
    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
    Je vois l'exception dans la trace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    17 janv. 11:27:21 ERROR [http-8080-Processor25] org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
    org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [fr.monappli.business.mobilite.Mobilite#23]
    	at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1635)
    	at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2208)
    mais ce qui s'affiche c'est ma page d'erreur et pas ma page avec le message "mobilite.error.record".

    Pour les 2 (Mobilite et Utilisateur) je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!errors.isEmpty()) {
    	this.saveErrors(request, errors);
    	return (mapping.getInputForward());
    }

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Hum... tu es sur que ta trace provient bien de la methode Mobilites.store() ? Ca m'etonnerait que Java decide de ne pas thrower l'exception, ou de ne pas la catcher !


    Sinon pour le sirop, j'y joue plus trop. En ce moment, je joue au Pelican. C'est hyper facile, y'en à pour 2 minutes à comprendre les règles:

    Tout d'abord, il faut 120 ou 130 artichauts classés du plus lisse au plus râpeux. Ensuite on fait un tour de troc, où on peut fourguer 17% de ses artichauts : pour cela, il faut racheter la banque. On double les points de son voisin moins la moitié de ses artichauts. On change de tour après une donne asymétrique. Quand le voisin de gauche rachète la banque à la moitié de sa valeur il doit donner 17% des artichauts qu'il a gagné pendant la dernière donne. Mais si on fait artichette, on colle le banquier a moins 6 et on peut tenter la rétournelle et faire les annonces : artichette, tichette de 2, tichette de 3, tichette de 21, michette, chiédec, mique, squaladabarane, résidé et rétournelle.

    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    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
    Citation Envoyé par pseudocode
    Hum... tu es sur que ta trace provient bien de la methode Mobilites.store() ? Ca m'etonnerait que Java decide de ne pas thrower l'exception, ou de ne pas la catcher !
    oui :
    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
    17 janv. 11:27:21 ERROR [http-8080-Processor25] org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
    org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [fr.monappli.business.mobilite.Mobilite#23]
    	at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1635)
    	at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2208)
    	at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2118)
    	at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2374)
    	at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:91)
    	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
    	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
    	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
    	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
    	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
    	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
    	at fr.monappli.business.mobilite.Mobilites.store(Mobilites.java:374)
    	at fr.monappli.action.MobSaiAction.execute(MobSaiAction.java:273)

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

Discussions similaires

  1. Exception SQL impossible à catcher
    Par stof dans le forum Hibernate
    Réponses: 5
    Dernier message: 16/11/2011, 12h23
  2. Exception : Impossible de créer le composant ActiveX
    Par vérokit dans le forum VB.NET
    Réponses: 1
    Dernier message: 28/02/2008, 16h32
  3. [VB.NET] Exception impossible à repérer
    Par smudge dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/08/2006, 18h36
  4. [Exception] Comment catcher une runtime exception ?
    Par bulbo dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 16/06/2005, 09h46
  5. Réponses: 3
    Dernier message: 01/11/2002, 14h30

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