jBPM4的PVM
荣浩
2009.7
什么是PVM(流程虚拟机)
2009-7-6
1
形容词
• 对流程图建模并执行的
• 内嵌的
内嵌的
• 可扩展支持多流程语言的
PVM总览
PVM对外服务
事件
异步
消息
运行
实例
时间
服务
引擎过程调度(Execution)
(ProcessDefinition、Activity、Transition)
流程定义模型
运行期环境(IOC、Environment)
2009-7-6
2
PVM的流程定义模型
ObservableElement
CompositeElement
-events
Event
*
-event
0 1
0..1
-eventReferences
*
EventListener
ProcessDefinition
*
*
Activity
-activities
-activities
-source
-destination
-outgoingTransitions
*
-incomingTransitions
*
Transition
PVM的运行过程调度
AtomicOperation
Activity1
execution
Wait2
Activity3
2009-7-6
3
AtomicOperation
ExecuteActivity
MoveToParentActivity
MoveToParentActivity
Signal
TransitionEndActivity
Just event
TransitionTake
signal
Parent
Activity
execute
TransitionStartActivity
MoveToChildActivity
等等,节点的异步执行
2009-7-6
4
PVM的Job执行
Message
createAsyncMessage
AtomicOperation
send
Message
Session
save
JOBS
notify
ID
LOCK_OWNER LOCK_TIME …
JobExecutor
Dispatcher
Thread
Blocking
Queue
Job
Executor
Thread
那么,事件呢
2009-7-6
5
PVM的事件处理
End
Take
Start
Activity1
Activity1
Activity2
y
fire
ExecuteEventListene
r
eventListenerIndex++
performAtomicOperation
AtomicOperation
PVM的事件处理
• 在 jbpm4 中则采用观察者模式来触发事件的。所有用户自己定义的动作,全
部要实现 EventListener 接口,这些动作作为监听者(就是事件 Event 的观
察者 Observer )注册到相应的流程定义对象上( ProcessElement 或者
Node ),而事件 Event 则作为被观察的对象(实际上就是 Observerable ),
实际上在 jbpm4 中专门定义出了一个对象 ObservableElementImpl ,流程定
义中的 NodeImpl 、 TransitionImpl 、 ProcessDefinitionImpl 均继承自此对
象,因此这些元素本身就可以作为 Observerable 而被观察者来监控。
2009-7-6
6
数据库里都有啥
运行库和历史库
2009-7-6
7
PVM的历史数据处理
execution
fireHistoryEvent
historySession
process
historyEvent
save
historyInstance
Process
Process
InstanceStart
Process
Process
InstanceEnd
activityStart
activityEnd
historyActivityInstance
historyProcessInstance
如何管理数据库连接、查找组件…
2009-7-6
8