当前位置:文档之家› jBPM4.4详细讲解

jBPM4.4详细讲解

jBPM4.4一、什么是jBPMJBPM是一个扩展性很强的工作流系统,百分百用JAVA语言开发,持久层采用Hibernate实现,理论上说,只要Hibernate支持的数据库JBPM都支持。

同时它还能被部署在任何一款JAVA应用服务器上。

java Business Process Management :工作流,工作流引擎注:记得j小写,因为j代表java,与Log4j中j一样工作流管理系统不止一中,如还有Intaliol BPMS …但JBoss jBPM灵活性且扩展性高。

jBPM项目于2002.3由Tom Baeyens 发起,2003.12发布1.0版本,2004年10.18发布2.0,并在这天加入了JBOSS组织-→被RedHat公司二、能干什么提供工作流的实现,帮助更好的进行BPM三、jBPM有什么,简介jBPM的Service API 各种服务1:ProcessEngine:流程引擎。

并不负责具体的业务,而是用于获取各种Service。

2:RepositoryService:流程资源服务的接口,如流程定义发布、查询、删除等。

3:ExecutionService:用于操作流程实例的服务,可以进行流程实例发布、查询、流程推进、设置流程变量等操作。

4:TaskService:用于操作人工任务的服务,可以进行任务创建、查询、获取、提交完成、保存、删除等操作。

5:HistoryService:用于操作流程历史的服务,提供对流程历史库(就是已经完成的流程实例)的操作。

比如:历史流程实例,历史活动实例等。

6:IdentityService:用于操作用户、用户组以及成员关系的服务7:ManagementService:流程管理控制服务的接口,只提供异步工作(Job)相关的执行和查询操作。

四、Myeclipse8.5 搭配开发环境1.jbpm-4.4.zip 下载完2.myeclipse→help→Myeclipse Configuration Center →add…….3.找到\jbpm-4.4\install\src\gpd\jbpm-gpd-site.zip 安装这个插件4.记得不要联网安装,不要选source文件5.安装完后window→JBoss jBPM→runtime Location→add 添加jbpm的路径6.添加lib下所有jar包,如果你使用的是tomcat6.0则:要把Juel-api.jar ,juel-impl.jar,juel-engine.jar 拷到tomcat lib 下并把原来的el-api.jar删掉项目中就不要再导上面三个包五、修改配置文件1、将example中的下列配置文件拷贝到java项目的src目录下:jBPM.cfg.xml、jBPM.hibernate.cfg.xml、jBPM.mail.properties、jBPM.mail.templates.xml、process_forms.css2、在以上配置文件中的jBPM.hibernate.cfg.xml,实际上就是我们熟悉的hibernate.cfg.xml,这里,要修改为连接我们的数据库。

<propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><propertyname="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property><property name="ername">test</property><property name="connection.password">test</property><property name="dialect">org.hibernate.dialect.Oracle9iDialect</property>3、在这里还需要强调,其中的一个配置:<property name="hibernate.hbm2ddl.auto">create-drop</property>如果这个配置存在的话,那么每次操作数据库都会把原来的数据表干掉,然后重新建立。

所以,我们在第一次访问数据库的时候打开它,以后则关闭。

六、工作方式采用xml定义流程方式,这Xml代码既可以直接放在java中,也可以单独存在一个xml文件中,然后我们对其进行解析。

ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(“<xml>…”)ProcessDefinition.parseXmlResource("helloWorld.xml");七、JPDL学习JPDL(JBPM Process Definition Language)是构建于jBPM框架上的流程语言之一。

JPDL详细定义了这个状态图的每个部分,如: 开始、结束状态,状态之间的转换等。

这种语言的定义对于用户来说比较容易理解,也比较容易对其进行扩展。

一个JBPM的流程定义XML文件中包含一个< process-definition>元素,而一个< process-definition>元素又包含零个或一个< description>元素,零个或多个的< swimlane>元素,一个< start-state>元素,零个或多个的< state>元素或< decision>元素或< fork>元素或< join>元素,以及零个或多个的< action>元素,零个或多个<task-node>和<node>元素,一个< end-state>元素等等。

