Création d'un composant personnalisé

EnrichVersion
6.4
6.3
6.2
6.1
6.0
5.6
EnrichProdName
Talend MDM Platform
Talend ESB
Talend Open Studio for Big Data
Talend Data Services Platform
Talend Open Studio for MDM
Talend Data Integration
Talend Big Data Platform
Talend Open Studio for Data Integration
Talend Real-Time Big Data Platform
Talend Data Management Platform
Talend Big Data
Talend Data Fabric
Talend Open Studio for ESB
task
Création et développement > Création de composants
EnrichPlatform
Studio Talend

Création d'un composant personnalisé

Talend offre nativement plus de 800 composants au sein du Studio Talend afin de répondre à vos besoins en intégration de données. Cependant, si ces composants ne répondent pas à des besoins spécifiques, vous pouvez étendre les fonctionnalités du Studio Talend en créant vos propres composants.

Cet article décrit en détails comment créer manuellement un composant, étape par étape et l'utiliser dans l'un de vos Jobs d'intégration de données.

Ce tutoriel couvre les sujets suivants, essentiels au développement de composants personnalisés :

  • Création étape par étape d'un composant.
  • Installation dans votre Studio Talend d'un composant personnalisé.

Il est fortement recommandé, comme prérequis, de lire les articles Qu'est-ce qu'un composant et Modèle de génération de code pour les composants pour savoir comment est structuré un composant Talend et en savoir plus au sujet de l'ordre de génération de code et des technologies associées.

Cet article est un tutoriel et a pour objectif la prise en main du développement de composants. Vous aurez probablement besoin de faire des recherches sur les autres parties afin de devenir un développeur avancé de composants.

Création étape par étape d'un composant personnalisé

Cette procédure vous permet de créer un composant manuellement, étape par étape.

Dans cet exemple, le composant que vous allez créer s'appelle le tTutorialRow, il contient un seul paramètre, de type TABLE. Le composant va gérer une liste d'adresses e-mail.

Ce composant est très simple, sans vraie valeur ajoutée. Le véritable objectif de ce tutoriel est de mettre en pratique la théorie présentée dans les articles Qu'est-ce qu'un composant et Modèle de génération de code pour les composants, ainsi que de compléter l'apprentissage de la création de composants.

Conseil : En se basant sur notre expérience, se référer aux composants Talend officiels est l'un des meilleurs moyens d'apprendre et de vous familiariser au développement de composants. Par exemple, si vous souhaitez développer un composant de base de données pour lire des données d'une base de données, vous pouvez consulter par exemple les composants tMysqlInput, tOracleInput etc. pour voir comment le définir dans le descripteur de fichier XML et comment il fonctionne dans le fichier de modèle Java.

Step 1: Créer le dossier du composant et les fichiers requis

Procédure

  1. Créez un dossier nommé tTutorialRow dans votre système de fichiers.
  2. Créez les cinq fichiers vides suivants dans le nouveau dossier :
    • tTutorialRow_java.xml
    • tTutorialRow_messages.properties
    • tTutorialRow_begin.javajet
    • tTutorialRow_main.javajet
    • tTutorialRow_end.javajet
  3. Créez un fichier d'icône nommé tTutorialRow_icon32.png, de taille 32*32, dans le dossier tTutorialRow.

    Le dossier tTutorialRow doit ressembler à ceci :

Step 2: Modifier le descripteur de fichier XML

