The OpenWFE Manual
Next
The OpenWFE Manual
Open source WorkFlow Environment
John
Mettraux
Table of Contents
1. Introduction
What is OpenWFE ?
About this manual
System requirements
2. Installation
about the README files
Installing a Java Development Kit
Downloading an OpenWFE release
Unpacking the release and setting the environment
Content of OpenWFE's releases
Engine
Worklist
Webclient
Apre
Droflo
3. Running OpenWFE
Start scripts
troubleshooting
Starting the engine and the other components
First web login
4. Configuration
An overview OpenWFE's architecture
Services and applications
The participant map
Listeners and dispatchers
Worklist user management
Roles, participants and users
Launch permissions
Query stores
Modifying
etc/worklist/passwd.xml
directly
SqlPasswdCodec
User management web interface
Putting a relational database behind OpenWFE
XlobEpressionStore
XlobWorkItemStore
The relational database
'swis', the SqlWorkItemStore
SqlPasswdCodec
Implementing and using a data source
Dispatchers and listeners
Dispatching over a socket
Dispatching over a smtp
Securing the dispatch
How should the workitems get encoded
OpenWFE as a service
OpenWFE as a linux service
OpenWFE as a windows service
Worklist stores and their 'GetStrategy'
The 'DefaultGetStrategy'
The 'UserGetStrategy'
The 'ParticipantGetStrategy'
Logging
5. An example : a ticket system
6. Process definitions
A small overview on the workflow engine and its process definitions
Process definitions
Expressions
Workitems
The main expressions
process-definition
participant
sequence
concurrence
iterator
concurrent-iterator
subprocess
The cursor and the loop expressions
cursor
loop
break, cancel, continue, rewind, back
Expressions for workitem manipulation
set
unset
inc
Conditional expressions
if
case
equals
not
and
or
greater-than
lesser-than
undefined
defined
when
Xeme expressions
quote / q
attribute / a
field / f
variable / v
list
car
cdr
cons
xar
xdr
xons
append
size
nth
Conditional xeme expressions
is-null
is-list
is-atom
is-empty
Time expressions
sleep
cron
Other expressions
save and restore
eval
log
do, undo and redo
interleaved
cancel-process
forget
lose
rotate
The 'dollar notation'
using variables with the dollar notation
using fields with the dollar notation
combining fields and variables in the dollar notation
using constants with the dollar notation
using engine parameters or system properties with the dollar notation
using functions with the dollar notation
Functions
How functions are made available to the engine
A potpourri of Functions
The 'eval' function
The 'range' function
Functions and errors
Implementing your own expressions
Validation of an XML workflow definition
7. Workflow Patterns
Pattern 1 (Sequence)
Pattern 2 (Parallel Split)
Pattern 3 (Synchronization)
Some 'concurrence' examples
Pattern 4 (Exclusive choice)
Pattern 5 (Simple merge)
Pattern 6 (Multi-choice)
Pattern 7 (Synchronizing Merge)
Pattern 8 (Multiple Merge)
Pattern 9 (Discriminator)
Pattern 9a (N out of M join)
Pattern 10 (Arbitrary Cycles)
Pattern 11 (Implicit Termination)
Pattern 12 (Multiple Instances without Synchronization)
Pattern 13 (Multiple Instances with Design Time Knowledge)
Pattern 14 (Multiple Instances with Run Time Knowledge)
Iterator
Pattern 15 (Multiple Instances without Run Time Knowledge)
Pattern 16 (Deferred Choice)
Pattern 17 (Interleaved Parallel Routing)
Pattern 18 (Milestone)
Pattern 19 (Cancel Activity)
Pattern 20 (Cancel Case)
8. Command line tools
wfcmd.sh
control.sh
9. The APRE and the Automatic Participants
The Apre
apre-configuration.xml
automatic-participants.xml
automatic-participants within participant.xml
The Pyya Apre
The automatic participants
automatic participant's result
10. Invoking web services from OpenWFE
The 'WsInvoker' dispatcher class
11. Embedding OpenWFE
The embedded engine
Using the FsPersistedEngine
Using the DbPersistedEngine
Embedded worklists
Using the the InMemoryWorklist
12. Extending OpenWFE's process definition language
The process definition language is self-extensible
Common subprocesses for your flows
External subprocesses
Subprocesses bound at engine level
Doing it in java : extending the FlowExpression class
A few notes about functions and automatic participants
Functions
Automatic participants (agents)
A self extension case : reversing a list
Passing the list as a variable
Evaluating the children
Directly mapping children
Making use of the 'reverse' subprocess
Separating rules from flows
decision tables
The cron and the library
The 'processLibrary' engine service
The 'cron' engine service
13. Business Activity Monitoring
TextHistory
SqlHistory
The Status service
Auditing modifications on workitems
14. The RMI WorkSession
An example
Playing with a WorkItem
An easier way of handling workitem attributes : owfe2java() and back
Storing beans in a workitem
15. OpenWFE's application framework
The configuration file
Looking up services
Sub-contexts (referring to other config files)
The
passwd.xml
file
The policy files
Writing your own service
A simple example
16. openwfe-python
The openwfe-python Worksession
The Pyya Apre
An example python agent : the 'to-pdf-agent'
17. openwfe-dotnet
Establishing a WorkSession
18. Custom participants
The 'MailNotifiedParticipant'
The "Mail Form" system
A flow with a 'mail form'
Emitting 'mail forms'
Listening for 'mail forms'
Implementing custom participants
Making a java application directly talk to OpenWFE
19. Distributing OpenWFE
Launching [sub]processes on remote engines
Pushing process definitions on remote engines
Processes and channels
20. OpenWFE tips and tricks
Lauching a flow with netcat
A. Services and their parameters
Services common to components
Service : class XmlCoderLoader
the participant map service
the policy service
Engine Services
Service : class XmlExpressionMap
Service : class EngineWorkItemConsumer
the expression pool and the expression stores
the library services
the history services
the decision service
Worklist services
Service : class SimpleWorkItemStore
Service : class ListWorkItemConsumer
Stores' get and put strategies
Storages
APRE services
Service : class ApreConsumer
Service : class BasicRouter
Listeners and Dispatchers
Listeners
Dispatchers
List of Figures
4.1.
OpenWFE Debian start script
List of Tables
A.1.
class XmlCoderLoader
A.2.
class CompositeParticipantMap
A.3.
class XmlParticipantMapFactory
A.4.
class LdapService
A.5.
class MailNotifiedParticipant
A.6.
class FileArchivingParticipant
A.7.
class DecisionParticipant
A.8.
class LdapParticipantMap
A.9.
class PolicyService
A.10.
class XmlPasswdCodec
A.11.
class SqlPasswdCodec
A.12.
class XmlExpressionMap
A.13.
class EngineWorkItemConsumer
A.14.
interface ExpressionPool
A.15.
class SimpleExpressionPool
A.16.
class CachedExpressionPool
A.17.
abstract class FileExpressionStore
A.18.
class XmlExpressionStore
A.19.
class SerialExpressionStore
A.20.
class XlobExpressionStore
A.21.
abstract class LibraryService
A.22.
class SimpleProcessLibrary
A.23.
class CronService
A.24.
class TextHistory
A.25.
class SqlHistory
A.26.
class SimpleDecisionService
A.27.
abstract class FileDecisionTableFactory
A.28.
class CsvDecisionTableFactory
A.29.
class SimpleWorkItemStore
A.30.
class ListWorkItemConsumer
A.31.
class DefaultGetStrategy
A.32.
class QueryGetStrategy
A.33.
abstract class ExtendedGetStrategy
A.34.
class ParticipantGetStrategy
A.35.
class UserGetStrategy
A.36.
class DefaultPutStrategy
A.37.
class CorrelatedPutStrategy
A.38.
class InMemoryWorkItemStorage
A.39.
class FileWorkItemStorage
A.40.
class CachedWorkItemStorage
A.41.
class XlobWorkItemStorage
A.42.
class ApreConsumer
A.43.
class BasicRouter
A.44.
class SocketListener
A.45.
class FileListener
A.46.
class MailListener
A.47.
class MailFormListener
A.48.
class SocketDispatcher
A.49.
class SmtpDispatcher
A.50.
class HttpDispatcher
A.51.
class MailFormDispatcher
A.52.
class StaticSyndicatedDispatcher
A.53.
class WsInvoker