Précédent   Forum du club des développeurs et IT Pro > Java > Serveurs, conteneurs, et Java EE > Autres
Autres Vos questions sur les autres serveurs d'application Java.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/01/2012, 18h19   #1
sekaijin
Expert Confirmé Sénior
 
Avatar de sekaijin
 
Homme
Urbaniste
Inscription : juillet 2004
Messages : 2 113
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 49
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 2 113
Points : 5 030
Points : 5 030
Par défaut [Camel] Méthode wireTap dépréciée

Bonjour.

j'ai une route camel dans laquelle j'ai
Code :
1
2
interceptFrom()
.wireTap("jms:journal", true, constant(""))
Or cette méthode est dépréciée.
Dans la doc Camel rien n'est dit sur le fait qu'elle soit dépréciée.

Dans le code source, seul le fait qu'elle soit dépréciée est indiqué avec le fait qu'elle disparaît en version 3.

Je ne trouve pas de solution de remplacement.
Si je fais
Code :
1
2
3
4
5
6
interceptFrom()
.wireTap("direct:journal");
 
from("direct:journal")
.setBody("")
.to("jms:journal");
je crée un cycle infernal
le est intercepté par l'intercepteur qui crée une copie qu'il envoie sur le même from.

Je ne peux pas utiliser un broadcast vu que je suis dans un intercepteur je ne connais pas l'élément suivant.

Et si je fais
Code :
1
2
interceptFrom()
.wireTap("jms:journal")
j'envoie dans mon journal tous les messages avec leur body et chez moi l'unité pour compter les échanges et le million. Intercepter les messages pour analyser les leaders afin d'avoir un suivi de l'activité a posteriori est jouable. Mais intercepter les messages entiers va inévitablement saturer la file du jms du journal.

Si quelqu'un a une solution ou une piste je suis preneur.

Merci de votre aide
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 11h44   #2
sekaijin
Expert Confirmé Sénior
 
Avatar de sekaijin
 
Homme
Urbaniste
Inscription : juillet 2004
Messages : 2 113
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 49
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 2 113
Points : 5 030
Points : 5 030
bonjour à tous.
avec un peu d'imagination je suis arrivé à la solution.

mais e qui s'écrivait simplement devient très compliqué à écrire
je l'ai dans une classe parente donc c'est pas trop lourd.

fonctionnalité à reproduire
Code java :
1
2
interceptFrom()
    .wireTap("jms:journal", true, constant("")) // deprecated
en clair envoyer une copie des headers dans des messages entrant de toutes les routes dans le journal.
La solution
Code :
1
2
3
4
5
6
7
interceptFrom()
    .when(header("identifiant.unique.journal").isNull())
        .setHeader("identifiant.unique.journal", constant("reception"))
	.wireTap("direct:journal")
        .removeHeader("identifiant.unique.journal");
 
from("direct:journal").setBody(constant("")).to("jms:journal");
On intercept les message qui n'ont pas le header "identifiant.unique.journal"
on leur met le header "identifiant.unique.journal"
on fait une copie vers le chanel "direct:journal" et on leur retire le header "identifiant.unique.journal" pour que si une autre route récupère le message elle puisse l'intercepter à l'entrée.

les message entrant dans "direct:journal" ayant l'entête il ne seront pas intercepté la route from("direct:journal") peut donc fonctionner sans créer de boucle.

fort de ce principe j'ai mis en place ma journalisation dans la classe mère.
Code :
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
interceptFrom()
  .when(header("identifiant.unique.journal").isNull())
    .setHeader("identifiant.unique.journal", constant("reception"))
    .wireTap("direct:journal")
    .removeHeader("identifiant.unique.journal")
    .bean(AphpMessageLogger.class, "traceDebutRoute")
;
 
onCompletion()
  .onCompleteOnly()
    .choice()
      .when(header("identifiant.unique.journal").isNull())
      .setHeader("identifiant.unique.journal", constant("Echange OK"))
      .wireTap("direct:journal")
      .removeHeader("identifiant.unique.journal")
    .end()
;
onCompletion()
  .onFailureOnly()
    .choice()
      .when(header("identifiant.unique.journal").isNull())
      .setHeader("identifiant.unique.journal", constant("Echange KO"))
      .wireTap("direct:journal")
      .removeHeader("identifiant.unique.journal")
    .end()
;
 
// on envoie dans la file de journalisation uniquement les headers du messages.
from("direct:journal").setBody(constant("")).to("jms:journal");
A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2012, 13h21   #3
sekaijin
Expert Confirmé Sénior
 
Avatar de sekaijin
 
Homme
Urbaniste
Inscription : juillet 2004
Messages : 2 113
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 49
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 2 113
Points : 5 030
Points : 5 030
Bonjour

Je reviens sur ce post car à force de creuser la doc j'ai trouvé la bonne solution
à la place de
Code :
1
2
interceptFrom()
    .wireTap("jms:journal", true, constant("")) // deprecated
il faut faire
Code :
1
2
3
4
nterceptFrom()
    .wireTap("jms:journal")
        .newExchangeBody(constant(""))
    .end()
A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h03.


 
 
 
 
Partenaires

Hébergement Web