好文档 - 专业文书写作范文服务资料分享网站

深入浅出 jBPM 电子书 

天下 分享 时间: 加入收藏 我要投稿 点赞

\factory='org.jbpm.persistence.db.DbPersistenceServiceFactory' />\

\

// 同样,jbpm使用的所有资源文件在jbpm.cfg.xml中被提供。

\ \value='hibernate.cfg.xml' />\

\

\value='org/jbpm/calendar/jbpm.business.calendar.properties' />\

\

\value='org/jbpm/graph/def/jbpm.default.modules.properties' />\

\

\value='org/jbpm/db/hibernate/jbpm.converter.properties' />\

\

\value='org/jbpm/graph/action/action.types.xml' />\ \

\value='org/jbpm/graph/node/node.types.xml' />\ \

\value='org/jbpm/context/exe/jbpm.varmapping.xml' />\

\ ); }

public void setUp() {

jbpmConfiguration.createSchema(); }

public void tearDown() {

jbpmConfiguration.dropSchema(); }

public void testSimplePersistence() {

// 在下面调用的3个方法之间,所有的数据通过数据库被传递。 // 在这个测试中,这3个方法被依次执行,因为我们想要测试一个 // 完整的流程情景。但是实际上,这些方法表示了对服务器的不同 // 请求。

// 因为我们以一个干净的空数据库开始,所以我们首先必须部署流程。 // 事实上,这只需要由流程开发者做一次。 deployProcessDefinition();

// 假设在一个web应用中当用户提交一个表单时我们起动一个流程 // 实例(=流程执行)…

processInstanceIsCreatedWhenUserSubmitsWebappForm();

// 然后,一个异步消息到达时继续执行。

theProcessInstanceContinuesWhenAnAsyncMessageIsReceived(); }

public void deployProcessDefinition() {

// 这个测试展示了一个流程定义以及流程定义的执行。 // 这个流程定义有3个节点:一个没有命名的开始状态, // 一个状态“s”,和一个名称为“end”的结束状态。 ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(

\ \ \\ \

\

\\ \

\ \ );

// 查找在上面所配置的pojo持久化上下文创建器。 JbpmContext jbpmContext =

jbpmConfiguration.createJbpmContext(); try {

// 部署流程定义到数据库中。

jbpmContext.deployProcessDefinition(processDefinition);

} finally {

// 关闭pojo持久化上下文。这包含激发(flush)SQL语句把流程 // 定义插入到数据库。 jbpmContext.close(); } }

public void

processInstanceIsCreatedWhenUserSubmitsWebappForm() {

// 本方法中的代码可以被放在struts的actiong中,或JSF管理 //的bean中。

//查找在上面所配置的pojo持久化上下文创建器。 JbpmContext jbpmContext =

jbpmConfiguration.createJbpmContext(); try {

GraphSession graphSession = jbpmContext.getGraphSession();

ProcessDefinition processDefinition =

graphSession.findLatestProcessDefinition(\

// 使用从数据库中获取的流程定义可以创建一个流程定义的执行 // 就象在hello world例子中那样(该例没有持久化)。 ProcessInstance processInstance =

new ProcessInstance(processDefinition);

Token token = processInstance.getRootToken(); assertEquals(\ // 让我们起动流程执行 token.signal();

// 现在流程在状态 's'。

assertEquals(\

// 现在流程实例processInstance被存储到数据库, // 因此流程执行的当前状态也被存储到数据库。 jbpmContext.save(processInstance);

// 以后我们可以从数据库再取回流程实例,并且通过提供另外一个 // 信号来恢复流程执行。

} finally {

// 关闭pojo持久化上下文。 jbpmContext.close(); } }

public void

theProcessInstanceContinuesWhenAnAsyncMessageIsReceived() {

// 本方法中的代码可以作为消息驱动bean的内容。

// 查找在上面所配置的pojo持久化上下文创建器。 JbpmContext jbpmContext =

jbpmConfiguration.createJbpmContext(); try {

GraphSession graphSession = jbpmContext.getGraphSession(); // 首先,我们需要从数据库中取回流程实例。

// 有几个可选方法来分辨出我们在这里所要处理的流程实例。

// 在这个简单的测试中,最容易的方式是查找整个流程实例列表, // 这里它应该只会给我们一个结果。

// 首先,让我们查找流程定义。

ProcessDefinition processDefinition =

graphSession.findLatestProcessDefinition(\

// 现在我们搜索这个流程定义的所有流程实例。 List processInstances =

graphSession.findProcessInstances(processDefinition.getId());

// 因为我们知道在这个单元测试中只有一个执行。 // 在实际情况中, 可以从所到达的信息内容中提取processInstanceId

// 或者由用户来做选择。

ProcessInstance processInstance =

(ProcessInstance) processInstances.get(0);

// 现在我们可以继续执行。注意:processInstance 将委托信号 // 到主执行路径(=根令牌)。 processInstance.signal();

// 在这个信号之后,我们知道流程执行应该到达了结束状态。 assertTrue(processInstance.hasEnded());

// 现在我们可以更新数据库中的执行状态。 jbpmContext.save(processInstance);

} finally {

// 关闭pojo持久化上下文。 jbpmContext.close(); } } }

3.3 上下文示例:流程变量

流程变量包含了流程执行期间的上下文信息,流程变量与一个java.util.Map相似,它影射变量名称和值,值是java对象,流程变量作为流程实例的一部分被持久化。为了让事情简单,在这里的例子中我们只是展示使用变量的API,而没有持久化。

有关变量的更多信息可以在“第10章 上下文”中找到。

// 这个例子仍然从hello world流程开始,甚至没有修改。 ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( \ \

\\ \

\

\\ \

\ \ );

ProcessInstance processInstance =

new ProcessInstance(processDefinition);

// 从流程实例获取上下文实例,用来使用流程变量。 ContextInstance contextInstance =

processInstance.getContextInstance();

// 在流程离开开始状态之前,我们要在流程实例的上下文中 // 设置一些流程变量。

contextInstance.setVariable(\ contextInstance.setVariable(\

// 从现在开始,这些流程变量与流程实例相关联。现在展示由用户代码通过 // API访问流程变量,另外,这些代码也可以存在于动作或节点的实现中。 // 流程变量被作为流程实例的一部分也被存储到数据库中。 processInstance.signal();

// 通过contextInstance访问流程变量。

assertEquals(new Integer(500),

contextInstance.getVariable(\ assertEquals(\

contextInstance.getVariable(\

3.4 任务分配示例

深入浅出 jBPM 电子书 

\factory='org.jbpm.persistence.db.DbPersistenceServiceFactory'/>\\//同样,jbpm使用的所有资源文件在jbpm.cfg.xml中被提供。\\value='hibernate.cfg.x
推荐度:
点击下载文档文档为doc格式
8l9bb1yjqg01k8300sny
领取福利

微信扫码领取福利

微信扫码分享