问题
I have 2 action nodes in workflow : javaMainAction
and javaMainAction2
.
My LoadApplicationService
method returns SUCCESS or FAILURE after execution.
How to check response if SUCCESS is returned?
workflow.xml :
<workflow-app name="WorkflowJavaMainAction" xmlns="uri:oozie:workflow:0.1">
<start to="javaMainAction" />
<action name="javaMainAction">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<main-class>in.augmentiq.maxiq.dataschedular.services.LoadApplicationService</main-class>
<arg>${workflowAppPath}/javaMainActionInput/schedule_config.properties</arg>
<arg>${workflowAppPath}/javaMainActionInput/appRequestParams.json</arg>
<capture-output/>
</java>
<ok to="javaMainAction2" />
<error to="killJobAction" />
</action>
<action name="javaMainAction2">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<main-class>in.augmentiq.maxiq.dataschedular.services.LoadApplicationService</main-class>
<arg>${workflowAppPath}/javaMainAction2Input/schedule_config.properties</arg>
<arg>${workflowAppPath}/javaMainAction2Input/appRequestParams.json</arg>
<capture-output/>
</java>
<ok to="end" />
<error to="killJobAction" />
</action>
<kill name="killJobAction">
<message>"Killed job due to error: ${wf:errorMessage(wf:lastErrorNode())}"</message>
</kill>
<end name="end" />
</workflow-app>
回答1:
LoadApplicationService
needs to write the output into a key=pair
format e.g. response=SUCCESS
. The you can inspect the output like this:
${wf:actionData("action-name")["key"]}
Use Decision control node for comparing and taking decision Decision_Control_Node.
Edit for the comment: How to write property in a java action.
The main() method writes a Property file to the path specified in the oozie.action.output.properties
ENVIRONMENT variable. Reference
public static void main (String[] args)
{
String fileName = args[0];
try{
File file = new File(System.getProperty("oozie.action.output.properties"));
Properties props = new Properties();
props.setProperty("PASS_ME", "123456");
OutputStream os = new FileOutputStream(file);
props.store(os, "");
os.close();
System.out.println(file.getAbsolutePath());
}
catch (Exception e) {
e.printStackTrace();
}
}
来源:https://stackoverflow.com/questions/41381464/how-does-one-check-completion-status-of-loadapplicationservice