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

Développement de jobs Discussion :

reset d'un tHashOutput dans une boucle


Sujet :

Développement de jobs

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 30
    Points : 18
    Points
    18
    Par défaut reset d'un tHashOutput dans une boucle
    Bonjour,
    j'utilise des tHashOutput dans mes traitements.
    voici un extrait de ce programme :
    un tHashInput1 (correspondant à un tHashOutput1 avec le paramètre "Vider le cache après lecture")) déverse ses données dans un tHashOutput2
    ensuite
    le tHashOutput1 ayant été vidé, j'essaie de l'initialiser pour la suite du programme :
    pour cela j'ai essayé le tFixedFlowInput -> tHashOutput1

    lorsque j'exécute le programme, j'ai le message d'erreur sur le tHashOutput1 "Exception in component tHashOutput_xx java.lang.NullPointerException ..."
    le tFixedFlowInput a été paramétré avec 0 ligne générée ou 1 ligne, dans les 2 cas ça ne fonctionne pas.

    Peut-on réinitialiser une mémoire tHash, pour utilisation ultérieure avec un tHashOutput ?

  2. #2
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    J'ai vu sur Internet que quelqu'un avait essayé d'utiliser un objet AdvancedMemoryHashFile
    j'essaie d'utiliser les composants tHash pour accélérer les traitements, mal m'en a pris !

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    est ce qu'il y a quelqu'un ?
    si oui, frappe 3 fois, ...

  4. #4
    Membre éclairé Avatar de MythOnirie
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2012
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juin 2012
    Messages : 376
    Points : 795
    Points
    795
    Par défaut
    J'ai frappé de trois pouce rouge, c'est bon ?

    Blague à part, peut tu nous montrer l'orchestration des différents composant avec une image parce que là, tes explications sont plutôt brouillons, tu parles d'initialiser un composant après avoir lu ce qu'il contenait, etc.

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Bonjour,
    une partie du job posant problème concerne la jointure entre des éléments de 2 fichiers : un fichier des alarmes ouvertes et un fichier des alarmes fermées.
    J'essaye de placer cela en mémoire tHash pour gagner du temps :
    mem_fic_lu pour les alarmes fermées
    mem_alarme_ouverte pour les alarmes ouvertes

    pour chaque alarme fermée que je lis (à partir du tFlowToIterate_1) , je vais vérifier dans le fichier des alarmes ouvertes si il y a cette alarme correspondante (même numéro et date d'alarme ouverte <= date de fermeture alarme)
    les données du tHashInput "mem_alarme_ouverte" (avec option "Vider le cache après lecture") sont placées dans un tHashOutput "tmp_mem_alarme_ouverte"
    j'essaye ensuite de réinitialiser "mem_alarme_ouverte" avec un tFixeFlowInput

    si je trouve l'alarme fermée correspondant à l'alarme ouverte, je stocke les données dans un fichier Base_alarme.
    si je ne trouve pas les données, l'alarme fermée est quand même enregistrée dans le fichier base_alarme et les alarmes ouvertes restantes sont stockées en mémoire (dans mem_alarme_ouverte)

    Ensuite, je prends la prochaine fermée que je compare à son tour ...


    J'ai donc besoin de faire évoluer les données dans la mémoire des alarmes fermées.
    Images attachées Images attachées  

  6. #6
    Membre éclairé Avatar de MythOnirie
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2012
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juin 2012
    Messages : 376
    Points : 795
    Points
    795
    Par défaut
    C'est un peu plus clair désormais.

    Quel est le tHashOutput qui renvoie l'erreur ?

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    c'est le "mem_alarme_ouverte" qui reçoit les données du tFixedFlowInput_1
    => j'essaye à ce niveau de réinitialiser la mémoire "mem_alarme_ouverte" que j'ai vidé (la ligne au dessus) avec l'option "Vider le cache après lecture"
    En effet, si je ne réinitialise pas cette mémoire, les 2 tHashOuput "mem_alarme_ouverte" (plus bas) vont se planter aussi.
    Ça va d'ailleurs aussi planter plus tard pour tHashOuput "tmp_mem_alarme_ouverte", qui est vidé au tHashInput le concernant...

    soit je sais réinitialiser les mémoires tHash, sinon je vais faire autrement.
    quid de l'utilisation de AdvancedMemoryHashFile ?

  8. #8
    Membre éclairé Avatar de MythOnirie
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2012
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juin 2012
    Messages : 376
    Points : 795
    Points
    795
    Par défaut
    Petites questions en passant :
    - Pourquoi passer par un tHash temporaire ? Juste pour avec une ligne de moins à chaque lecture ?
    - Pourquoi ne pas faire une jointure directe sur les deux sources de données dans un tMap ? Si je comprends bien, si tu trouve une alame qui est fermée dans les alarmes ouvertes, tu crée une ligne dans ton fichier, si tu ne la trouve pas tu crée quand même une ligne, et les alarmes ouvertes et non fermées finissent dans un tHash... Si je ne me trompe pas, je trouve que ce qui est fait est plutôt compliqué.

    Sinon, tu as quoi comme paramétrage du tHash qui plante ?
    Dans ce tHash, tu as le même format que dans le hash précédent ?

  9. #9
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Pour une alarme fermée, j'ai l'alarme ouverte correspondante lorsque :
    ces alarmes ont le même numéro
    et que c'est la 1ère alarme ouverte inférieure ou égale à l'alarme fermée (il peut y avoir plusieurs alarmes ouvertes dans le fichier)

    à mon niveau, le fait de décomposer le programme en utilisant plus de composants me paraît plus simple, plus facile à comprendre et à debugger que de tout faire avec un tMap (si cela est possible)
    J'ai dû d'ailleurs essayé initialement avec le tMap sans succès.

    si je trouve l'alarme, je calcule aussi la durée entre le début et la fin de l'alarme, et je mets le tout dans un fichier csv.
    si je ne trouve pas l'alarme, je mets les infos de fin d'alarme dans ce fichier csv aussi.
    les autres alarmes ouvertes sont gardées pour être comparées à leur tour avec les alarmes fermées.

    Mettre ça en mémoire tHash était justement intéressant concernant le fait que les lignes sont plusieurs fois parcourues.

    Voici le paramétrage des tHash :

    le tHashInput qui est vidé et qui passe ses infos au tmp_mem_alarme_ouverte :
    Nom : 2017-02-17_161315.jpg
Affichages : 1077
Taille : 121,6 Ko



    le tHashInput qui plante et que j'essaye d'initialiser :
    Nom : 2017-02-17_161402.jpg
Affichages : 1176
Taille : 119,8 Ko

  10. #10
    Membre éclairé Avatar de MythOnirie
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2012
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juin 2012
    Messages : 376
    Points : 795
    Points
    795
    Par défaut
    J'ai effectué un test similaire et j'ai effectivement le même problème. Il semblerait que tu ne puisse pas écrire dans un tHash que tu as vidé.

  11. #11
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Merci MythOnirie pour m'avoir confirmé ce que j'avais vu, j'aurais préféré apprendre qu'il y avait une astuce pour contourner ce blocage

    j'ai lu sur Internet que AdvancedMemoryHashFile pouvait servir, est-ce que l'utilisation de cette classe parle à quelqu'un ?

    Sinon, ça veut dire qu'il faudrait s'assoir sur les performances, et stocker tout dans des fichiers temporaires ?

Discussions similaires

  1. [langage] incrementation de variable dans une boucle
    Par mimilou dans le forum Langage
    Réponses: 15
    Dernier message: 16/04/2004, 13h23
  2. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19
  3. swf dans une boucle asp
    Par Chucky69 dans le forum Flash
    Réponses: 11
    Dernier message: 10/02/2004, 17h07
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

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