Accéder au contenu principal Passer au contenu complémentaire

Cas d'utilisation : Définir une variable accessible par différents Jobs

Ce scénario crée une variable accessible aux Jobs. Il présente également comment accéder à la variable.

Créer une routine et déclarer une variable statique

Procedure

  1. Dans l'arborescence Repository, créez une routine MyRoutine.
  2. Déclarez une variable dans la routine et configurez sa valeur comme nulle, par exemple :
    private static String name = null;                      
  3. Ajouter les méthodes setter/getter pour cette variable et appuyez sur Ctrl+S pour sauvegarder les modifications.
    public static synchronized void setValue(String message) {
                         name=message;
                         }
                         
                         public static synchronized String getValue() {
                         return name;
                         }                      
    Note InformationsNote: Le code compet Java pour cette routine est le suivant :
    package routines;
                            /*
                            * user specification: the function's comment should contain keys as follows: 1. write about the function's comment.but
                            * it must be before the "{talendTypes}" key.
                            *
                            * 2. {talendTypes} 's value must be talend Type, it is required . its value should be one of: String, char | Character,
                            * long | Long, int | Integer, boolean | Boolean, byte | Byte, Date, double | Double, float | Float, Object, short |
                            * Short
                            *
                            * 3. {Category} define a category for the Function. it is required. its value is user-defined .
                            *
                            * 4. {param} 's format is: {param} <type>[(<default value or closed list values>)] <name>[ : <comment>]
                            *
                            * <type> 's value should be one of: string, int, list, double, object, boolean, long, char, date. <name>'s value is the
                            * Function's parameter name. the {param} is optional. so if you the Function without the parameters. the {param} don't
                            * added. you can have many parameters for the Function.
                            *
                            * 5. {example} gives a example for the Function. it is optional.
                            */
                            public class MyRoutine {
                            private static String name = null;
                            
                            /**
                            * helloExample: not return value, only print "hello" + message.
                            *
                            *
                            * {talendTypes} String
                            *
                            * {Category} User Defined
                            *
                            * {param} string("world") input: The string need to be printed.
                            *
                            * {example} helloExemple("world") # hello world !.
                            */
                            public static void helloExample(String message) {
                            if (message == null) {
                            message = "World"; //$NON-NLS-1$
                            }
                            System.out.println("Hello " + message + " !"); //$NON-NLS-1$ //$NON-NLS-2$
                            }
                            
                            public static synchronized void setValue(String message) {
                            name = message;
                            }
                            
                            public static synchronized String getValue() {
                            return name;
                            }
                            }
                         

Configurer les Jobs enfants

L'exemple ci-dessous présente comment partager une valeur entre différents Jobs via la routine précédemment définie.

Procedure

  1. Créez un Job nommé childJob1 et ajoutez-y deux composants en saisissant leur nom dans l'espace de modélisation graphique, ou en les déposant depuis la Palette dans l'espace de modélisation graphique :
    • un tFixedFlowInput pour générer le flux des données d'entrée,
    • un tJavaRow pour recevoir les données et dans lequel le Job appelle la méthode pour donner une nouvelle valeur à la variable.
  2. Double-cliquez sur le tFixedFlowInput pour ouvrir sa vue Basic settings.
  3. Cliquez sur le bouton [...] à côté du champ Edit schema pour ouvrir la fenêtre Schema et définir le schéma des données d'entrée. Dans cet exemple, le schéma contient une seule colonne name de type String.
    Boîte de dialogue Schema pour le composant tFixedFlowInput.
  4. Dans la zone Mode, sélectionnez l'option Use Single Table et définissez la valeur correspondante pour la colonne message dans la table Values. Dans cet exemple, la valeur est "Talend".
    Vue Basic settings (Paramètres simples).
    Note InformationsNote: Le composant tJava appelle la méthode getter et attribue la valeur de retour à une variable de type String, puis affiche la valeur de la variable dans la console.
  5. Double-cliquez sur le composant tJavaRow pour ouvrir sa vue Basic settings.
  6. Dans la zone Code, saisissez le code suivant pour ajouter la méthode setter.
    MyRoutine.setValue(input_row.name);
    Vue Basic settings (Paramètres simples).
  7. Créez un Job nommé childJob2 puis créez un composant tJava dans ce Job.
  8. Double-cliquez sur le composant tJava pour ouvrir sa vue Basic settings.
  9. Dans la zone Code, saisissez le code suivant pour ajouter la méthode getter.
    String name=MyRoutine.getValue();
                         System.out.println(name);
    Vue Basic settings (Paramètres simples).

Configurer le Job parent

Procedure

  1. Créez un Job nommé parentJob et ajoutez deux composants tRunJob.
  2. Connectez ensuite le deuxième composant tRunJob à un premier composant tRunJob à l'aide d'un lien OnSubjobOk.
  3. Double-cliquez sur les tRunJob afin d'ouvrir leur vue Basic settings.
  4. Renseignez le champ Job du tRunJob1 et du tRunJob2, respectivement avec childJob1 et childJob2 pour appeler les deux Jobs enfants créés.
    Capture d'écran du Job complet dans l'espace de modélisation graphique.
    Cette approche de définition d'une variable dans une routine et de partage à travers les différents Jobs ne fonctionne pas avec la fonctionnalité Use an independent process to run subjob (Utiliser un processus indépendant pour exécuter le sous-Job) du composant tRunJob.

Exécuter les Jobs pour appeler la routine

Procedure

Exécutez le Job parentJob. Vous pouvez voir les résultats suivants dans la console :
Starting job parentJob at 19:52 21/06/2013.
                     [statistics] connecting to socket on port 3397
                     [statistics] connected
                     Talend
                     [statistics] disconnected
                     Job parentJob ended at 19:52 21/06/2013. [exit code=0]

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – faites-le-nous savoir.