This section contains information about major architectural decision that have been taken.
The class diagram below gives a rough graphical representation of the
most important classes involved in bexee. There are only three
activities shown (Invoke, Receive and
Sequence) for the sake of simplicity. For the same reason
other classes that might not be indispensable for understanding how
the classes work together have been omitted in the diagram.
For more information on the control flow of incoming messages, please refer to Process Executionin the Engine Architecture section.

This section documents the most important classes in bexee and their responsibilities.
The Manager class is used to deploy new BPEL processes
to bexee. It uses the BPELProcessFactory and
DAOFactory to parse and create a new
BPELProcess and make it persistent respectively.
An inbound request triggering a process execution will always arrive
at the BexeeProvider, which processes the incoming
request and passes it on to the Dispatcher.
The Dispatcher uses the DAOFactory to look
for the BPELProcess that has previously been stored by
the Manager. After the BPELProcess and
possibly also the ProcessContext has been found, they
will be dispatched to the ProcessController.
The DAOFactory is an abstract factory, which can
construct various types of concrete DAO factories
(BPELProcessDAO, ProcessContextDAO), each
factory supporting a different type of persistent storage
implementation.
This class is used and responsible for the creation of an object representations of a BPEL processes, which is defined by a specified BPEL document.
The ProcessController is the core of the engine and
contains the execution logic for every BPEL activity. The
ProcessController needs to be thread-safe as several
threads may use it simultaneously.
The Dispatcher is used to lookup or create a
ProcessInstance given an inbound
BexeeMessage and dispatch the message to the
ProcessController either synchronously or asynchronoulsy.
When the Dispatcher kicks off the
ProcessController it will know, whether a synchronous or
asynchronous BPEL process is to be started. Depending on that it will
either return right away after starting the process for an
asynchronous BPEL process or it will wait until the result is
available for a synchronous BPEL process.
The ProcessContext contains state information about a
very specific process instance. This includes:
ProcessController to be
able to resume asynchronous process execution. Another optional use
of this information might be a later process execution tracing (e.g.
for graphical representations of an executing or finished process). The ProcessContext need to be made persistent for later
retrieval of asynchronous or long-running processes.
A BPELProcess contains all the necessary data to
execute a BPEL process. It holds a reference to the
Process as well as references to the WSDL files
describing the BPEL process and its partners.
In addition to this, the BPELProcess class also provides
a few convenience methods, such as determining whether a BPEL process
is synchronous or not.
The BPELProcess is tightly coupled with the
Process object representing the
<process> element in a BPEL document. So
what's the difference between a BPELProcess and a
Process? We took great care to map the BPEL XML Schema
into Java objects without modifying or polluting the BPEL model. The
BPELProcess class allows us to implement new methods that
might be used by bexee but are not part of the BPEL model.
Upon deployment a BPELProcess needs to be made
persistent for later retrieval.
The ProcessInstance contains no logic at all but merely
serves as a container for encapsulating a ProcessContext
object and the corresponding BPELProcess object.
Thus the fusion of the ProcessContext and the
BPELProcess together form a ProcessInstance.
See Package bexee.model.
The package bexee.model contains a number of classes
that map directly to the elements in a BPEL document and thus enable a
object representation of the BPEL document. The classes don't provide
any logic and the objects are used as pure value objects.
The package bexee.model.impl contains classes
implementing the interfaces in package bexee.model. This
allows for a decoupling of the concrete implementation choice from the
BPEL model. It is imaginable that another implementation could be
provided that uses an entirely different approach. Possibly this would
also mean that a matching ProcessController
implementation needs to be made avaiable.
In the current version of bexee the tree-structure given by BPEL is used in combination with the Visitor pattern to execute and process BPEL processes.