Empêcher les erreurs provoquées par la limite de 65535 octets dans la génération de code
Dans le Studio Talend, certains Jobs peuvent échouer lors de la compilation de code avec une erreur liée à la limite de 65535 octets. Cet article explique la cause de cette erreur et offre des idées et solutions de dépannage.
Par exemple, si un sous-Job contient de trop nombreux composants ou s'il y a trop de colonnes dans le schéma, la compilation du Job Talend peut échouer, produisant cette exception :
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The code of method tFileInputDelimited_1Process(Map) is exceeding the 65535 bytes limit
Cela se produit parce que le Studio Talend est un générateur de code et crée du code Java pour chaque Job Talend. Chaque sous-Job est une méthode dans la classe de Job. Si un sous-Job est trop lourd, la taille finale du code généré dépasse les 65536 octets. Selon les spécifications Java, la somme de code pour cette méthode non native et non abstraite est limitée à une taille de 65536 octets, pour que le code généré d'un sous-Job ne dépasse pas cette limite.
Vous pouvez tenter d'empêcher cette erreur en ajoutant le paramètre suivant dans le fichier config.ini situé dans le dossier configuration du répertoire d'installation du Studio Talend :
deactivate_extended_component_log=true
Une fois cette option configurée, les dépendances de vos Jobs sont mises à jour. Si vous utilisez l'Intégration Continue, il est recommandé de générer à nouveau tous les POM du projet. Pour ce faire, allez dans Project Settings (Paramètres du projet), développez les nœuds et cliquez sur Force full re-synchronize poms (Forcer la resynchronisation complète des POM).
Si le problème n'est pas résolu par l'ajout du paramètre ci-dessus, utilisez une solution de contournement et essayez d'optimiser le Job en réduisant sa taille, pour réduire la taille du code final généré d'un sous-Job :
- Minimisez le nombre de composants dans le sous-Job, notamment en évitant les composants de débogage comme le tLogRow.
- Divisez le sous-Job en plusieurs sous-Jobs.
Exemple de nouvelle conception d'un sous-Job pour réduire sa taille
Voici un Job très simple comprenant un sous-Job unique qui contient seulement trois composants. Si ce Job générait une erreur relative à la limite de 65535 octets au cours de processus de build, l'erreur concernerait le sous-Job unique de ce Job. Il faudrait alors réduire le nombre de composants dans ce sous-Job.
L'erreur peut ressembler à ceci :
At least Job "HelloWorld" has a compile errors, please fix and export again.
Error Line: 23424
Detail Message: The code of method tRowGenerator_1Process() is exceeding the 65535 bytes limit
Chaque sous-Job est nommé en fonction du premier composant utilisé pour démarrer le sous-Job. Le nom de la méthode spécifié dans le message d'erreur, tRowGenerator_1Process()
, vous permet de savoir que cette erreur se produit dans le sous-Job ayant démarré par le composant tRowGenerator_1Process()
. Dans ce cas, le Job ne contient qu'un sous-Job, c'est donc forcément ce sous-Job qui pose problème, mais vous pourriez avoir plusieurs sous-Jobs.
Vous pouvez diviser ce sous-Job en deux sous-Jobs, un avec deux composants et un avec le dernier composant.
Diviser le sous-Job problématique en deux pourrait permettre de résoudre ce problème.