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

Flex Discussion :

Utiliser ses propres Exceptions avec Blazeds-Spring-Hibernate


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut Utiliser ses propres Exceptions avec Blazeds-Spring-Hibernate
    Bonjour

    j'ai une application utilisant Blazeds, Spring et Hibernate côté serveur
    je voudrais catcher les exceptions de Hibernate et envoyer mes propres exceptions et les récupérer côté client pour pouvoir gérer les exceptions mais le problème c'est que Spring catche mes exceptions et envoie les siens du coup je ne peux plus récupérer mes exceptions.

    Par exemple quand un utilisateur s'inscrit à l'application, à la création du nouveau compte utilisateur Hibernate va envoyer une NonUniqueObjectException que je récupère et j'envoie mon exception

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        @Transactional
        public void createUser(UtilisateurVO user, int droit) throws Exception      {
            try {
                utilisateurDAO.createUser(user);
                moduleDAO.setPrivileges(user, droit);
            }
            catch(NonUniqueObjectException e)
            { 
                    e.printStackTrace();
                    throw new RuntimeException("login non unique");
            }
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            private function createUserFault(e:FaultEvent):void
            {
                button.enabled = true;
                ro.getOperation("createUser").removeEventListener(ResultEvent.RESULT, createUserResult);
                ro.getOperation("createUser").removeEventListener(FaultEvent.FAULT, createUserFault);
                  var errorMessage:ErrorMessage = e.message as ErrorMessage;
     
    switch(errorMessage.rootCause.message)
    {
            case 'login non unique': Alert.show("le login que vous avez choisis est reservé, veuillez choisir un autre login"); break;
    }
    trace(errorMessage.rootCause.message);    
    trace(errorMessage.rootCause.rootCause.message);
    le message que je voie à la console n'est pas le message de mon exception mais c'est celui de l'exception de Spring

    JPA transaction unexpectedly rolled back (maybe marked rollback-only after a failed operation); nested exception is javax.persistence.RollbackException: Error while commiting the transaction
    Error while commiting the transaction
    pour l'intégration de Spring et Blazeds j'utilise la technique su SpringFactory décrite dans ce tutorial : http://fponchel.developpez.com/tutor...lazeds-spring/

    Voilà je crois que le problème est clair, quelqu'un aurait une solution ?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Par défaut
    Bonjour,

    Qu'as tu dans ta stacktrace côté serveur ?

    Autre remarque en regardant ton code :
    - Tu devrais retourner une Exception et non une RuntimeException (sinon le throws Exception dans la signature de ta méthode ne sert à rien) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    throw new  RuntimeException("login non unique");
             }
    - Tu devrais ajouter ceci dans l'annotation de ta méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @Transactional(rollbackFor=Exception.class)
    Cela te permettra de faire un rollback lorsqu'une exception est levée.

  3. #3
    Membre averti
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut
    - Tu devrais retourner une Exception et non une RuntimeException (sinon le throws Exception dans la signature de ta méthode ne sert à rien) :
    j'ai essayé avec Exception et RuntimeException


    Spring catche toutes les exceptions et fait RollBack sans que je lui demande
    quand il ya une exception elle est envoyée au client danc il ya pas de printStackTracer dans la console

    sinon je pense pas que j'ai une erreur dans le code, mais je pense q'il ya quelque chose qu'il faut changer dans Blazeds ou Spring pour que blazeds envoie mon exception au client et pas celle de Spring

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Par défaut
    Mais tu devrais avoir une stacktrace plus compléte côté serveur étant donné que tu fais un e.printStackTrace(); dans ton code.

  5. #5
    Membre averti
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut
    voila

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    [BlazeDS]14:32:53.109 [DEBUG] [Endpoint.AMF] Serializing AMF/HTTP response
    Version: 3
      (Message #0 targetURI=/2/onStatus, responseURI=)
        (Typed Object #0 'flex.messaging.messages.ErrorMessage')
          headers = (Object #1)
            DSMPIO = (Typed Object #2 'flex.messaging.messages.MessagePerformanceInfo')
              serverPreAdapterTime = 0.0
              serverPreAdapterExternalTime = 0.0
              infoType = null
              sendTime = 1.270816372921E12
              recordMessageTimes = false
              serverPrePushTime = 0.0
              pushedFlag = false
              serverPostAdapterExternalTime = 0.0
              receiveTime = 0.0
              messageSize = 0.0
              overheadTime = 0.0
              recordMessageSizes = false
              serverPostAdapterTime = 0.0
          rootCause = (Typed Object #3 'org.springframework.transaction.UnexpectedRollbackException')
            rootCause = (Typed Object #4 'javax.persistence.RollbackException')
              message = "Error while commiting the transaction"
              localizedMessage = "Error while commiting the transaction"
              cause = (Typed Object #5 'org.hibernate.NonUniqueObjectException')
                message = "a different object with the same identifier value was already associated with the session: [vo.UtilisateurModuleVO#admin1]"
                localizedMessage = "a different object with the same identifier value was already associated with the session: [vo.UtilisateurModuleVO#admin1]"
                cause = null
                throwableCount = 1
                throwables = (Array #6)
                  [0] = (Ref #5)
                identifier = (Typed Object #7 'vo.IdUtilisateurModuleVO')
                  idModule = 1
                  login = "admin"
                messages = (Array #8)
                  [0] = "a different object with the same identifier value was already associated with the session"
                entityName = "vo.UtilisateurModuleVO"
            message = "JPA transaction unexpectedly rolled back (maybe marked rollback-only after a failed operation); nested exception is javax.persistence.RollbackException: Error while commiting the transaction"
            localizedMessage = "JPA transaction unexpectedly rolled back (maybe marked rollback-only after a failed operation); nested exception is javax.persistence.RollbackException: Error while commiting the transaction"
            cause = (Ref #4)
            mostSpecificCause = (Ref #4)
          body = null
          correlationId = "ED2EBFBF-257A-369B-511A-E28EF668D85B"
          faultDetail = null
          faultString = "org.springframework.transaction.UnexpectedRollbackException : JPA transaction unexpectedly rolled back (maybe marked rollback-only after a failed operation); nested exception is javax.persistence.RollbackException: Error while commiting the transaction"
          clientId = "601F0B73-1E08-155C-7E3E-120233E25484"
          timeToLive = 0.0
          destination = "utilisateurDest"
          timestamp = 1.270816372921E12
          extendedData = null
          faultCode = "Server.Processing"
          messageId = "601F0D3B-A90F-E341-5190-290200417E3C"
    il n'ya meme pas de printstacktracer
    et coté client c'est org.springframework.transaction.UnexpectedRollbackExceptio qui est recuperée


    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
    	@Transactional
    	public void createUser(UtilisateurVO user, int droit) throws Exception {
    		try {
    			utilisateurDAO.createUser(user);
    			moduleDAO.setPrivileges(user, droit);
    		}
    		catch(NonUniqueObjectException e)
    		{ 
    				e.printStackTrace();
    				throw new Exception("login non unique");
    		}
    		catch(Exception e2) {
    			e2.printStackTrace();
    			throw new Exception("login non unique");
    		}
    	}

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Par défaut
    Je sais que j'insiste mais cela nous permettras de t'aider plus facilement et plus rapidement.
    Côté serveur tu as bien un serveur d'application comme tomcat et compagnie. Dans les logs de celui ci tu devrais trouver ta fameuse stacktrace que je te demande depuis tout à l'heure. Car lorsque tu fais un printStackTrace, celle-ci est affiché dans ta sortie standard qui est dans ton cas les logs de ton serveur d'application.

    As tu compris de quoi je voulais parler ?

Discussions similaires

  1. Utiliser ses propres classes avec Zend Framework
    Par Adinsx dans le forum Zend Framework
    Réponses: 3
    Dernier message: 28/02/2008, 20h01
  2. Creer ses propres exceptions ?
    Par Seth77 dans le forum C#
    Réponses: 4
    Dernier message: 05/05/2007, 17h36
  3. Lancer ses propres exceptions
    Par mister3957 dans le forum C++
    Réponses: 13
    Dernier message: 03/03/2007, 12h55
  4. [JNI] creer ses propres exceptions
    Par Batou dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 23/08/2006, 04h01
  5. Créer ses propres exceptions
    Par Neilos dans le forum C++Builder
    Réponses: 10
    Dernier message: 13/06/2006, 18h44

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