学习JBPM应用已经快满一月了。发现在自己非常健忘,所以决定把自己在学习过程中的想法记下来,免得五一七天假期忘记得七七八八。在这里发第一篇BLOG,希望能有JBPM网友门发表不见的建解。
本人没有对笔记进行整理,以FQA的形式记下。
JBPM.jar 实际做了什么?
图及其执行的描述 + 持久化 (通过类对象来实现图及图的执行,及提求这些对象的持久化服务)。
图对象 : Node, Transiton, ProceesDefinition 等。
图执行对象 : ProcessInstance, Token, ExecutionContext 等
jbpm提求服务 : persistence,message,scheduler,logging,authentication
JBPM是什么?
JBPM实际上是一个能够记录图执行状态的状态机,或者是实现状态机功能的工具包。
Token是状态机的一个状态指针。在图的一次执行中,他指向这个图的一个结点, 这个结点表示这次执行的状态。
Token的当前结点指针,会随着这次执行的继续而改变(从一个结点指向下一个结点直到结束,相当于状态机的状态转移直到结束状态) 。
JBPM的输入: signal(包括: signal, end, scheduler服务周期的调度引发Timer.execute 等等)
JBPM如何用OO来表示图及其执行?
图的两个基本元素: 结点(状态) 和 弧 分别用 Node, Transition 对象表示.
图的执行: 执行和执行状态记录用 Execution 对象表示.
图的行为: 结点(状态) 的行为用 Action 对象表示.
理解JBPM关健是理解GOP。
JBPM的实现方式:解释执行
应用GOP模式把图解释成类对象,并以图的执行方式执行。相对硬编码实现方式。
JBPM的持久化服务是什么?
JBPM的持久化服务提供对图和执行状态对象的持久.
具体为: 对 ProcessDefinition Node Transiition, Toke, ProcessInstance, ExecutionContext 等对象进行持久.其持久化技术: Hibernate.
JBPM的scheduler服务是什么?
执行JBPM的活动调度工能.
具体为: scheduler 启动一线程(schedulerThread),过定时(5000)从数据库中把到期的持久化对象(Timer)取出,并执行Timer.execute();
JBPM的ProcessDefinition对象是什么?
JBPM的ProcessDefinition对象是就是一个图。他拥有图对象元素。
JBPM中 jpdlXmlreader 把 processdefinition.xml 解释为 ProcessDefinition对象。
ProcessDefinition {
protected int version = -1; 版本号
protected boolean isTerminationImplicit = false;
protected StartState startState = null; 开始状态结点;
protected List nodes = null; 结点列表;
transient Map nodesMap = null; 结点地图;
protected Map actions = null; 行为;
protected Map definitions = null;
}
把一个process archive deploy 到JBPM 过程中,JBPM做了些什么?
1 解压 process archive 通过 java.util.zip.ZipInputStream
2 提取 processdefinition.xml 和 相关类 通过org.jbpm.jpdl.par.ProcessArchive .
3 解释 processdefinition.xml 为 ProcessDefinition 对象 通过 org.jbpm.jpdl.xml.JpdlXmlReader
4 调用JBPM持久化服务 把ProcessDefinition 持久化到数据库 通过 org.jbpm.JbpmContext
如何生成或者修改ProcessDefinition对象?
例子:从数据库中查找一个ProcessDefinition 然后插入一个"SS"结点,最后持久化到数据库中
1 数据原来deploy了一个"Hello World" ProcessDefinition 图示为 | start -> s -> end |
2从数据库中提取"Hello World"最新版本的的ProcessDefinition,在"s"结点和"end"之间插入"ss"结点
最后持久化到数据库. 图示为 | start -> s -> ss -> end |
代码:
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
GraphSession graphSession = jbpmContext.getGraphSession();//得到一个GraphSession
ProcessDefinition processDefinition =
graphSession.findLatestProcessDefinition("Hello World");//得到一个ProcessDefinition;
Node snode = processDefinition.getNode("s"); //从processDefinition中得到指向结点"s"的引用 ;
Node endnode = processDefinition.getNode("end"); //从processDefinition中得到指向结点"end"的引用 ;
Node node = new Node("ss"); //生成一个"ss"结点;
Transition stoend = snode.getLeavingTransition("toend");//从"s"结点中得到LeavingTransition "toend"的引用;
Transition toend = new Transition(); //生成一个toend 的Transition;
stoend.setTo(node); //让原来从"s"指向"end"的Transition 指向 "ss"结点
toend.setTo(endnode); //让新Transition 指向 "ss"结点;
node.addLeavingTransition(toend); //把toend Transition 加入到"ss"的离开Transition中
node.addArrivingTransition(stoend); //把stoend 原来s指向end 加入到"ss"进入Transition中
endnode.addArrivingTransition(toend); //
processDefinition.addNode(node); //把新结点"ss"加入到ProcessDefinition中
} finally {
jbpmContext.close();//关闭jbpmContext,把processDefinition 更新到数据库。
}
///
本人没有对笔记进行整理,以FQA的形式记下。
JBPM.jar 实际做了什么?
图及其执行的描述 + 持久化 (通过类对象来实现图及图的执行,及提求这些对象的持久化服务)。
图对象 : Node, Transiton, ProceesDefinition 等。
图执行对象 : ProcessInstance, Token, ExecutionContext 等
jbpm提求服务 : persistence,message,scheduler,logging,authentication
JBPM是什么?
JBPM实际上是一个能够记录图执行状态的状态机,或者是实现状态机功能的工具包。
Token是状态机的一个状态指针。在图的一次执行中,他指向这个图的一个结点, 这个结点表示这次执行的状态。
Token的当前结点指针,会随着这次执行的继续而改变(从一个结点指向下一个结点直到结束,相当于状态机的状态转移直到结束状态) 。
JBPM的输入: signal(包括: signal, end, scheduler服务周期的调度引发Timer.execute 等等)
JBPM如何用OO来表示图及其执行?
图的两个基本元素: 结点(状态) 和 弧 分别用 Node, Transition 对象表示.
图的执行: 执行和执行状态记录用 Execution 对象表示.
图的行为: 结点(状态) 的行为用 Action 对象表示.
理解JBPM关健是理解GOP。
JBPM的实现方式:解释执行
应用GOP模式把图解释成类对象,并以图的执行方式执行。相对硬编码实现方式。
JBPM的持久化服务是什么?
JBPM的持久化服务提供对图和执行状态对象的持久.
具体为: 对 ProcessDefinition Node Transiition, Toke, ProcessInstance, ExecutionContext 等对象进行持久.其持久化技术: Hibernate.
JBPM的scheduler服务是什么?
执行JBPM的活动调度工能.
具体为: scheduler 启动一线程(schedulerThread),过定时(5000)从数据库中把到期的持久化对象(Timer)取出,并执行Timer.execute();
JBPM的ProcessDefinition对象是什么?
JBPM的ProcessDefinition对象是就是一个图。他拥有图对象元素。
JBPM中 jpdlXmlreader 把 processdefinition.xml 解释为 ProcessDefinition对象。
ProcessDefinition {
protected int version = -1; 版本号
protected boolean isTerminationImplicit = false;
protected StartState startState = null; 开始状态结点;
protected List nodes = null; 结点列表;
transient Map nodesMap = null; 结点地图;
protected Map actions = null; 行为;
protected Map definitions = null;
}
把一个process archive deploy 到JBPM 过程中,JBPM做了些什么?
1 解压 process archive 通过 java.util.zip.ZipInputStream
2 提取 processdefinition.xml 和 相关类 通过org.jbpm.jpdl.par.ProcessArchive .
3 解释 processdefinition.xml 为 ProcessDefinition 对象 通过 org.jbpm.jpdl.xml.JpdlXmlReader
4 调用JBPM持久化服务 把ProcessDefinition 持久化到数据库 通过 org.jbpm.JbpmContext
如何生成或者修改ProcessDefinition对象?
例子:从数据库中查找一个ProcessDefinition 然后插入一个"SS"结点,最后持久化到数据库中
1 数据原来deploy了一个"Hello World" ProcessDefinition 图示为 | start -> s -> end |
2从数据库中提取"Hello World"最新版本的的ProcessDefinition,在"s"结点和"end"之间插入"ss"结点
最后持久化到数据库. 图示为 | start -> s -> ss -> end |
代码:
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
GraphSession graphSession = jbpmContext.getGraphSession();//得到一个GraphSession
ProcessDefinition processDefinition =
graphSession.findLatestProcessDefinition("Hello World");//得到一个ProcessDefinition;
Node snode = processDefinition.getNode("s"); //从processDefinition中得到指向结点"s"的引用 ;
Node endnode = processDefinition.getNode("end"); //从processDefinition中得到指向结点"end"的引用 ;
Node node = new Node("ss"); //生成一个"ss"结点;
Transition stoend = snode.getLeavingTransition("toend");//从"s"结点中得到LeavingTransition "toend"的引用;
Transition toend = new Transition(); //生成一个toend 的Transition;
stoend.setTo(node); //让原来从"s"指向"end"的Transition 指向 "ss"结点
toend.setTo(endnode); //让新Transition 指向 "ss"结点;
node.addLeavingTransition(toend); //把toend Transition 加入到"ss"的离开Transition中
node.addArrivingTransition(stoend); //把stoend 原来s指向end 加入到"ss"进入Transition中
endnode.addArrivingTransition(toend); //
processDefinition.addNode(node); //把新结点"ss"加入到ProcessDefinition中
} finally {
jbpmContext.close();//关闭jbpmContext,把processDefinition 更新到数据库。
}
///