The functionality of jBPM is split into modules. Each module
has a definition and an execution (or runtime) part. The central
module is the graph module, made up of the
ProcessDefinition
and the ProcessInstance
.
The process definition contains a graph and the process instance represents
one execution of the graph. All other functionalities of jBPM are grouped into
optional modules. Optional modules can extend the graph module with extra
features like context (process variables), task management, timers, ...
The pluggable architecture in jBPM is also a unique mechanism to
add custom capabilities to the jBPM engine. Custom process definition information
can be added by adding a ModuleDefinition
implementation to the process definition.
When the ProcessInstance
is created, it will create an instance for every
ModuleDefinition
in the ProcessDefinition
. The ModuleDefinition
is used
as a factory for ModuleInstances
.
The most integrated way to extend the process definition information is
by adding the information to the process archive and implementing a
ProcessArchiveParser
. The ProcessArchiveParser
can parse the information added to the process archive, create your custom
ModuleDefinition
and add it to the ProcessDefinition
.
public interface ProcessArchiveParser { void writeToArchive(ProcessDefinition processDefinition, ProcessArchive archive); ProcessDefinition readFromArchive(ProcessArchive archive, ProcessDefinition processDefinition); }
To do its work, the custom ModuleInstance
must be notified of
relevant events during process execution. The custom ModuleDefinition
might add ActionHandler
implementations upon events in the process that
serve as callback handlers for these process events.
Alternatively, a custom module might use AOP to bind the custom instance into the process execution. JBoss AOP is very well suited for this job since it is mature, easy to learn and also part of the JBoss stack.