快速业务通道

jBPM-4.0中文开发指南-第13章 执行模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
                create-drop hibernate.cache.use_second_level_cache true hibernate.cache.provider_class         org.hibernate.cache.HashtableCacheProvider # hibernate.show_sql                      true hibernate.format_sql                   true hibernate.use_sql_comments             true

然后你可以从环境工厂中像这样获得服务:

EnvironmentFactory environmentFactory = new PvmEnvironmentFactory ("environment.cfg.xml"); ProcessService processService = environmentFactory.get (ProcessService.class); ExecutionService executionService = environmentFactory.get (ExecutionService.class); ManagementService managementService = environmentFactory.get (ManagementService.class);

ProcessService的责任是管理流程定义资源。 在我们可以启动一个流程执行之前, 流程定义需要被 发布到流程资源库中。 流程定义可以使用不同的格式和不同的流程语言提供。 一个发布包含了流程定义 信息,从不同的源文件中,像一个ZIP文件, 一个XML文件或一个流程定义对象。 ProcessService.deploy方法会获得一个发布 通过配置在配置文件里的所有发布器。

在这个例子中,我们通过代码方式为发布 提供一个流程定义。

ClientProcessDefinition processDefinition = ProcessFactory.build("loan")   .activity("submit loan request").initial().behaviour(AutomaticActivity.class)     .transition().to("evaluate")   .activity("evaluate").behaviour(WaitState.class)      .transition("approve").to("wire money")     .transition("reject").to("end")   .activity("wire money").behaviour(AutomaticActivity.class)     .transition().to ("archive")   .activity("archive").behaviour(WaitState.class)     .transition ().to("end")   .activity("end").behaviour(WaitState.class) .done(); Deployment deployment = new Deployment(processDefinition); processService.deploy(deployment);

现在流程定义的一个版本保存到数据库中。 check-version发布器会把版本1 分配给存储的流程定义 。create-id发布器 会提取idloan:1 根据流程名称和分配的版本。

再次发布流程会导致在数据库中创建一个新流程定义。 但是一个增加的版本数会被分配。 出于版本 化的目的,如果有相同的名字, 流程定义就会相同。

推荐用户为所有流程执行提供key的引用。 启动一个新流程执行像这样:

Execution execution = executionService.startExecution("loan:1", "request7836");

返回值是一个execution接口,防止关系的向导。 那是因为服务方法外面,事务和hibernate会话没有 保证一直打开。 实际上,上面给出的默认的配置只保证 事务和会话在服务方法执行中是打开的。 所以 服务方法外的关系导航可能引起一个hibernate的 LazyInitializationException. 但是当前的活动名称 还可以被验证。

assertEquals("evaluate", execution.getActivityName());

生成可以被获得的id也是非常重要的。 默认的id-generator会用来生成流程定义的id 给出的key来为 流程执行生成一个唯一id,像这样:

assertEquals("loan:1/request7836", execution.getId());

那个id必须提供给外部触发器 像这样处理流程执行:

executionService.signalExecu

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号