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 EE Discussion :

[Camel] Traitement des erreurs dans une route


Sujet :

Java EE

  1. #1
    Membre confirm�
    Profil pro
    lead dev
    Inscrit en
    F�vrier 2008
    Messages
    75
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : lead dev

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 75
    Par d�faut [Camel] Traitement des erreurs dans une route
    Bonjour,

    Tout d'abord voici ce que je cherche � faire :
    R�cup�rer via FTP des fichiers XML "serveurFTP", les unmarshaller avec JAX-B et ex�cuter un Processor pour finalement archiver le fichier XML source.

    Si traitement OK : archivage du fichier XML dans serveurFTP/ARCHIVE
    Si traitement KO : archivage du fichier XML dans serveurFTP/ERREURS


    Ci dessous la configuration de ma route Camel :
    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
     
     
    	String ftpOpts= "&delay=10000&recursive=false&filter=#transporteurFilter&delete=true&consumer.bridgeErrorHandler=true";
     
    		String routeEnCours = "ftp://"+getUrl()+"/"+getEnCoursDirectory()+"?username="+getUser()+"&password="+getPassword();
    		String routeErreur = "ftp://"+getUrl()+"/"+getErreurDirectory()+"?username="+getUser()+"&password="+getPassword();
    		String routeArchive = "ftp://"+getUrl()+"/"+getArchiveDirectory()+"?username="+getUser()+"&password="+getPassword();
     
    		// Redirection en cas d'erreur
    		 onException(Exception.class)
             .handled(true)
             .to(routeErreur);
     
    		// Configuration de la route
    		from(routeEnCours+ftpOpts)
    		.unmarshal(dataFormat)
    		.processRef("myProcessor")
    		.to(routeArchive);
    Le probl�me rencontr�:
    En cas d'erreur � n'importe qu'elle �tape du workflow je veux que le fichier XML source soit d�plac� du repertoire "encours" vers le repertoire "erreur". De m�me � la fin du traitement le fichier XML doit �tre d�plac� dans "archive". MAIS selon � qu'elle �tape on se situe on perd la notion de "fichier XML source", avant le unmarshalling on a un Stream, apr�s le unmarshalling on a un objet Java, etc... Du coup ma strat�gie me parait compromise.

    Avez vous une id�e de comment proc�der ?

  2. #2
    Membre confirm�
    Profil pro
    lead dev
    Inscrit en
    F�vrier 2008
    Messages
    75
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : lead dev

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 75
    Par d�faut
    re,

    Pour la gestion des erreurs, j'ai r�ussi � passer par un errorHandler avec l'EIP deadLetterChanel :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    		errorHandler(deadLetterChannel("ftp://erreursDirUrlEtParams").useOriginalMessage().maximumRedeliveries(1).maximumRedeliveryDelay(5000));
    Reste le probl�me de l'archivage..

  3. #3
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finist�re (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Par d�faut
    Salut,

    Dans camel tu as la structure .doTry() .doCatch(TonException.class) .doFinally()

    Donc tu pourrais faire quelque chose du genre :

    Code java : 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
     
    from("direct:start")
    .doTry()
     // tu sauvegarde ton fichier dans le header
     .setHeader("MonFichier", body())
     .unmarshal(dataFormat)
     .processRef("myProcessor")
     .setHeader("Archivage", "OK")
    .doCatch(Exception.class)
     .setHeader("Archivage", "KO")
    .doFinally()
     // tu remets le fichier dans ton body pour le déplacer dans ta route
     .setBody(header("MonFichier")
     .to(routeArchivage)
    .end();
     
    from(routeArchivage)
    .choice()
    .when(header("Archivage").isEqualTo("OK"))
    // déplacer ton fichier vers repertoire OK
    .otherwise()
    // déplacer ton fichier vers répertoire KO
    .endChoice()
    .end();

  4. #4
    Membre confirm�
    Profil pro
    lead dev
    Inscrit en
    F�vrier 2008
    Messages
    75
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : lead dev

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 75
    Par d�faut
    Merci Carhiboux pour tes indications, c'est en effet une solution d'enrichir le message avec le body et le r�sultat d�ex�cution.

    La solution que j'ai adopt� est l'ajout de deux options dans from(ftp:// .......), � savoir :
    - move = nom d'un r�pertoire de sauvegarde si traitement OK
    - moveFailed= nom d'un r�pertoire de sauvegarde si traitement KO

    Du coup pas besoin de traiter les cas d'erreurs ou d'encapsuler des informations suppl�mentaires.

    Si ca peut servir, voil� le rendu
    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
     
    String ftpOptions = "&delay=10000&recursive=false&filter=#myFilter&move=getArchiveDirectory()
    				+"/${date:now:yyyyMMdd}/${file:name.noext}-${date:now:yyyyMMddHHmmssSSS}.${file:ext}&moveFailed=getErreurDirectory()+
    				"/${file:name.noext}-${date:now:yyyyMMddHHmmssSSS}.${file:ext}"
    				+"&readLock=changed";
     
    // Récupération des types XML pour convertion
    		JaxbDataFormat dataFormat =  new JaxbDataFormat(PACKAGE_BEANS_JAXB);
    		dataFormat.setPrettyPrint(true);
     
    		// Configuration de la route
    		from(getEndPointEnCours()+ftpOptions)
    		.unmarshal(dataFormat)
    		.processRef("myProcessor")
    		.end();

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Gestion des erreurs dans une requ�te "IF"
    Par tineighty dans le forum Macros et VBA Excel
    R�ponses: 5
    Dernier message: 08/10/2007, 18h22
  2. Gestion des erreurs dans une classe
    Par gregb34 dans le forum ASP.NET
    R�ponses: 10
    Dernier message: 26/07/2007, 09h59
  3. [Formulaires] Traitement des donn�es dans une autre page...
    Par sekiryou dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 04/03/2006, 09h08
  4. R�ponses: 5
    Dernier message: 04/03/2006, 09h06
  5. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et ant�rieur
    R�ponses: 8
    Dernier message: 02/08/2004, 11h20

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