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

  1. #1
    Nouveau membre du Club
    gestion des environnements
    Bonjour,

    Je dois faire un script d'extraction et de chargement dans le cadre de mon travail.
    J'aurai pu le faire en ksh mais j'ai préféré utilisé l'ETL Talend (pour la maintenabilité).

    Une fois (que j'aurai réussi, car ce n'est pas encore le cas ...) je voudrai déployer le package java dans des environnements différents : dev, preprod et prod. Savez vous comment je peux gérer ces différents environnements de manière simple ? J'ai crée un contexte mais je ne sais pas comment automatiser le changement de contexte en fonction de l'environnment...

    de plus j'ai fait 2 jobs unitaires et un job qui les pilotent.
    j'ai utilisé un contexte mais au moment de l'export j'ai trois fichiers de properties un par job, alors que je n'ai qu'un seul contexte et que l'information est la même...
    Ya t'il moyen d'avoir un seul fichier de paramètres Default.properties pour plusieurs jobs ?

    D'avance merci.

    Charles.

  2. #2
    Membre éprouvé
    Alors dans l'ordre :

    Pour gérer mes variables d'environnement, j'utilise un fichier présent dans le home du user qui lance mes traitements.
    J'utilise ce fichier avec le tContextLoad implicite, ce qui permet d'alimenter toutes mes variables de contexte.

    Afin que mes jobs fonctionnent sous windows et linux, je passe en paramètre le chemin d'accès à ce fichier (via l'option --context_param).

    Lors de l'export des script, je ne demande donc plus d'exporter les contextes. (Chaque variable est soit passée en paramètre, soit alimentée via le load implicite).
    Sinon à mon avis, tu as un fichier contexte par job car tu n'as pas dû cocher l'option "Appliquer aux fils" lors de l'export ?

    Nicolas

  3. #3
    Rédacteur

    Ce message n'a pas pu être affiché car il comporte des erreurs.
    Google est ton ami mais ton voisin aussi

    Modérateur BI - Responsable Talend
    Mes tutoriels - FAQ Talend - FAQ SQL*Plus

    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Suivez @Developpez sur twitter !

  4. #4
    Nouveau membre du Club
    merci pour l'explication

    j'ai mis 3 contextes
    un job pere et deux jobs fils
    j'ai coché dans le job pere l'option "transmettre tout le contexte"

    A l'export j'ai dans le repertoire du 1er job fils, le fichier de contexte par défaut
    Rien dans le repertoire du 2eme job fils
    et les 3 fichiers de contexte dans le master job.

    Si je modifie le fichier de contexte du 1er job fils en mettant des serveurs inconnus, il me met une erreur.

    je ne comprends pas pourquoi, il ne devait pas prendre en compte uniquement le contexte du père ?

    merci

  5. #5
    Nouveau membre du Club
    j'ai inversé dans mon dernier post


    dans le masterjob --> aucun fichier de contexte
    dans le 1er job fils --> les 3 fichiers de contexte
    dans le 2 eme job fils --> le fichier de contexte par defaut


    si je modifie ce dernier en mettant un nom de serveur inexistant, le traitement plante; ce qui n'est pas normal (si j'ai bien compris )

    merci

  6. #6
    Nouveau membre du Club
    J'ai refait tous mes jobs car je n'y suis pas arrivé

    2 jobs unitaires
    et un troisième composé de 2 trunjobs qui appellent ces 2 jobs unitaires.

    Au moment de l'export je ne sélectionne que le job père (qui contient les 2 trunjobs) et je coche "appliquer aux fils".

    J'ai bien crée 3 contextes : dev,pp et production

    quand j'exporte j'ai 3 fichiers properties par job unitaire et un fichier properties vide pour le job pere.

    Je ne sais plus ou chercher ... pouvez vous m'aider svp ?
    je souhaiterai a voir des fichiers properties à un et un seul endroit...

  7. #7
    Nouveau membre du Club
    Bonjour DevNico,

    Je vais essayer de me rabattre sur ta solution.

    quand tu utilises le load implicite, tu charges un fichier vers un tcontextload, mais dans le fichier comment appelles tu tes variables de contexte ? de la même manière que lorsque tu utilises un contexte exporté , càd
    context.KONTACT_ServiceName par exemple ?

    J'ai un contexte dans lequel les variables sont définis de la sorte :

    KONTACT_directoryLog
    KONTACT_filecsv
    KONTACT_Login
    KONTACT_Password
    KONTACT_Port
    KONTACT_Schema
    KONTACT_Server
    KONTACT_ServiceName


    et dans mon fichier j'ai :

    KONTACT_directoryLog;/opt/progs/kontact_ecim/extraction/
    KONTACT_filecsv;/opt/progs/kontact_ecim/extraction/extract_conso
    KONTACT_Login;KONTAKT_SEM_1
    KONTACT_Password;websphere2
    KONTACT_Port;1521
    KONTACT_Schema;KONTAKT_SEM_1
    KONTACT_Server;pfq-crm1.wanadoo.fr
    KONTACT_ServiceName;SE2K2

    et au moment du chargement du tloadimplicite j'ai l'erreur suivante :

    Error: Parameter "KONTACT_directoryLog" is a new parameter of tContextLoad_1
    Error: Parameter "KONTACT_filecsv" is a new parameter of tContextLoad_1
    Error: Parameter "KONTACT_Login" is a new parameter of tContextLoad_1
    Error: Parameter "KONTACT_Password" is a new parameter of tContextLoad_1
    Error: Parameter "KONTACT_Port" is a new parameter of tContextLoad_1
    Error: Parameter "KONTACT_Schema" is a new parameter of tContextLoad_1
    Error: Parameter "KONTACT_Server" is a new parameter of tContextLoad_1
    Error: Parameter "KONTACT_ServiceName" is a new parameter of tContex

    Aurez tu une idée ?

    merci

  8. #8
    Membre éprouvé
    Alors ce qu'on m'avait conseillé de faire, c'est d'utiliser un tContextDump afin de générer un fichier à partir des variables de contexte existantes.

    Ainsi, tu as directement un exemple de fichier au bon format.

    Bon après, j'ai toujours des alertes lors du chargement de mon fichier comme celles que tu montres (j'ai paramétré les 2 cas de paramètre non déclaré et de paramètre absent du fichier comme un warning).
    Mais bon, ça fonctionne. Je ne me suis jamais penché sur la raison de ces alertes qui, c'est vrai ne devraient pas apparaître.

    Nicolas

  9. #9
    Nouveau membre du Club
    merci devnico

    j'ai utilisé un tcontextdump pour générer mon fichier et ça fonctionne bien.

    par contre quand je lance mon job pere dans lequel il y a le tcontextload, celui-ci utilise les variables de contexte dans la rubrique context de TOS et non les variables chargées par loadcontext.

    Comment je le sais ? je me suis amusé à modifier le fichier csv dans lequel il y a les paramètres et cela fonctionen quand même.

    Y a til un paramètre à déclarer pour qu'il prenne les valeurs du contexte dynamiquement et non dans la rubrique contexte ?

    merci d'avance.

  10. #10
    Nouveau membre du Club
    Est-ce que l'option LoadImplicite doit être cochée dans tous les jobs pere et jobs fils ? ou uniquement dans le job fils ?

  11. #11
    Membre éprouvé
    Citation Envoyé par oudin.charles Voir le message
    Est-ce que l'option LoadImplicite doit être cochée dans tous les jobs pere et jobs fils ? ou uniquement dans le job fils ?
    Bonne question... Sur laquelle je ne me suis pas encore penchée.

    Je dirais qu'il y a 2 possibilités :

    - Soit chaque job fait le load implicite, dans ce cas on ne passe du job père aux jobs fils que la variable contenant le chemin vers le fichier à charger.

    - Soit on choisit de ne faire le load que dans le job père. Dans ce cas il faut que toutes les variables de contexte soient déclarées dans le job père et chaque job fils doit récupérer les variables dont il a besoin du job père (voire cocher l'option "Transmettre tout le contexte" ).

    J'avoue que je ne me suis pas encore décidé là dessus...
    Qu'en penses-tu ?

    Nicolas

  12. ###raw>post.musername###
    Nouveau membre du Club
    je pense que les deux solutions sont bonnes même si je prefere celle avec héritage.

    Ce que j'ai fait c'est que j'ai paramétré le load implicite au niveau du projet comme ça je n'ai plus de souci.

    par contre, je ne sais pas comment utiliser le context-param dont tu parlais qui permet de spécifier le chemin où se trouve le fichieir de paramètre chargé par le contextLoad. pour le moment le chemin est en dur ...

    J'ai mis dans les paramètres du projet cette variable pour le fichier en question :

    context.DirParamScript+"ParamScriptExtract.csv"

    et j'ai rajouté DirParamScript dans le contexte du projet.

    Quand je lance le bat suivant
    cd %~dp0
    java -Xms256M -Xmx1024M -cp classpath.jar; kontact.extractkontact_0_1.ExtractKontact --context-param DirParamScript='E:\' %*


    j'ai l'erreur suivante :

    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
     
     
    Info: Parameter "DirParamScript" has not been set by tContextLoad_1
    Info: Parameter "DirParamScript" has not been set by tContextLoad_1
    Info: Parameter "DirParamScript" has not been set by tContextLoad_1
    Info: Parameter "DirParamScript" has not been set by tContextLoad_1
    Exception in thread "main" java.lang.Error: ProblÞme de compilation non rÚsolu :
     
            context.DirParamScript ne peut pas Ûtre rÚsolu ou n'est pas un champ
     
            at kontact.extract_table_kontact_0_1.extract_table_kontact.Implicit_Cont
    ext_DelimitedProcess(extract_table_kontact.java:444)
            at kontact.extract_table_kontact_0_1.extract_table_kontact.runJobInTOS(e
    xtract_table_kontact.java:4573)
            at kontact.extract_table_kontact_0_1.extract_table_kontact.runJob(extrac
    t_table_kontact.java:4469)
            at kontact.extractkontact_0_1.ExtractKontact.tRunJob_1Process(ExtractKon
    tact.java:853)
            at kontact.extractkontact_0_1.ExtractKontact.tRunJob_6Process(ExtractKon
    tact.java:793)
            at kontact.extractkontact_0_1.ExtractKontact.runJobInTOS(ExtractKontact.
    java:2019)
            at kontact.extractkontact_0_1.ExtractKontact.main(ExtractKontact.java:18
    97)
     
    E:\ExtractKontact_0.1\ExtractKontact>


    Aurais tu une idée ?

    comment doit on spécifier un variable projet de type context-param dans TOS ? est-ce dans la partie contexte? je n'ai pas trouvé cela dans la doc.

    merci d'avance.
      0  0

  13. ###raw>post.musername###
    Membre éprouvé
    Effectivement, tes variables doivent être définies dans chaque job.
    Pour ma part, j'utilise effectivement les contextes du Référentiel (un par type de variable (Répertoires, Base de données, Variables internes).
    Mais ce n'est pas propre aux variables que tu passes en paramètre je pense.

    Pour le passage de paramètre, ca l'air de correspondre à ce que tu fais : --context-param DirParamScript='E:\'

    La différence, c'est que je passe le chemin et le nom du fichier. Du coup, au niveau du paramétrage du Implicit Context Load dans les propriétés du projet, j'ai juste : context.FicCfg.
    (Je passe donc un paramètre '--context_param FicCfg=$HOME/projet.properties' à ma commande java)

    Nicolas
      0  0

  14. #14
    Nouveau membre du Club
    Bonjour Devnico

    j'ai utilisé le ligne de commande que tu m'as donné et cela fonctionne bien.

    merci beaucoup

    je cloture le sujet.

    Charles