Procédure

  1. Ouvrez le descripteur de fichier XML tTutorialRow_java.xml.
  2. Modifiez le contenu du tTutorialRow_java.xml comme ci-dessous :
    <COMPONENT>
      <HEADER
        PLATEFORM="ALL"
        SERIAL=""
        VERSION="2.0"
        STATUS="ALPHA"
      
        COMPATIBILITY="ALL"
        AUTHOR="Component Author"
        RELEASE_DATE="20070525A"
        STARTABLE="false"
      >
        <SIGNATURE/>
      </HEADER>
      
      <FAMILIES>
        <FAMILY>tutorial</FAMILY>
      </FAMILIES>
      
      <DOCUMENTATION>
        <URL/>
      </DOCUMENTATION>
      
      <CONNECTORS>
        <CONNECTOR CTYPE="FLOW" MAX_INPUT="1"/>
        <CONNECTOR CTYPE="ITERATE" MAX_OUTPUT="1" MAX_INPUT="1"/>
        <CONNECTOR CTYPE="SUBJOB_OK" MAX_INPUT="1" />
        <CONNECTOR CTYPE="SUBJOB_ERROR" MAX_INPUT="1" />
        <CONNECTOR CTYPE="COMPONENT_OK" />
        <CONNECTOR CTYPE="COMPONENT_ERROR" />
        <CONNECTOR CTYPE="RUN_IF" />
      </CONNECTORS>
      
      <PARAMETERS>
        <PARAMETER NAME="ADDRESSES" FIELD="TABLE" REQUIRED="true" NUM_ROW="3" NB_LINES="5" SHOW="true">
          <ITEMS BASED_ON_SCHEMA="false">
            <ITEM NAME="USERNAME" />
            <ITEM NAME="DOMAIN" />
          </ITEMS>
        </PARAMETER>
      </PARAMETERS>
      
      <CODEGENERATION/>
      
      <RETURNS>
        <RETURN NAME="NB_LINE" TYPE="id_Integer" AVAILABILITY="AFTER"/>
      </RETURNS>
      
    </COMPONENT>

    Comme décrit dans le descripteur du fichier :

    • La famille du composant est "tutorial".
    • Le composant a un paramètre nommé "ADDRESSES" de type TABLE.
    • Le paramètre contient deux éléments (qui correspondent à des colonnes), "USERNAME" et "DOMAIN".
    • Le composant retourne une variable globale NB_LINE.

Step 3: Modifier le fichier message.properties

Procédure

  1. Ouvrez le fichier message.properties tTutorialRow_messages.properties dans un éditeur de fichier texte.
  2. Modifiez le libellé par défaut de chaque variable déclarée dans le descripteur de fichier XML.
    LONG_NAME=Tutorial component
    HELP=org.talend.help.TutorialRow
     
    NB_LINE.NAME=Number of line
    ADDRESSES.ITEM.USERNAME=Username
    ADDRESSES.ITEM.DOMAIN=Domain
    ADDRESSES.NAME=Addresses

    Selon les paramètres du descripteur de fichier XML et les libellés du fichier message.properties, les paramètres du composant dans le Studio ressemblent à ceci :

Step 4: Modifier les fichiers modèles Java