此外,< process definition>元素有一个标示符,以“name”属性来表示,这个属性必须存在,用来表示该流程的名称。

在jPDL中提供了任务(tasks)、待处理状态(wait states)、计时器(timers)、自动处理(automated actions)…等术语,并通过图型化的流程定义,很直观地描述业务流程。

总结:可以理解为一个产生XML的图形化设计建模软件。

八、流程定义(ProcessDefinition)就是对一个流程抽象的对象化定义。

一套系统中,用户可以定义并保存多个流程定义实体,如:报销流程定义、请假流程定义、人事录用流程定义等。

流程节点:是对流程中的过程环节/行为的抽象对象化定义。

结点有两个主要职责:一,实现某个指定行为,这在jBPM中就是执行一段制定的Java代码;二,传递、维持流程的延续,直至达到最终结点。

流程实例(ProcessInstance):流程实例是流程定义的运行时状态,它记录了一个流程运行的起始时间、结束时间等状态信息。

任务实例(Task):用来描述一个任务实例对象,可以分配给指定的操作者处理,当任务完成后,将触发流程继续向下流转。

任务实例的生命周期很简单,生成实例-->处理-->任务结束。

九、ProcessEngine流程引擎工作流软件的核心,负责装载并解释过程定义、控制过程实例、安排活动上面的代码演示了如何通过classpath根目录下默认的配置文件jbpm.cfg.xml创建一个//2.第二种发布的方式,发布打包的zip文件repositoryService.createDeployment().addResourcesFromZipInputStre am(zipInputStream).deploy();//拿到已经发布的所有流程List<ProcessDefinition> lists =processEngine.getRepositoryService().createProcessDefinitionQuery().l ist();注: 在流程发布的时候流程引擎会吧一个ID分配给流程定义。

这个ID的格式为{key}-{version}如果没哟指定key则引擎会再流程的名称基础上自动生成,其实将不是字母和数字的字符替换成下划线。

然后我们就可以检索流程定义了!十一、启动流程//第一种:processEngine.getExecutionService().startProcessInstanceById(Proc essId,map);这里processId是已经发布的流程定义Id,我们告诉jBPM我们启动哪个流程,而map是作为我们向下传递数据的map封装。

这里主要是确定开始申请节点的名称//第二种:key就是流程的名称如我们发布了一个MyProcess.zip流程executionService.startProcessInstanceByKey("MyProcess",map);分析quaApplyAdd方法:十二、流程下发pleteProcessById(taskIdString, "task", "分公司级飞管标准专员审核报批", map);十三、任务列表(Worklists)List<Task> tasks =processEngine.getTaskService().createTaskQuery().list();for(Task t :tasks){System.out.println(t.getActivityName());//当前节点System.out.println(t.getId()); //System.out.println(t.getAssignee());//发起者System.out.println(t.getCreateTime());System.out.println(t.getName());}过程执行中需要用户交互的地方,工作流引擎把任务添加到任务表中,以便任务表处理器对其处理,任务表处理器管理与工作流参与者的交互。

用户自己从任务表中选择执行任务,任务表也用来指示任务的完成。

十四、任务操作ProcessEngine processEngine = Configuration.getProcessEngine();TaskService taskService = processEngine.getTaskService();String taskId = “70003”;//这个是流程运行中生成的任务idMap map = new HashMap();map.put("dmResult", 1);map.put("days", 15);pleteTask(taskId,map);//任务下发十五、历史操作ProcessEngine engine = Configuration.getProcessEngine();HistoryService hs = engine.getHistoryService();List<HistoryProcessInstance> list =hs.createHistoryProcessInstanceQuery().list();for(HistoryProcessInstance hpi : list){System.out.println("state="+hpi.getState()+" ,pdid=”+hpi.getProcessDefinitionId()+",piid=”+hpi.getProcessInstanceId()+",startTime="+hpi.getStartTime());}Start活动:Start活动的意义在于指定了一个流程实例应该从哪来开始,即流程定义的入口。

相关主题