Jim,

You can use InvokeScriptedProcessor [1] rather than ExecuteScript for
this. ExecuteScript basically lets you provide an onTrigger() body,
which is called when the ExecuteScript processor "has work to do".
None of the other lifecycle methods are available.  For
InvokeScriptedProcessor, you actually script up a subclass of
Processor [2], and it will have its initialize() method called by
InvokeScriptedProcessor when it is scheduled to run (once per
"start"). If you stop and start InvokeScriptedProcessor, or change a
property, the scripted initialize() method will be called again.

One caveat is that the Processor interface does not provide a "stop"
or "shutdown" method, so you will need to make sure that any created
objects (connections, clients, e.g.) will be cleaned up gracefully
when the Processor object is garbage-collected. This is not always
easy to do, and the alternative is to write a full custom processor.
There is an open Jira [3] to invoke annotated lifecycle methods such
as @OnStopped on the scripted Processor instance.

I have a simple example (albeit in Groovy) [4], but the same approach
you're likely using for Jython should apply there too. Please let me
know if you have any questions or issues in setting that up.

Regards,
Matt

[1] 
https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi.processors.script.InvokeScriptedProcessor/index.html
[2] 
https://github.com/apache/nifi/blob/master/nifi-api/src/main/java/org/apache/nifi/processor/Processor.java
[3] https://issues.apache.org/jira/browse/NIFI-2215
[4] 
http://funnifi.blogspot.com/2016/02/writing-reusable-scripted-processors-in.html

On Tue, Mar 28, 2017 at 10:48 AM, James McMahon <[email protected]> wrote:
> Hello. I am interested in calling a python script from ExecuteScript that
> sets up Python loggers and establishes file handles to those loggers for use
> by other python scripts called later in the workflow by other ExecuteScript
> processors. Is there a means to execute a script at workflow inception -
> once only, not once per flowfile? I have found some retry count examples in
> the open source literature, but those seem to enforce counts at the flowfile
> level. In other words the counter restriction sets to 0 for each flowfile.
> Thank you for any insights. -Jim

Reply via email to