2017-02-13 2 views
0

Я хочу создать переменную, которая должна быть доступна всем действиям в рабочем процессе Oozie. Я попытался создать его, как показано ниже. Но выражение EL не получает оценку, в результате значение переменной current_ts как само выражение EL. Может кто-нибудь, пожалуйста, пролил свет на это?Как создать переменную с выражением EL для использования во всех действиях рабочего процесса oozie?

<workflow-app xmlns="uri:oozie:workflow:0.4" name="no-op-wf"> 
    <parameters> 
    <property> 
     <name>current_ts</name> 
     <value>${replaceAll((replaceAll((replaceAll((timestamp()),"-","")),"T","_")),":","")}</value> 
    </property> 
    </parameters> 
    <start to="test"/> 
    <kill name="test"> 
    <!--message Just to show that this expression works if used here>Timestamp - [${replaceAll((replaceAll((replaceAll((timestamp()),"-","")),"T","_")),":","")}</message--> 
    <message>Timestamp - ${current_ts}</message> <!-- this will print expression but not evaluate it --> 
    </kill> 
    <end name="end"/> 
</workflow-app> 
+1

Не могли бы вы попробовать использовать глобальные или конфигурации тегов, так что свойство доступно через workflow.xml –

ответ

0

Если я создаю свойство общемирового> Конфигурация-> в рабочем процессе и ссылаться на него в других действиях ВФА того выражение EL в собственности не будет оценено.

Как обходной путь, я завернул wf в качестве вспомогательного wf и создал свойство global-> configuation-> в родительском wf, а затем передал его в subwf. с этим обходным методом выражение EL оценивалось.

Родитель WF:

<workflow-app xmlns="uri:oozie:workflow:0.4" name="main-wf"> 
    <global> 
    <configuration> 
     <property> 
     <name>run_ts</name> 
     <value>${replaceAll((replaceAll((replaceAll((timestamp()),"-","")),"T","_")),":","")}</value> 
     </property> 
    </configuration> 
    </global> 

<action name="tbl-subwf"> 
    <sub-workflow> 
     <app-path>${AppPath}</app-path> 
     <propagate-configuration/> 
</sub-workflow> 
    <ok to="join-node"/> 
    <error to="fail"/> 
    </action> 
<kill name="fail"> 
    <message>Sub workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> 
    </kill> 
    <end name="end"/> 
</workflow-app> 
+0

Вы можете обнаружить, что пост полезный (раздел 2) для разности между * параметрами * и * свойства * ... http://stackoverflow.com/questions/38337362/oozie-properties-defined-in-file-referenced-in-global-job-xml-not-visible-in-wo/38338713# 38338713 –

0

В Parameterization of Workflows он отметил, что:

EL выражения могут быть использованы в значениях конфигурации действий и решения узлов. Они могут использоваться в значениях атрибутов XML и в элементах XML и значениях атрибутов.

Нельзя использовать в именах элементов XML и атрибутов. Они не могут использоваться в имени узла, и они не могут использоваться в элементах перехода узла.

, но вы можете использовать его в координаторе

Смежные вопросы