Large Plan and Order Orchestration

The overall orchestration process and state machine design has been modified to enable the orchestrator to receive large orders and orchestrate the corresponding large plans to completion. An example of a large order is an order with 1300 order lines and four plan items getting generated from each order line.

Previously, the state machine was generated in a single thread, which received the message. This has been modified to do this task in parallel according to the configuration. This enables the application to leverage the modern CPU multicore capabilities to speed up the state machine XML generation by processing the plan items in parallel.

The conversion of state machine templates to complete state machine representation has been optimized by modifying the data structures related to string manipulation so that lesser objects must be created and basic string manipulation operations like replace and search are faster.

The SCXML implementation being used has been enhanced to make the state machine operations faster. It would save a lot of time if instead of scanning the entire state machine for completed plan items, a predefined count is used to compare against the plan items in one iteration.

For regular orders, a single state machine is formed for the entire plan. This process has been changed for orders with a large plan. A child state machine is created per plan item along with the state machine for the order or plan. This allows for fast evaluation of conditions when events are fired on the state machine because the conditions are not evaluated across the states, but by using the values stored in the database tables. The database condition evaluation is enforced when the state machine is split.

For regular orders, the state machine transitions have been event-enabled so that a redundant condition evaluation does not occur on each event getting fired on the state machine. By extra processing in memory, the state machine has been tweaked to make the transitions specific and make the operations faster.

The following flags have been introduced to enable, disable, and control the large plan orchestration:
<ConfValue description="Generator Thread Count" isHotDeployable="true" name="Generator Thread Count" propname="com.tibco.fom.orch.generator.threadCount" readonly="false" sinceVersion="3.0" visibility="Basic">
   <ConfNum default="20" value="20" />
</ConfValue>
<ConfValue description="Split StateMachine Threshold" isHotDeployable="true" name="Split StateMachine Threshold" propname="com.tibco.fom.orch.generator.splitStateMachineThreshold" readonly="false" sinceVersion="3.0" visibility="Basic">
   <ConfNum default="50" value="50" />
</ConfValue>
<ConfValue description="Enable DB Condition Evaluator for Statemachines for Simple StateMachine" isHotDeployable="true" name="Enable DB Condition Evaluator for Statemachines for SimpleStateMachine" propname="com.tibco.fom.orch.generator.enableDBConditionEvaluatorStateMachine" readonly="false" sinceVersion="3.0" visibility="Basic">
   <ConfBool default="false" value="false" />
</ConfValue>
The following configurations have been introduced in ConfigValues_OMS.xml under the category "OMS UI Grid View and Gantt View Pagination" to support large plans on the OMS UI:
<Category description="OMS UI Grid View and Gantt View Pagination" name="Grid View and Gantt View Pagination" visibility="Basic">
	<ConfValue description="Enable Grid View and Gantt View Pagination" name="Enable Grid View and Gantt View Pagination" propname="com.tibco.af.omsui.pagination.enable" sinceVersion="3.0" visibility="Basic">
		<ConfBool default="false" value="false"/>
	</ConfValue>
	<ConfValue description="OMS UI Grid View Page Size" name="Grid View Page Size" propname="com.tibco.af.omsui.gridView.pageSize" sinceVersion="3.0" visibility="Basic">
		<ConfNum default="20" value="20"/>
	</ConfValue>
	<ConfValue description="OMS UI Gantt View Page Size" name="Gantt View Page Size" propname="com.tibco.af.omsui.ganttView.pageSize" sinceVersion="3.0" visibility="Basic">
		<ConfNum default="10" value="10"/>
	</ConfValue>
</Category>

Under this category, use the property com.tibco.af.omsui.pagination.enable to enable or disable the OMS UI pagination for plan view. Use the property com.tibco.af.omsui.gridView.pageSize to set the page size for Grid View, and use the property com.tibco.af.omsui.ganttView.pageSize to set the page size for GANTT view.