首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

JBPM4工作流施用(一)

2012-07-01 
JBPM4工作流应用(一)一、?JBPM4的结构特点1.嵌入式的工作流引擎,不需要依赖特定的中间件或服务器,减少了硬

JBPM4工作流应用(一)

一、?JBPM4的结构特点
1.嵌入式的工作流引擎,不需要依赖特定的中间件或服务器,减少了硬件和软件的绑定,完全支持嵌入式应用的
? 业务流程开发框架,可以在事务处理、数据持久化等各个方面与业务应用程序进行灵活的集成。
2.可拔插的体系架构,采用模块化的架构设计,采用了IOC的设计理念,各模块之间可以比较方便地解除耦合或
? 替换不同的实现,例如持久化、事务处理、身份认证、日志服务等,都由可选模块实现。
3.?易扩展的流程语言。


二、?Jbpm4的安装配置
1.下载地址:http://sourceforge.net/projects/jbpm/
2.解压资源包,进入目录install,在控制台下运行脚本:ant demo.setup.tomcat。会执行如下操作:
?? 1)下载安装Tomcat.
?? 2)安装HSQLDB,并创建数据表结构。
?? 3)启动Tomcat,创建examples.bar业务流程归档,并发布到JBPM数据库中,初始化相关用户和组。
?? 4)下载安装Eclipse,并启动Eclipse.
? ?5)安装JBPM Web控制台。
?? 6)安装Signavio Web 设计器。
3.在Eclipse中安装GPD插件,利用eclipse的软件升级指定GPD安装文件,文件为
? 下载资源包中install/src/gpd/jbpm-gpd-site.zip。
4.添加jbdl4 Schema检验,在eclipse中配置schema,指定jbpm4安装目录下src文件夹中jpdl.xsd文件。
? 步骤为:Window->Preferences->XML->XML CataLog->Add->File System。


三、?Jbpm流程API
1.流程相关概念
? 流程定义:对业务过程步骤的描述,表现为若干"活动"节点通过"转移"线条串联。
? 流程实例:表示流程定义在运行时特有的执行例程。
? 流程执行:流程实例在其生命周期中,指向当前执行活动的指针。


2.流程的6个Service API,可通过流程引擎对象的接口方法获取。
?? ProcessEngine processEngine = Configuration.getProcessEngine();?
?? 1)RepositoryService,流程资源服务的接口。提供对流程定义的部署、查询、删除等操作。
?? 2)ExecutionService,流程执行服务的接口。提供启动流程实例、“执行”推进、设置流程变量等操作。
?? 3)TaskService,人工任务服务的接口。提供对任务的创建、提交、查询、保存、删除等操作。
?? 4)HistoryService,流程历史服务的接口。提供对流程历史库中历史流程实例、历史活动实例等记录的查询操作。
?? 5)IdentityService,身份认证服务的接口。提供对流程用户、用户组以及组成员关系的相关服务。
?? 6)ManagementService,流程管理控制服务的接口。提供异步工作(Job)相关的执行和查询操作。

?

3.流程的布署和删除
?? 1)流程的布署??

Jpdl定义:

??

// 获取流程实例ID

Jpdl:

??

?

?流程执行操作同上面condition元素的操作。


? 3)使用decision活动的handler元素判断decision活动。

????ContentEvaluation类如下:

Jpdl:

?

Fork活动可以使流程在一条主干上出现并行的分支,join活动则可以使流程的并行分支聚合成一条主干。
部分执行测试代码如下:

ProcessInstance processInstance = executionService.startProcessInstanceByKey("ConcurrencyGraphBased");// 当前活动为产生的3个分支活动assertNotNull(processInstance.findActiveExecutionIn("send invoice"));assertNotNull(processInstance.findActiveExecutionIn("load truck"));assertNotNull(processInstance.findActiveExecutionIn("print shipping documents"));// 执行send invoice活动,流程会在聚合活动上等待其它分支的到来String sendInvoiceExecutionId = processInstance.findActiveExecutionIn("send invoice").getId();processInstance = executionService.signalExecutionById(sendInvoiceExecutionId);

?

热点排行