Jump to: navigation, search

SMILA/Specifications/RecordWorkflowDiscussion09

Based on discussion with Sebastian Voigt

Wanted

  1. it's wanted to have ability to filter record in Router/Listener before starting any operations/ or blackboard synchronization
  2. it's wanted to configure ODEWorkflowProcessor with record-filter used.

Suggested

The main idea is to configure both parameters in the Router/Listener configuration


WorkflowProcessor API update

Now WorkflowProcessor API accepts series of Ids only for starting pipelines.

public interface WorkflowProcessor {
  ...
  Id[] process(String workflowName, Id[] recordIds) throws ProcessingException;
  ...
}

ODEWorkflowProcessor implementation is reading property "record.filter" from it's own configuration file and filtering all records before processing with only one filter.

It's suggested to configure record filter in Router/Listener rules. WorkflowProcessor public API should accepts record or Id + filterName.

public interface WorkflowProcessor {
  ...
  void process(String workflowName, Record record) throws ProcessingException;
  ...
}

Or

public interface WorkflowProcessor {
  ...
  void process(String workflowName, Id id, String filterName) throws ProcessingException;
  ...
}

Router/Listener configuration update

Now Router/Listener based on configured list of tasks to execute.

<Task>
  <Send Broker="b1" Queue="q1" RecordFilter="myFilter"/>
</Task>
<Task>
  <Process Workflow="SomePipelineName"/>
</Task>

Depending on flags Router/Listener did blackboard synchronization/commit automatically at the start of Task list process and before/after operations.

It's suggested

  1. to configure input filter in Task node as attribute
  2. to configure filter for every task as attribute
<Task RecordFilter="InputFilterForRule">
  <Process Workflow="SomePipelineName" RecordFilter="workflow-filter1"/>
</Task>

The result of configuration:

  1. input record will be filtered by the filter "InputFilterForRule"
  2. record will be synchronized with blackboard
  3. "SomePipelineName" pipeline will be executed with record-filter "workflow-filter1"
  4. record will be synchronized with blackboard
  5. record will be committed