Package lumis.portal.processqueue

Provides the objects for asynchronous queued processing.

Overview

IProcessQueueManager is the main entry point for this API.

A task is defined by implementing IQueueTask. The task may then be scheduled for execution by calling IProcessQueueManager.schedule(lumis.portal.processqueue.IQueueTask, lumis.portal.processqueue.QueueTaskScheduleConfig). The task scheduling configuration is specified in a QueueTaskScheduleConfig object.

Tasks Order

Tasks are considered to be queued in the order corresponding to the order of the calls to IProcessQueueManager.schedule(lumis.portal.processqueue.IQueueTask, lumis.portal.processqueue.QueueTaskScheduleConfig) that included them. If a task's scheduled date-time is configured, it will not execute before that time.

Tasks may run in parallel or in different order if they do not have dependencies between each other. Tasks that are not currently available for execution, due to being scheduled in the future, do not block other tasks.

Tasks Dependency

Tasks may have dependencies. These dependencies must be reflected in the shared and exclusive locks they are associated with.

A task with a shared lock will not allow any newer task with the same value as an exclusive lock to execute before it. A task with an exclusive lock will not allow any newer task with the same value as either shared or exclusive lock to execute before it. Tasks that are not currently available for execution, due to being scheduled in the future, will not have their lock rules applied until they are available for execution.

Each task may have any number of shared or exclusive locks. A task will automatically be associated with an exclusive lock with the value of its process identifier. It may be used as a lock when scheduling other tasks to create a dependency specific to that task process.

Since:
6.1.0
Version:
$Revision$ $Date$