Le fichier modèle Java
- <component_name>_begin.javajet
- <component_name>_main.javajet
- <component_name>_end.javajet
Pour plus d'informations concernant le modèle de génération de code pour les composants, consultez Modèle de génération de code pour les composants.
JET est un moteur "model to text" qui vous permet de générer une sortie (texte) à partir d'un modèle EMF. Vous pouvez par exemple générer du SQL, du Java, du XML, du texte, du HTML, etc. JET utilise une technologie de modèle très proche de la syntaxe des pages Java Server Pages (JSP).
Dans le Studio Talend, les fichiers des modèles sont traduits en code Java. Un fichier de modèle contient deux types de code Java : le code modèle et le code Java de sortie. Le code modèle est compris dans les balises <% %>. Dans le cas de JSP, les classes requises sont importées dans la partie supérieure du fichier de modèles. Elles peuvent varier en fonction de vos besoins. Cependant, il existe des classes par défaut qui sont généralement ajoutées à chaque fichier de modèle .javajet.
<%@ 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
"
%>
Cette section du modèle JET est particulière : il s'agit de la section d'import JET. Vous en aurez besoin dans les fichiers de modèles, car ils sont compilés séparément. Les classes listées dans la section d'import sont spécifiques à Talend.
Les lignes ci-dessous sont présentes dans chaque fichier de modèle javajet après la section d'import JET.
<%
CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
INode node = (INode)codeGenArgument.getArgument();
String cid = node.getUniqueName();
%>
Ces codes sont utilisés pour récupérer les valeurs des propriétés définies du composant et pour obtenir le nom unique du composant. Chaque composant dans un Job est un nœud dont l'interface est INode. cid est un identifiant et possède un nom unique.
Un composant peut être utilisé plusieurs fois dans un Job et vous ne pouvez pas prédire le nom des variables utilisées dans les autres composants, ou prédire combien de fois un même composant sera utilisé, comment les composants sont interconnectés, etc. Talend fournit une méthode sûre pour obtenir une variable unique : ajouter le nom unique du composant comme suffixe pour chaque variable déclarée dans le fichier de modèle. Par exemple :
int nb_line_<%=cid %> = 0;
tFileInputDelimited_1 est le nom unique du composant tFileInputDelimited dans le Job ci-dessous :
Cette ligne est traduite dans le code Java ci-dessous, dans le code généré par le Job :
int nb_line_tFileInputDelimited_1 = 0;
Voici une partie du code d'un fichier de modèle :
<%
public void useShareConnection(INode node) {
String sharedConnectionName = ElementParameterParser.getValue(node, "__SHARED_CONNECTION_NAME__");
%>
String sharedConnectionName_<%=cid%> = <%=sharedConnectionName%>;
conn_<%=cid%> = SharedDBConnection.getDBConnection("<%=this.getDirverClassName(node)%>",url_<%=cid%>,userName_<%=cid%> , password_<%=cid%> , sharedConnectionName_<%=cid%>);
<%
}
%>
Le code modèle est compris entre les balises <% %> et le code de sortie Java, qui fera partie du code généré par le Job et sera exécuté, s'il n'est pas entouré des balises <% %>. Dans ce cas, les deux lignes suivantes constituent le code de sortie Java :
String sharedConnectionName_<%=cid%> = <%=sharedConnectionName%>;
conn_<%=cid%> = SharedDBConnection.getDBConnection("<%=this.getDirverClassName(node)%>",url_<%=cid%>,userName_<%=cid%> , password_<%=cid%> , sharedConnectionName_<%=cid%>);
À la fin du modèle, vous devez fermer les blocs ouverts :
<%
}
%>