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

Java Discussion :

[Problème] Gestion d'erreur avec MINA


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 24
    Points : 11
    Points
    11
    Par défaut [Problème] Gestion d'erreur avec MINA
    Bonjour à tous, mon problème est urgent, je passe plus de 1h à déboguer chaque nouvelle ligne de code (JOKE).
    Je développe un serveur qui communique avec un client, je suis passé d'ici peu à mina, alors que j'utilise les socket de base de java juste avant (1 thread/client).

    Mina est génial mais depuis j'ai des soucis pour déboguer mon problème, je m'explique :

    Toutes les exceptions qui sont levées hors du thread de mina me sont bien affichés dans ma console, ou dans mon logs d'erreur (j'ai injecter mon .log dans le system.err) .
    Toutes les exceptions qui sont levées dans le thread principal de mina ne me sont pas communiqué. En effet pour test j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     public void messageReceived(IoSession session, Object message) throws Exception {
        	if(session.getAttribute("client") instanceof GameClient) {
        		String packet = (String)message;
        		GameClient client = (GameClient)session.getAttribute("client");
        		if(client == null)
        			System.out.println("[ERROR]Client undefined.");
        		else {
        			GameServer.addToLogPacket("<< "+packet);
    int test = 100/0;
        			client.getParser().parsePacket(packet);
        		}
     
        	}
        }
    En temps normal je devrais avoir une exception me disant que c'est pas possible etc ... tout ce que j'ai c'est un arrêt de l’exécution.
    Du coup je passe des heures à identifier mes arrêt dans mon programme.

    Je vous en supplie HELP ME !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    J'y connais rien en MINA, mais vite vu, on voit qu'il y a un handler de Uncaucht Exception, org.apache.mina.util.ExceptionMonitor, qui s'initialise par défaut en org.apache.mina.util.DefaultExceptionMonitor, un handler qui attrape tout ce qui n'est pas Error pour le logue en WARN. Donc, soit tes exceptions sont dans les logs, soit les logs ne sont pas configurés pour tracer les WARN.

    Accessoirement, on peut forcer à sa propre implémentation par ExceptionMonitor.setInstance(ExceptionMonitor) : donc tu peux essayer rapidement de faire une implémentation qui fait trace la stack d'appel dans System.err.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 24
    Points : 11
    Points
    11
    Par défaut code
    Ouaip j'ai vu sa du coup j'ai fait cette petite modification :

    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
    public static void tieSystemOutAndErrToLog() {
    		 String date = Calendar.getInstance().get(Calendar.DAY_OF_MONTH)
    					+ "-" + (Calendar.getInstance().get(Calendar.MONTH) + 1)
    					+ "-" + Calendar.getInstance().get(Calendar.YEAR);
    	        System.setOut(new ProxyPrintStream(System.out,"logs/error/logError_"+date+".log"));
    	        System.setErr(new ProxyPrintStream(System.err,"logs/error/logError_"+date+".log"));
    	 }
     
    	 static class ProxyPrintStream extends PrintStream{    
    		    private PrintStream fileStream = null;
    		    public ProxyPrintStream(PrintStream out, String FilePath) {
    		        super(out);
    		         try {
    		             FileOutputStream fout = new FileOutputStream(FilePath,true);
    		             fileStream = new PrintStream(fout);
    		        } catch (FileNotFoundException e) {
    		                e.printStackTrace();
    		        }
    		    }    
    		    public void print(final String str) {
    		        fileStream.println(str);
    		    }
    		    public void println(final String str) {
    		        fileStream.println(str);
    		    }        
    		}
    Mais toujours rien

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 24
    Points : 11
    Points
    11
    Par défaut UP
    Un petit Up ?

    Même en faisant comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		@Override
    		public void exceptionCaught(Throwable arg0) {
    			if(arg0 instanceof Error) {
    				throw (Error) arg0;
    			}
    			Console.println(arg0);
    			getLogger().warn("Unexpected exception.",arg0);
    		}
    et en donnant à ma classe GameServer ExceptionMonitor

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Le org.apache.mina.util.DefaultExceptionMonitor est censé logguer dans un Logger (commons probablement), donc ta redirection des out et err ne change rien en effet.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    En effet c'est donc pourquoi je me suis questionné sur le sujet et j'ai trouvé les rapports via ExceptionMonitor j'ai donc fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extends ExceptionMonitor
    mais je ne comprend pas je ne reçois aucune erreur, alors que je fais une division par 0 à l'entrée de la réception d'un paquet :o

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Mais tu l'injectes par ExceptionMonitor.setInstance(ExceptionMonitor) ton monitor ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 24
    Points : 11
    Points
    11
    Par défaut Re
    Oui je le fais bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ExceptionMonitor.setInstance(new ExceptionMonitor() {
     
    				@Override
    				public void exceptionCaught(Throwable cause) {
    					Console.println(1);
     
    				}
    			});
    (Le console.println(1) est juste pour avoir si la fonction est bien appelé pour mon erreur).
    Mais rien n'est appelé

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 24
    Points : 11
    Points
    11
    Par défaut Re
    Après des recherches le soucis vient d'un problème tout simple et d'un oublie de ma part qui est a fonction exeptionCaught() du handler ou il n'y avait aucune récupération de Throwable --' Je le passe en résolu et désolé du dérangement sincèrement.

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

Discussions similaires

  1. Problème de gestion des erreurs avec le module RIO
    Par menina_raquel dans le forum Ruby
    Réponses: 0
    Dernier message: 04/01/2011, 16h30
  2. [Sybase ASE 12.5.3] Gestion d'erreur avec @@error
    Par lsone dans le forum Sybase
    Réponses: 5
    Dernier message: 24/07/2006, 22h25
  3. [J2EE/JSP] Gestion des erreurs avec une base SQL server 2005
    Par critok dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/04/2006, 16h57
  4. Gestion des erreurs avec setjump/longjump
    Par gege2061 dans le forum C
    Réponses: 1
    Dernier message: 05/02/2006, 15h51
  5. [Upload] Problème pour gestion d'erreur avec class
    Par allserv dans le forum Langage
    Réponses: 2
    Dernier message: 27/12/2005, 13h00

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