Workflow API
The following section will give you a brief overview about the architecture defined by the Imixs Workflow API. Next you find a short description of the individual workflow components and their concepts. As shown in Fig. 1, the framework consists of only a few interfaces and classes. So the concept is much easy and can used independent from different java technologies.

The WorkflowManager is the uppermost layer of each workflow system based on the Imixs Workflow API. A WorkflwoManager provides basic methods to process a workitem, find a workitem or remove a workitem. A workitem is the process instance inside a Workflow Management System which is conrolled by the WorkflowManager. The WorkflowManager works as a controller to manage and process workitems. An implementation of this interface typical provide functionality to persist workitems into a database.
The Model interface provides methods to access a workflow model describing how a workitem should be processed by the WorkflowManager. For this purpose, the model interface provides different methods to lookup process entities and activity entities. A process entity defines the status of a process instance. In a graphical workflow model a process entity is typical represented by a node. An activity entity defines an action which can be performed on a workitem and also the next status of a Workitem after processing is finished by the WorkflowManager. In a graphical workflow model an activity entity is typical represented by an edge.
Each process entity and activity entity can store a set of informations to provide the WorkflowManager with additional processing introductions. These informations are not predefined by the Imixs Workflow API and can diversify depending on the implementation of a workflow management system. There are different ways a Model can be implemented by a Workflow Management System. The Imixs Workflow provides an eclipse based graphical editor to define workflow models.

Plugins are workflow components which are implementing a concrete behavior of a workflow management system. A Plugin is called by the WorkflowManager to process a workitem. A plugin can implement application specific functionality. They are reusable components in a Workflow Management System and typical used by the application developer to design the behavior of the workflow application. The Imixs Workflow API provides a set of general Plugins like the HitoryPlugin or the AccessPlugin which can be used in each workflow Management System. But there are also technology specific plugins available. For example the Imixs MailPlugin can be use to send an email notification when a process step completes. See the Plugin API section for more detailed information.
The WorkflowKernel implements the core functionality of the Imixs Workflow API. The WorkflowKernel can start a new process instance and control the status of a workitem processed by a workflow system. When a WorkItem is processed by the WorkflowManager, the WorkflowKernel control the status defined by the workflow model. The WorkflowKernel is a kind of statemachine inside the workflow management system. But the WorkflowKernel is also responsible to initialize and run the workflow plugins provided by a workflow system. The WorkflowKernel provides the execution environment for plugins.
As an application developer you did not interact with the WorkflowKernel as this component is typical encapsulated by the Implementaion of a WorkflowManager.
The ItemCollection is the general Data Object used by the Imixs Workflow API. Each workitem processed by the Imixs Workflow is represented as an ItemCollection. But also all other entities like a process entity or an activity entity are represented as ItemCollections. An ItemColleciton is a kind of document with a set of attributes (Items). Each Item of an ItemCollectio has a name and a value. The value of an Item can be any java based data object which is serializeable. So the ItemCollection is a very flexible and easy to use generic value object. The ItemCollection provides methods which makes it easy to work with an ItemCollection creating or modify item values. See the Example page for more information about how to work with a ItemCollection.