{"id":1387,"date":"2015-04-08T10:41:48","date_gmt":"2015-04-08T09:41:48","guid":{"rendered":"http:\/\/blog.devportfolio.net\/?p=1387"},"modified":"2015-04-08T10:41:48","modified_gmt":"2015-04-08T09:41:48","slug":"talend-job-appelant-un-autre-job","status":"publish","type":"post","link":"https:\/\/devportfolio.net\/wp-dev-blog\/talend-job-appelant-un-autre-job\/","title":{"rendered":"Talend :  Faire communiquer mes Jobs"},"content":{"rendered":"<p>Dans ce post je propose un pattern tr\u00e8s pratique qui consiste \u00e0 cr\u00e9er un job ma\u00eetre capable de lire du flux de donn\u00e9es envoy\u00e9 par ses fils. <\/p>\n<p>Le job principal appelle un autre job :<\/p>\n<ul>\n<li>en passant des variables de contexte<\/li>\n<li>en r\u00e9cup\u00e9rant les variables positionn\u00e9es par le job appel\u00e9.<\/li>\n<li>le job appel\u00e9, m\u00eame en cas d&rsquo;erreur ne doit pas planter le job parent.<\/li>\n<\/ul>\n<p>Ce cas d\u2019utilisation peut \u00eatre utilis\u00e9 si le job ma\u00eetre souhaite garder le contr\u00f4le sur ces fils. <\/p>\n<p>Personnellement j&rsquo;utilise ce pattern pour d\u00e9terminer un code retour de l&rsquo;ex\u00e9cution du job (0 => OK sinon KO). En cas d&rsquo;erreur d&rsquo;un des fils (sous job dont l&rsquo;option \u00ab\u00a0Arr\u00eate en cas d&rsquo;erreur du fils\u00a0\u00bb est d\u00e9coch\u00e9) le job ma\u00eetre r\u00e9cup\u00e8re son \u00e9tat et r\u00e9agit en cons\u00e9quence.<\/p>\n<p>Pour l&rsquo;exemple, <strong>nous allons cr\u00e9er le job Master M_ParentFils_Parent et poser 3 composants<\/strong> : 1 tLoop, 1 tRunJob, 1 tJavaRow (pour afficher le retour du job fils).<\/p>\n<p><a href=\"https:\/\/devportfolio.net\/wp-dev-blog\/wp-content\/uploads\/2015\/04\/faire_com_sous_jobs_1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/devportfolio.net\/wp-dev-blog\/wp-content\/uploads\/2015\/04\/faire_com_sous_jobs_1.jpg\" alt=\"faire_com_sous_jobs_1\" width=\"709\" height=\"101\" class=\"aligncenter size-full wp-image-1388\" \/><\/a><\/p>\n<p>Param\u00e8tres du tLoop :<\/p>\n<p><a href=\"https:\/\/devportfolio.net\/wp-dev-blog\/wp-content\/uploads\/2015\/04\/faire_com_sous_jobs_2.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/devportfolio.net\/wp-dev-blog\/wp-content\/uploads\/2015\/04\/faire_com_sous_jobs_2.jpg\" alt=\"faire_com_sous_jobs_2\" width=\"761\" height=\"215\" class=\"aligncenter size-full wp-image-1389\" \/><\/a><\/p>\n<p>Param\u00e8tres du tRunJob :<\/p>\n<p><a href=\"https:\/\/devportfolio.net\/wp-dev-blog\/wp-content\/uploads\/2015\/04\/faire_com_sous_jobs_3.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/devportfolio.net\/wp-dev-blog\/wp-content\/uploads\/2015\/04\/faire_com_sous_jobs_3.jpg\" alt=\"faire_com_sous_jobs_3\" width=\"1024\" height=\"249\" class=\"aligncenter size-full wp-image-1393\" \/><\/a><\/p>\n<p>Param\u00e8tres du tJavaRow :<\/p>\n<p><a href=\"https:\/\/devportfolio.net\/wp-dev-blog\/wp-content\/uploads\/2015\/04\/faire_com_sous_jobs_4.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/devportfolio.net\/wp-dev-blog\/wp-content\/uploads\/2015\/04\/faire_com_sous_jobs_4.jpg\" alt=\"faire_com_sous_jobs_4\" width=\"815\" height=\"188\" class=\"aligncenter size-full wp-image-1394\" \/><\/a><\/p>\n<p><strong>Cr\u00e9er ensuite un job fils M_ParebtFils_Fils avec 4 composants<\/strong> : 1 tJava, 1 tPostJob, 1 tFixedFlowInput, 1 tBufferOutput et <strong>2 variables de context : <\/strong> Nb_de_Fois (Integer) et Message_Retour (Sring).<\/p>\n<p><a href=\"https:\/\/devportfolio.net\/wp-dev-blog\/wp-content\/uploads\/2015\/04\/faire_com_sous_jobs_5.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/devportfolio.net\/wp-dev-blog\/wp-content\/uploads\/2015\/04\/faire_com_sous_jobs_5.jpg\" alt=\"faire_com_sous_jobs_5\" width=\"528\" height=\"315\" class=\"aligncenter size-full wp-image-1395\" \/><\/a><\/p>\n<p>Param\u00e8tres du tJava :<\/p>\n<p><a href=\"https:\/\/devportfolio.net\/wp-dev-blog\/wp-content\/uploads\/2015\/04\/faire_com_sous_jobs_6.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/devportfolio.net\/wp-dev-blog\/wp-content\/uploads\/2015\/04\/faire_com_sous_jobs_6.jpg\" alt=\"faire_com_sous_jobs_6\" width=\"720\" height=\"158\" class=\"aligncenter size-full wp-image-1396\" \/><\/a><\/p>\n<p>Param\u00e8tres du tFixedFlowInput :<\/p>\n<p><a href=\"https:\/\/devportfolio.net\/wp-dev-blog\/wp-content\/uploads\/2015\/04\/faire_com_sous_jobs_7.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/devportfolio.net\/wp-dev-blog\/wp-content\/uploads\/2015\/04\/faire_com_sous_jobs_7.jpg\" alt=\"faire_com_sous_jobs_7\" width=\"905\" height=\"316\" class=\"aligncenter size-full wp-image-1397\" \/><\/a> <\/p>\n<p><strong>R\u00e9sultat :<\/strong><\/p>\n<p>A l&rsquo;ex\u00e9cution du job, le job Master <strong>M_PaentFils_Parent<\/strong> appelle 5 fois le sous job M_ParentFils_Fils en lui passant l&rsquo;indice de la boucle dans le param\u00e8tre nomm\u00e9 Nb_de_Fois. <\/p>\n<p>Le fils calcule si l&rsquo;indice est pair ou impair et retourne le r\u00e9sultat dans context.Message_Retour. La valeur du context.Message_Retour est enfin affich\u00e9e par le job Master dans la console.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans ce post je propose un pattern tr\u00e8s pratique qui consiste \u00e0 cr\u00e9er un job ma\u00eetre capable de lire du flux de donn\u00e9es envoy\u00e9 par ses fils. Le job principal appelle un autre job : en passant des variables de contexte en r\u00e9cup\u00e9rant les variables positionn\u00e9es par le job appel\u00e9. le job appel\u00e9, m\u00eame en [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[49,50,51,14],"class_list":["post-1387","post","type-post","status-publish","format-standard","hentry","category-talend","tag-fils","tag-job","tag-sous-job","tag-talend"],"_links":{"self":[{"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/posts\/1387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/comments?post=1387"}],"version-history":[{"count":0,"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/posts\/1387\/revisions"}],"wp:attachment":[{"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/media?parent=1387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/categories?post=1387"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/tags?post=1387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}