2007-08-20
jBPM学习(五)----面向图的程序设计
五、面向图的程序设计
Jbpm的流程设计语言是面向图的,下面介绍一些面向图程序设计的概念。
1. 图的结构
1) Node和transition
首先,图的结构由node和transition组成。每个transition都是有向的,所以node可以有一个leaving transition或者arriving transition。每个node是可以看成一项任务,每个node都有execute方法。Node的子类必须重载这个方法来为该类型的node实现特定的任务。

2) Execution
在图结构中定义的execution模型和有限自动机还有uml状态图相似。一个execution(也可称为token,下面我们称其为令牌)具有对当前node的一个引用。

Transition通过take方法可以将一个令牌(token)从源node传递到目标node。

当一个令牌到达一个node的时候,这个node就被执行(通过execute方法)。Node的execute方法也可以经行繁殖。繁殖在这里的意思是一个node可以将到达的令牌通过该node中的一个transition传向下一个node。

当一个node的execute方法没有传递令牌的时候,它就处于等待(wait)状态。同样的,当一个令牌在开始节点创建的时候,它就处于等待状态,等待一些事件(event)。令牌的一个事件可以触发令牌进行传递。如果事件是指向当前节点的一个leaving transition的话,那么令牌将沿着这个transition传递。令牌将不断的传递,知道遇到下个状态为wait的节点。

3) 流程定义语言
在wait状态下,一个令牌指向图中的一个node。此时,流程图和令牌都可以进行持久话,例如通过hibernate将其存入数据库。流程定义语言就是一个Node-implementation的集合。每个Node-implementation对应一个流程结构。
这里我们给出一个例子,该流程语言由4个process组成:一个start state,一个decision,一个task和一个end state。

我们可以通过上面定义的语言来具体描述一个流程,其中冒号前为该节点的描述,冒号后为该节点的具体类型:

当为该流程创建一个新的实例的时候,我们通过将令牌放入该过程的开始节点(start node)。当令牌没有接收到一个事件的时候,这个令牌将一直留在次节点中。

现在我们来看看当一个事件发生(事件点燃)时,会出现什么情况。在初始情况下,我们通过调用令牌的event方法来点燃一个默认事件,它和默认transition相对应。Event方法可以找到默认的leaving transition,然后通过调用transition的take方法将令牌沿着该tranistion传递。
这个transition将令牌传递到decision节点并且调用该节点的execute方法。我们假设decision的execute方法通过计算后向令牌传递了一个yes事件。这将使令牌继续沿着’yes’ transition进行传递,之后令牌将到达doublieCheck节点。
我们假设doubleCheck任务节点的execute方法向checker的任务列表中添加一个实体,然后等待checher的输入,而并不将令牌继续传递。
现在令牌将在doubleCheck节点停留。

4) Action
一个Acition同样也有一个execute方法。Action可以和event相联系。在节点被执行的时候有两个基本的事件被触发:node leave和node enter。

每一个event都可以和一系列action相联系,当事件被触发的时候,这些action也将被执行。
评论
343050143
2007-12-05
,请问一下,为什么我按照一个例子做的,定义了一个我自己的流程,这个流程只有三个节点,开始-》decision-》结束。
我在决策节点里加了一个委托类。
可是执行的时候却不能进入决策节点。总是说下面的错误。不知道什么原因
能给个截图的例子吗?
谢谢,我的邮箱是zixufei@163.com
错误如下
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Error calling action method of component with id taskform:transitionButton
javax.faces.webapp.FacesServlet.service(FacesServlet.java:109)
org.jbpm.webapp.filter.AuthenticationFilter.doFilter(AuthenticationFilter.java:56)
org.jbpm.web.JbpmContextFilter.doFilter(JbpmContextFilter.java:83)
org.jbpm.webapp.filter.LogFilter.doFilter(LogFilter.java:59)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
root cause
javax.faces.FacesException: Error calling action method of component with id taskform:transitionButton
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:74)
javax.faces.component.UICommand.broadcast(UICommand.java:106)
javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:90)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:164)
org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:271)
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:94)
org.jbpm.webapp.filter.AuthenticationFilter.doFilter(AuthenticationFilter.java:56)
org.jbpm.web.JbpmContextFilter.doFilter(JbpmContextFilter.java:83)
org.jbpm.webapp.filter.LogFilter.doFilter(LogFilter.java:59)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5 logs.
我在决策节点里加了一个委托类。
可是执行的时候却不能进入决策节点。总是说下面的错误。不知道什么原因
能给个截图的例子吗?
谢谢,我的邮箱是zixufei@163.com
错误如下
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Error calling action method of component with id taskform:transitionButton
javax.faces.webapp.FacesServlet.service(FacesServlet.java:109)
org.jbpm.webapp.filter.AuthenticationFilter.doFilter(AuthenticationFilter.java:56)
org.jbpm.web.JbpmContextFilter.doFilter(JbpmContextFilter.java:83)
org.jbpm.webapp.filter.LogFilter.doFilter(LogFilter.java:59)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
root cause
javax.faces.FacesException: Error calling action method of component with id taskform:transitionButton
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:74)
javax.faces.component.UICommand.broadcast(UICommand.java:106)
javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:90)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:164)
org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:271)
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:94)
org.jbpm.webapp.filter.AuthenticationFilter.doFilter(AuthenticationFilter.java:56)
org.jbpm.web.JbpmContextFilter.doFilter(JbpmContextFilter.java:83)
org.jbpm.webapp.filter.LogFilter.doFilter(LogFilter.java:59)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5 logs.
发表评论
- 浏览: 14622 次
- 性别:

- 来自: 自己输入

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
jBPM学习(七)----jBPM相 ...
不错,博主辛苦了。
-- by dones -
jBPM学习(二)----数据库 ...
我也没有这个jbpm.3/deploy/目录,手动加的,我的出错了啊:> Bu ...
-- by ljh0242 -
jBPM学习(二)----数据库 ...
我也没有这个jbpm.3/deploy/目录,手动加的,我的出错了啊:> Bu ...
-- by ljh0242 -
jBPM学习(二)----数据库 ...
操作同上,出现如下错误: Buildfile: D:\workspace\jbp ...
-- by ljh0242 -
jBPM学习(一)----环境搭 ...
我也是按博主操作的,出现问题,可否技术交流:我的QQ:178070373,msn ...
-- by ljh0242






评论排行榜