1、“JUnit Test”运行它们。jBPM包含一个用来创作例子中展示的XML的图形化设计器工具,你可以在“2.1 下载概述”中找到这个工具的下载说明,但是完成本指南不需要图形化设计器工具。1.1 Hello World 示例一个流程定义就是一个有向图,它由节点和转换组成。Hello world流程有三个节点,下面来看一下它们是怎样组装在一起的,我们以一个简单的流程作为开始,不用使用设计器工具,下图展示了hello world流程的图形化表示:图 3.1 hello world流程图public void testHelloWorldProcess() / 这个方法展示了一个流程定义以及流程定义
2、的执行。/ 这个流程定义有3个节点:一个没有命名的开始状态,/ 一个状态“s”,和一个名称为“end”的结束状态。/ 下面这行是解析一段xml文本到ProcessDefinition对象(流程定义)。/ ProcessDefinition把一个流程的规格化描述表现为java对象。ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( +start-state /start-statestate name=end/stateend-state name=/process-definition);/ 下面这行是
3、创建一个流程定义的执行。创建后,流程执行有一个/ 主执行路径(根令牌),它定位在开始状态。ProcessInstance processInstance = new ProcessInstance(processDefinition);/ 创建后,流程执行有一个主执行路径(根令牌)。Token token = processInstance.getRootToken();/ 创建后,主执行路径被定位在流程定义的开始状态。assertSame(processDefinition.getStartState(), token.getNode();/ 让我们开始流程执行,通过它的默认转换离开开始状态
4、。token.signal();/ signal方法将会把流程阻塞在一个等待状态。/ 流程执行进入第一个等待状态“s”,因此主执行路径现在定位/ 在状态“s”。assertSame(processDefinition.getNode(s), token.getNode();/ 让我们发送另外一个信号,这将通过使用状态“s”的默认转换 / 离开状态“s”,恢复流程执行。/ 现在signal方法将返回,因为流程示例已经到达结束状态。end1.2 数据库示例jBPM的特性之一就是在流程等待状态时,拥有把流程的执行持久化到数据库中的能力。下面的例子将向你展示怎样存储一个流程实例到数据库,例子中还会出现
5、上下文。分开的方法被用来创建不同的用户代码,例如,一段代码在web应用中启动一个流程并且持久化执行到数据库,稍后,由一个消息驱动bean从数据库中加载流程实例并且恢复它的执行。有关jBPM持久化的更多信息可以在“第7章 持久化”找到。public class HelloWorldDbTest extends TestCase static JbpmConfiguration jbpmConfiguration = null; static / 在“src/config.files”可以找到象下面这样的一个示例配置文件。 / 典型情况下,配置信息在资源文件“jbpm.cfg.xml”中,但是在这
6、里 / 我们通过XML字符串传入配置信息。 / 首先我们创建一个静态的JbpmConfiguration。一个JbpmConfiguration / 可以被系统中所有线程所使用,这也是为什么我们可以把它安全的设置 / 为静态的原因。 jbpmConfiguration = JbpmConfiguration.parseXmlString(jbpm-configuration /jbpm-context机制分离了jbpm核心引擎和来自于外部环境的服务。jbpm-contextservice name=persistence factory=org.jbpm.persistence.db.DbPe
7、rsistenceServiceFactory + /jbpm-context / 同样,jbpm使用的所有资源文件在jbpm.cfg.xml中被提供。string name=resource.hibernate.cfg.xml value=hibernate.cfg.xmlresource.business.calendarorg/jbpm/calendar/jbpm.business.calendar.propertiesresource.default.modulesorg/jbpm/graph/def/jbpm.default.modules.propertiesresource.co
8、nverterorg/jbpm/db/hibernate/jbpm.converter.propertiesresource.action.typesorg/jbpm/graph/action/action.types.xmlresource.node.typesorg/jbpm/graph/node/node.types.xmlresource.varmappingorg/jbpm/context/exe/jbpm.varmapping.xml/jbpm-configuration );public void setUp() jbpmConfiguration.createSchema();
9、public void tearDown() jbpmConfiguration.dropSchema();public void testSimplePersistence() / 在下面调用的3个方法之间,所有的数据通过数据库被传递。 / 在这个测试中,这3个方法被依次执行,因为我们想要测试一个 / 完整的流程情景。但是实际上,这些方法表示了对服务器的不同 / 请求。 / 因为我们以一个干净的空数据库开始,所以我们首先必须部署流程。 / 事实上,这只需要由流程开发者做一次。 deployProcessDefinition(); / 假设在一个web应用中当用户提交一个表单时我们起动一个流程
10、 / 实例(流程执行) processInstanceIsCreatedWhenUserSubmitsWebappForm(); / 然后,一个异步消息到达时继续执行。 theProcessInstanceContinuesWhenAnAsyncMessageIsReceived();public void deployProcessDefinition() / 这个测试展示了一个流程定义以及流程定义的执行。 ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(process-definition name=hello worldstart-state name=start
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1