Task Writer
The following sample Task Writer passes a filter that would have gathered the item IDs to a query that will directly insert (insert select) into the database. Notice the parameter CHUNK_TASK_WRITE. The writer must check for this specifically but it is writing directly to the table rather than relying on the platform.
@Override public Long writeTasks(JSONObject taskFilters) throws CoreIXMException { InventoryPlanningTaskGenerator.populateTaskFilters(taskFilters); if (modulePrefix != null && engineName != null && configName != null) { JSONObject configParams = IXMEngineEnv.getInstance().getEngineConfigParams(modulePrefix, engineName, configName); //expected additional IXM engine config parameters if (configParams != null) { if(configParams.has(ItemTaskWriterUtil.CHUNK_TASK_WRITE)) { taskFilters.put(ItemTaskWriterUtil.CHUNK_TASK_WRITE, configParams.optBoolean(ItemTaskWriterUtil.CHUNK_TASK_WRITE)); } } } ItemTaskWriterUtil taskWriter = new ItemTaskWriterUtil("IVP.TaskWriterSql", "GenerateTasksByItem"); taskWriter.writeTasks(taskFilters, modulePrefix + "_" + engineName + "_" + configName); return taskWriter.getJobId(); }POSSIBLE PROBLEM - Task Generator or Writer Spikes the App Server or Database
The logic in the Task Generator or Writer is limited to the one App Server and the Database. There is no possibility for horizontal or vertical scalability. If you have to create 400,000 tasks (1 per item and 400,000 items), then you have to have 1 App Server and the Database dedicated to inserting those records.