Procédure

  1. Ouvrez tTutorialRow_begin.javajet dans un éditeur de fichier texte et définissez le début du code javajet du composant, comme suit :
    <%@ jet
        imports="
            org.talend.core.model.process.INode
            org.talend.core.model.process.ElementParameterParser
            org.talend.core.model.metadata.IMetadataTable
            org.talend.core.model.metadata.IMetadataColumn
            org.talend.core.model.process.IConnection
            org.talend.core.model.process.IConnectionCategory
            org.talend.designer.codegen.config.CodeGeneratorArgument
            org.talend.core.model.metadata.types.JavaTypesManager
            org.talend.core.model.metadata.types.JavaType
            java.util.List
            java.util.Map      
        "
    %>
    <%
        CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
        INode node = (INode)codeGenArgument.getArgument();
        String cid = node.getUniqueName(); 
        List<Map<String, String>> lines = (List<Map<String,String>>)ElementParameterParser.getObjectValue(node, "__ADDRESSES__");
    %>
    java.util.List<String> addresses_<%=cid %> = new java.util.ArrayList<String>();
    <%
      for (int i=0; i<lines.size(); i++) {
        Map<String, String> line = lines.get(i);
    %>
        addresses_<%=cid %>.add(<%= line.get("USERNAME") %> + "@" + <%= line.get("DOMAIN") %>);
    <%
      }
    %>
    int nb_line_<%=cid %> = 0;

    Ce fichier javajet définir trois variables :

    • lines, de type List, pour stocker toutes les lignes de la table renseignées par l'utilisateur,
    • addresses_<%=cid %>, de type List, pour stocker les concaténations des colonnes USERNAME et DOMAIN.
    • nb_line, pour alimenter le nombre de lignes traitées par le composant tTutorialRow.
  2. Ouvrez tTutorialRow_main.javajet dans un éditeur de fichier texte et définissez la partie principale du code javajet du composant, comme suit :
    <%@ jet
        imports="
            org.talend.core.model.process.INode
            org.talend.core.model.process.ElementParameterParser
            org.talend.core.model.metadata.IMetadataTable
            org.talend.core.model.metadata.IMetadataColumn
            org.talend.core.model.process.IConnection
            org.talend.core.model.process.IConnectionCategory
            org.talend.designer.codegen.config.CodeGeneratorArgument
            org.talend.core.model.metadata.types.JavaTypesManager
            org.talend.core.model.metadata.types.JavaType
            java.util.List
            java.util.Map      
        "
    %>
    <%
        CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
        INode node = (INode)codeGenArgument.getArgument();
        String cid = node.getUniqueName(); 
    %>
        String[] adresses_<%=cid %> = addresses_<%=cid %>.toArray(new String[] {});
         
        System.out.print(nb_line_<%=cid %>++ + ": ");
        for (int i_<%=cid %> = 0; i_<%=cid %> < adresses_<%=cid %>.length; i_<%=cid %>++ )
        {
          System.out.print(adresses_<%=cid %>[i_<%=cid %>]);
          if (i_<%=cid %> < adresses_<%=cid %>.length-1) System.out.print(",");
        }  
        System.out.println();

    Comme décrit dans l'article Modèle de génération de code pour les composants, la partie principale du code Java sera exécutée à chaque ligne du flux de données entrant. Cela affiche dans la console le nombre de lignes et la liste des adresses e-mail.

  3. Ouvrez tTutorialRow_end.javajet dans un éditeur de fichier texte et modifiez la fin du code comme suit :
    <%@ jet
        imports="
            org.talend.core.model.process.INode
            org.talend.core.model.process.ElementParameterParser
            org.talend.core.model.metadata.IMetadataTable
            org.talend.core.model.metadata.IMetadataColumn
            org.talend.core.model.process.IConnection
            org.talend.core.model.process.IConnectionCategory
            org.talend.designer.codegen.config.CodeGeneratorArgument
            org.talend.core.model.metadata.types.JavaTypesManager
            org.talend.core.model.metadata.types.JavaType
            java.util.List
            java.util.Map      
        "
    %>
    <%
        CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
        INode node = (INode)codeGenArgument.getArgument();
        String cid = node.getUniqueName(); 
    %>  
        globalMap.put("<%=cid %>_NB_LINE",nb_line_<%=cid %>);

    Dans cet exemple, la variable nb_line est mise dans globalMap afin de pouvoir être réutilisée dans le Job. Le suffixe de la clé est NB_LINE, qui est le nom de la variable déclarée à la fin du descripteur de fichier XML tTutorialRow_java.xml.

Installation et test du composant créé

Une fois les fichiers créés et définis pour un composant personnalisé, vous pouvez installer ce dernier dans votre Studio Talend pour l'utiliser dans vos Jobs.

Cette procédure décrit les étapes d'installation du composant tTutorialRow que vous venez de créer. Pour plus d'informations concernant l'installation, la mise à jour et le dépannage d'un composant personnalisé, consultez Installation et mise à jour d'un composant personnalisé.

Avant de commencer

Si votre nouveau composant nécessite des Jar pour fonctionner, assurez-vous que ces Jar sont toujours disponibles dans <studio>/configuration/.m2/repository/org/talend/libraries. Pour plus d'informations concernant l'import de Jar externes dans le Studio, consultez Installation de modules externes.

Procédure

  1. Créez un répertoire dédié aux composants personnalisés dans votre système de fichiers, par exemple : D:/custom_components.
  2. Copiez le dossier du composant tTutorialRow et collez-le dans le répertoire du composant dédié.

    Le chemin de ce composant est D:/custom_components/tTutorialRow/.

  3. Démarrez votre Studio Talend.
  4. Sélectionnez Window > Preferences dans le menu, développez Talend > Components et parcourez jusqu'au champ User component folder.
  5. Saisissez le chemin d'accès à votre dossier contenant les composants personnalisés et cliquez sur OK.
  6. Recherchez le composant tTutorialRow, en saisissant son nom dans le champ de recherche de la Palette afin de vérifier que vous avez bien installé le composant.
  7. Vérifiez que le composant fonctionne dans un Job Talend.

    Comme exemple, créez un Job simple contenant un tRowGenerator et un tTutorialRow, puis configurez les composants comme suit :

    • Configurez le tRowGenerator pour générer cinq lignes de chaînes de caractères aléatoires.
    • Spécifiez les noms des utilisateurs et des domaines afin de construire les adresses e-mail dans la table Addresses du composant tTutorialRow.

    Lorsque le Job est exécuté, le tTutorialRow doit afficher dans la console le numéro de ligne et la liste des adresses e-mail.

Informations complémentaires