您的位置:首页 > 产品设计 > 产品经理

JBPM 工作流引擎 JBPM指南 例子:Hello World 流程定义(3.1)

2006-01-24 14:42 567 查看
声明:
本人E文VeryVeryPoor,又是刚刚开始学习JBPM工作流引擎,对原文及概念等理解不当的地方,请网友不吝赐教,吾将及时修改和更正。
本文仅是本人自己学习JBPM,对JBPM指南的学习理解过程。
还望可以对入门者有所帮助。共享之。
需要中英文对照Word文档者请联系:gutengcom@hotmail.com或留下邮件地址。

第3章 JBPM 指南
本篇指南将为你展示JBPM的管理运行时刻API的用法和在jpdl中的基本流程的建立。

本篇指南的格式是一组例子的说明。这些例子主要集中在说明详细的主题和包含的广泛的注释。这些例子可以在JBPM的下载包的例子目录中找到。

最好的学习方法是通过给出的例子建立各种变化来创建一个项目和实验。

对于使用eclipse的用户:下载jbpm-3.0-[version].zip解压。然后 在eclipse的"File" --> "Import..." --> "Existing Project into Workspace"点"Next",然后浏览到JBPM根目录,点"Finish".这样你就有了一个在你的工作间里JBPM.3的项目了。你可以在目录src/java.examples/中找到指南中的例子。你可以在"Run" --> "Run As..." --> "JUnit Test"中运行它。

jBPM包括一个创建XML文件的图形化的设计工具,可以在例子中使用。你可以在
http://sourceforge.net/project/showfiles.php?group_id=70542
http://sourceforge.net/project/showfiles.php?group_id=70542&package_id=116692
下载图形化设计工具和使用说明。

3.1例子:Hello World
一个流程的定义是一个定向的图形,由节点(nodes)和转换(transitions)(或叫跃迁)组成。The hello world流程有3个节点。要看它是如何组合拼凑的,我们将从不使用图形设计工具开始一个简单的流程。

Figure 3.1. The hello world process graph

public void testHelloWorldProcess() {

/*
这个方法说明了一个流程定义和一个流程定义的执行。这个流程
定义有3个节点:an unnamed start-state, a state 's' and an
end-state named 'end'.
下面的文本行解析了一个XML文本片段成为一个流程定义。一个流程定义
是一个标准的把一个流程描绘为一个java object (java对象)的描述.
*/
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
"<process-definition>" +
" <start-state>" +
" <transition to='s' />" +
" </start-state>" +
" <state name='s'>" +
" <transition to='end' />" +
" </state>" +
" <end-state name='end' />" +
"</process-definition>"
);

/*
下面的文本行在构造实例之后创建了一个流程定义的执行。这个流程的执行有一个主要的执行路线(path)或叫(轨迹)根token(the root token)它被定位在启始状态(start-state)的位置上。
*/

ProcessInstance processInstance =
new ProcessInstance(processDefinition);

/*
在构造实例之后,这个流程执行有了主要的执行路线(path)或叫(轨迹)根token(the root token)
*/
Token token = processInstance.getRootToken();

/*
也是在构造实例之后,它被定位在启始状态(start-state)的位置上。
*/
assertSame(processDefinition.getStartState(), token.getNode());

/*
让我们启动流程执行,离开启始状态转换到缺省的transition上。
*/
token.signal();

/*
Signal方法将会阻止流程执行,直到进入一个等待状态a wait state。
这个流程执行将会进入第一个等待状态,state ‘s’,因此这个主要执行路线(path)将被定位到 state ‘s’上。
*/
assertSame(processDefinition.getNode("s"), token.getNode());

/*
让我们发送另一个信号。这将会重新启动执行,通过离开状态‘s’(state 's'),转换到它缺省的transition上。
*/
token.signal();

/*
现在这个signal方法被送回,以为流程实例已经到达了结束状态end-state。
*/

assertSame(processDefinition.getNode("end"), token.getNode());
}

待续….
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: