`
AngelAndAngel
  • 浏览: 229957 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jbpm学习笔记(三)部署jbpm流程定义(ant,api)

    博客分类:
  • jbpm
阅读更多
    在第一篇中我讲过怎样用ant命令安装部署jbpm,ant确实很强大,减轻了我们很多工作,假如你已经成功安装了jbpm(用${jbpm.home}表示安装的根目录),那么请看根目录下的\examples\target中有个examples.jar,这个文件在jbpm中表示一个“业务流程归档”,它存在的意义是什么呢。

    当我们的业务流程设计开发完毕后,会有很多的相关文件散着在,比如什么,定义流程的jpdl文件,流程图片文件,人机交互的表单页面,java类文件,等等,我们假如一个个滴手动往服务器上部署,可以,但是会累死你,所以,jbpm4支持将流程定义以及其相关资源打包成一个jar(java归档)格式的文件,部署到服务器上。

    那么jbpm4工作流引擎就提供了一个基于ant任务的api来部署业务流程归档叫做JbpmDeployTask,它不仅可以部署单个业务流程归档,也可以部署一组业务流程归档到服务器上。它通过读取jbpm.cfg.xml中的JDBC数据连接信息直接将业务流程归档部署到数据库中。在使用之前,确保你的数据库服务器正在运行。

    由于在之前我们已经ant过了,所以examples.jar就直接生成了,当然数据库也已经部署了。

    这里我们看一下jbpm是怎样处理这个业务流程归档的,首先它扫描业务流程归档中所有以.jpdl.xml结尾的文件,并解析,然后用来发起流程实例,业务流程归档中所有其他资源也会在部署过程中被持久化到数据库中。所有这些资源被统一编号保存在数据库表jbpm4_lob中,可以查看一下。我们可以通过jbpm4提供的RepositoryService.getResourceAsStream API随时访问这些资源。


在这里,先写点api的知识,你可以通过api来进行部署工作,如下

 package testmain;

import org.jbpm.test.JbpmTestCase;

/**
 * 
 * @author 阿飞哥 JbpmTestCase继承了Junit的TestCase类,是jbpm4对Junit框架 
 * 的扩展
 */
public class Test extends JbpmTestCase {

	// 这个成员域为单元测试保存流程定义的部署ID
	String deploymentId;

	// 一般在单元测试的初始化方法(setUp)中,执行流程定义的部署工作
	// 这是jBPM单元测试的约定,在后面的单元测试代码中,都将默认执行此约定

	@Override
	protected void setUp() throws Exception{
		super.setUp();
		
		/*
		   * repository
		   * 1.存放处, 储藏室        
                        * 2.仓库;宝库
                        * 3.学识渊博的人;智囊;知识宝典
		  */
		
		//使用RepositoryService提供的API方法从classpath中部署流
                     //程定义
		deploymentId=repositoryService.createDeployment
                      ().addResourceFromClasspath
                      ("my_process_define.jpdl.xml").deploy();
		
		//当然,在这里可以多次调用addResourceFromClasspath方法,
                     //将流程定义的其他资源都部署到数据库中
	}
	
	
	//一般在单元测试的结束方法(tearDown)中,执行删除流程定义部署的工作
	@Override
	protected void tearDown() throws Exception{
		
	//调用下面方法,将物理清楚deploymentId对应的流程定义及其所有相关资
         //源,并关联清楚基于此流程定义的流程实例,
         //活动实例,任务,历史流程实例等所有运行时以及历史的流程实体记录
	  repositoryService.deleteDeploymentCascade(deploymentId);	
	  super.tearDown();
	}

}

JbpmTestCase作为jbpm4框架的单元测试超类,为我们做了如下6个流程引擎服务的初始化工作
Protected static ProcessEngine processEngine=null;

//资源库服务
Protected static RepositoryService repositoryService;

//执行服务
Protected static ExecutionService executionService;

//管理服务
Protected static ManagementService managementService;

//任务服务
Protected static TaskService taskService;

//历史服务
Protected static HistoryService historyService;

//身份认证服务
Protected static IdentiryService identiryService;

JbpmTestCase在其initialize方法中式这样初始化上面的各种引擎服务的:

If(processEngine=null){
//根据默认配置,生成工作流引擎对象

processEngine=Configuration.getProcessEngine();

//利用工作流引擎对象,获取6个流程引擎服务
repositoryService=processEngine.get(Repository.class);
.……
……
}

    这篇主要讲了通过ant和调用jbpmapi方法发布到jbpm的数据库持久化环境中,使得流程定义得到保存,为后续的流程实例化运行提供模板基础。
下一篇将介绍一个在网上看到的例子 我觉得挺不错的,讲解一下api的一些使用,以便于完整的讲解各种API服务。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics