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 :

Problème sur une gestion des exceptions


Sujet :

Langage Java

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut Problème sur une gestion des exceptions
    Bonjour,

    Je suis face à un comportement très étrange de l'application sur laquelle je travaille, peut-être que vous pourrez m'éclairer....


    J'ai le code suivant, que j'ai simplifié pour les explications (oui, le problème pourrait venir ce que j'ai enlevé, mais je ne peux pas tout poster ici, ça serait illisible) :

    Une méthode "main" qui traite en boucle des données, avec une gestion d'exception de façon globale:
    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
     
    public static void main(String[] args){
    	try {
    		while (boucle)
    		{
    			//Début du traitement 
     
    			// appel d'une methode
    			maMethode(arg1, arg2);
     
    			//Suite du traitement
                            Log.info("Traitement en cours")
    		}
     
    		//Log de fin de traitement
    		Log.info("Fin du traitement")
    	}
    	catch(Exception e){
    		//Traitement de l'exception
    		//Log exception
    		Log.info("Exception")
    	}
    	finally{
    		// Log finally
    		Log.info("Finally")
    	}
    }

    Et une méthode interne appelant un service externe que je ne maîtrise pas. Ce service peut potentiellement lancer diverses exceptions.
    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
     
    private Object maMethode(Object arg1, Object arg2){
     
    	Object result = valeurParDefaut;
     
    	try{
    		//Appel d'une méthode exterieure complexe que je ne maitrise pas
    		result = methodeExterieure();
     
    	catch (final Exception e)
             {
                //  traitement de l'exception       
             }
     
    	return result;
    }

    Donc normalement, si la méthode extérieure lance une exception, le traitement dans la boucle continue et passe aux données suivantes.

    J'espère que c'est assez clair...


    Mon problème est le suivant :
    Le traitement tombe en erreur et la boucle s’arrête pour une raison inconnue.
    J'ai dans les logs les messages suivants :
    - Info : Traitement en cours
    - Warning avec stacktrace lancé par la méthode exterieure
    - Info : Finally

    Donc visiblement, la méthode extérieure plante, affiche un warning mais pas d'exception. Et le traitement s'arrête là.

    Je ne comprend absolument pas ce comportement.
    Je remercie vivement quiconque prendrait la peine se poser sur mon problème et m'éclairer de ses lumières !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut

    Le problème, c'est que je n'ai pas l'impression qu'on ait toutes les billes. Avec le code que tu as posté, même si la méthode extérieure soulève une exception, elle devrait être rattrapée par le "catch (final Exception e)" de "maMethode", et ne devrais donc en aucun cas altérer la boucle du main.

    Est-ce que dans le bloc "catch (final Exception e)" de "maMethode" tu catch une exception ? Autrement dit, est-ce que ta méthode extérieure ne fait que logger l'erreur ou est-ce qu'elle relance l'exception en plus ?

    J'ai pensé au cas ou la méthode externe force un arret du processus, mais dans ce cas, les instructions du bloc Finally ne devraient pas être exécutées.

    EDIT :
    Je pense à un truc : si jamais la méthode externe ne lance pas une exception mais un objet instancié d'une classe directement dérivée de Throwable ou de Error... Dans ce cas, le "catch(Exception)" ne catchera pas l'erreur. Par contre le bloc finally sera exécuté.
    Ce serait très moche mais ça expliquerait ton bug. Tu peux temporairement essayer de remplacer les "catch (Exception)" par "catch(Throwable)" ?
    Dernière modification par Invité ; 07/12/2012 à 13h02.

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Merci pour cette réponse.

    Oui, c'est possible qu'en résumant j'ai omis l'élément important qui cause ce problème, mais le code est trop complexe pour que je poste tout ici. (Connections à des bases de données, appel à des webservices... etc.)
    Je cherchais juste des idées de raisonnement...

    Non, "catch (final Exception e)" de "maMethode" ne fait rien d'autre que de logger l'erreur. Le but étant juste de passer à la donnée suivante si la courante pose problème.

    Pour ton EDIT, oui, c'est une bonne idée, qui a au moins le mérite d'être plausible au vu du résultat obtenu. Je vais essayer d'analyser ça!

    Merci!

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Et ben j'ai trouvé : il y a avait un NoClassDefFoundError sur un logger propre au webservice dans methodeExterieure(), visiblement mal configuré. Merci de m'avoir mise sur la voie!

    J'enrage un peu de n'avoir pas vu ça plutôt, m'enfin..

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

Discussions similaires

  1. Petite question sur la gestion des exception
    Par Wizard50 dans le forum C#
    Réponses: 1
    Dernier message: 05/05/2010, 09h17
  2. [PERL]Problème sur la gestion des sessions
    Par LostRailler dans le forum Web
    Réponses: 5
    Dernier message: 03/02/2010, 10h57
  3. [Framework] Question sur la gestion des exceptions et du @Transactional
    Par franckbis dans le forum Spring
    Réponses: 0
    Dernier message: 13/01/2010, 11h53
  4. Problème sur la gestion des utilisateurs
    Par bambi98 dans le forum Administration
    Réponses: 4
    Dernier message: 16/04/2008, 14h24
  5. Problème sur la gestion des erreurs
    Par ronio dans le forum Langage
    Réponses: 4
    Dernier message: 08/11/2006, 09h47

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