Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Use Case
    • A number of orders are added in an arbitrary sequence and at arbitrary points in ime to a job chain - either from a file order source watching incoming files, from Ad Hoc orders or from permanent orders. The orders should be forced into serialized processing based on some predefined criteria.
    • Each order comes either
      • with a parameter that specifies a numeric sequence,
      • with a parameter that specifies a business date, e.g. for the data files that are referenced by the order and that should be loaded to a data warehouse in sequence of the business dates,
      • or without parameters and should be processed in alphabetical or numeric sequence of its order id.
    • Orders should be processed strictly in sequence - either ascending or descending. If the next order does not provide the expected value then it is suspended and the job chain waits for an order with the expected value to arrive. After arrival of an order with the expected value all suspended orders are checked if they provide the expected value required for the successor order. 
  • Solution Outline
    • A single job is added to the top of a job chain and that will
      • check for exepected values and suspend incoming orders until an order with the expected value arrives.
      • move orders that match expected values to the next job node in the job chain and restart evaluation of suspended orders.
  • References

...

Flowchart
job_chain [label="Job Chain\ntriggered by File Orders\nor by Ad Hoc Orders",fillcolor="orange"]
job_sorter [label="Job Order SorterExpect",fillcolor="lightskyblue"]
job_next_job [label="Next Job", fillcolor="lightskyblue"]

sorterexpect_ordersorder_completedvalue [shape=diamond,label="listorder ofprovides ordersexpected completedvalue?",fillcolor="white"]
order_suspend [label="Suspend Order",fillcolor="white"]
order_wait [label="Wait for next Order",fillcolor="white"]
order_sort [label="Sort Orders",fillcolor="white"]
order_move [label="Move Orders to Next Job",fillcolor="white"]
order_C [shape="ellipse",label="Order C",fillcolor="violet"]
order_B [shape="ellipse",label="Order B",fillcolor="violet"]
order_A [shape="ellipse",label="Order A",fillcolor="violet"]

sortedsequenced_order_A [shape="ellipse",label="Order A",fillcolor="violet"] 
sortedsequenced_order_B [shape="ellipse",label="Order B",fillcolor="violet"]
sortedsequenced_order_C [shape="ellipse",label="Order C",fillcolor="violet"]
 
order_A -> job_chain
order_B -> job_chain
order_C -> job_chain
job_chain -> job_sorterexpect
job_sorterexpect -> sorterexpected_ordersorder_completedvalue
sorterexpect_ordersorder_completedvalue -> order_sortmove [label=" yes "]
sorterexpect_ordersorder_completedvalue -> order_suspend [label=" no "]
order_suspend -> order_wait -> job_sorterexpect
order_sort -> order_move -> sorted_order_C
sortedsequenced_order_C -> sorted_order_B
sortedsequenced_order_B -> sorted_order_A
sortedsequenced_order_A -> job_next_job

Implementation

...