JBPM4.3使用说明

JBPM4.3使用说明

 

安装及整合

目录结构

下载JBPM4.3 下载地址:http://sourceforge.net/projects/jbpm/files/a)%20jBPM%204/

JBPM4.3的包结构目录为:

JBPM4.3使用说明

其中doc目录为jbpm的帮助文档,包含一份user guide和一份devguide以及javadocs,schemadocs, 我们主要关注的是user guide。 如果想深入的了解JBPM,需要学习devguide

 

Example目录是Jbpm自带的例子。

Install目录是我们的安装目录,这个目录就是方便我们安装及整合Jbpm 的目录,非常的人性化。JBPM的自动化部署是基于ant,需要我们在系统中安装ant(过会将使用这个目录进行安装描述)


lib
目录是jbpm所有依赖包的目录,如果你直接把这个目录的lib copy到你项目的lib中会出现jar冲突的问题。整合这些jar是个麻烦的事情。

 

MigrationJBPM3JBPM4升级的一个目录,我们用不着。

 

SrcJBPM4.3的源码包

 

Jbpm.jarJbpm4.3jar

 

安装JBPM

 

打开cmd,切换到{jbpm.home}/install目录。使用ant –p命令(需安装ant,并配置好环境变量)  这个命令描述了你可以自动化的所有工作。如图:

 

JBPM4.3使用说明

 

如:你想连接数据库把JBPM的表都建好,首先得告诉他你想连哪个数据库以及用户名密码,修改{jbpm.home}/install目录下的build.xml中的第9句,里面有多种数据库可以选择,我们写上oracle。 然后再找到{jbpm.install}/install/jdbc目录下的oracle.properties。将里面的内容改成你的数据库连接内容。然后再在命令行下执行ant create.jbpm.schema

 

如果你嫌这样很麻烦,那你就自己连上数据库,找到{jbpm-home}/install/src/db/create/目录下相应数据库的create.sql 然后复制进去就OK。删除的话就使用drop目录下的drop.sql

 

还有很多其它有用的命令,如ant get.eclipse 这样直接下载了一个包含了流程设计器的eclipse jee ant get.tomcat 直接下载一个配置好了环境的tomcat。这个tomcat已经放入了那些jbpm依赖的jar。执行完ant get.tomcat后就可以使用ant demo.setup.tomcat就可以把它的例子放到tomcat下运行  等等

 

整合spring

JBPM4.3整合spring非常的简单,它已经内置了对spring的支持。

我们找到{jbpm.home}/install/src/cfg/spring 目录。打开applicationContext.xml

<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />

 <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />

这两行复制到你工程中的spring配置文件中。在sessionFacotry中加入:

<property name="configLocation" value="classpath:jbpm.hibernate.cfg.xml" />

再把{jbpm.home}/install/src/cfg/jbpm下的spring.jbpm.cfg.xml复制到你的classpath中,改名为jbpm.cfg.xml

这样就配置成功了。

然后如果你在流程定义的时候需要引用bean比如event on=”start” expr=”#{xxxBeanListener}”  使用它的表达式获取bean

 

参看dev guideChapter17 Spring整合一章

 

安装流程设计器:

使用eclipse3.5  Help-Install New Software-Archive –定位到${jbpm.home}/install/src/gpd/jbpm-gpd-site.zip  确定重启 eclipse OK

安装整合过程中的问题  参看:http://www.iteye.com/topic/577078 

JBPM4概览

PVM

PVM简介:PVM (Process Virtual Machine), 主要是想作为一个开发平台,在这个平台上,可以很方便的开发工作流,服务编制(orchestration),BPM等等.就比如 说jPDL这套语法的内部实现就是基于PVM.将来基于PVM可以开发一个符合WS-BPEL 2.0的模块. PVM可以简单的看成是一个状态机

架构图:

JBPM4.3使用说明

 

具体参考:http://people.apache.org/~jeffyu/articles/zh_CN/jbpm/(这篇文章很不错)

Jbpm 服务简介        

我们开发中主要会使用到PVM提供的几类服务:

查看org.jbpm.api.ProcessEngine.java,这个工厂类提供了所有对外发布的服务。包含:

1)      RepositoryService getRepositoryService();//获取与流程部署有关的方法:如部署一个流程定义的xml文件:processEngine.getRepositoryService().createDeployment().addResourceFromClasspath(“com/xx/jpdl/xx.jpdl.xml”);还可以部署zip压缩文件,其中zip压缩文件中要包含流程定义的xml文件以及自动生成图片。

删除流程定processEngine.getRepositoryService().deleteDeployment(java.lang.String deploymentId) 

创建一个流程部署的查询 processEngine.getRepositoryService().createDeploymentQuery()

2ExecutionService getExecutionService();  获取一个管理流程执行的服务对象

包含方法:startProcessInstanceByIdString processDefinationId) 根据流程定义ID启动一个流程实例,返回流程实例ID 。我们在启动流程的时候会调用这个方法

ProcessInstance startProcessInstanceById(String processDefinitionId, Map<String, Object> variables);//启动流程实例并传入流程变量

ProcessInstance signalExecutionById(String executionId);//传入执行ID触发流程执行

其中可以根据流程实例ID 获取Execution对象 如:Execution exec = this.processEngine.getExecutionService().createProcessInstanceQuery().processInstanceId(processId).uniqueResult().findActiveExecutionIn("xiaojia");

ProcessInstanceQuery createProcessInstanceQuery();//创建一个流程实例的查询对象

void endProcessInstance(String processInstanceId, String state);//结束一个流程实例,任何时候你都可以结束一个流程

还有其它方法,可以查看org.jbpm.api.ExecutionService源代码以及它的默认实现org.jbpm.pvm.internal.svc. ExecutionServiceImpl 

HistoryService getHistoryService();//获得历史流程实例记录和历史任务处理记录等信息

当一个task完成后,它就会被删除并在HistoryTask表中重新创建。所以,查询历史处理的任务记录必须通过HistoryService处理。

这里面只有查询方法,如使用 processEngine.getHistroyService().createHistoryTaskService().executionId(processId).list();查询指定流程实例的任务历史处理记录

还有其它方法可以查看api

TaskService getTaskService();//任务处理Service

这个服务提供了创建新任务newTask(),任务授权assignTask(..),完成任务completeTask(..),添加任务批注addTaskComment(..),查询指定用户的当前任务列表findPersonalTasks(..) ,删除任务deleteTask(..)等。

ManagementService getManagementService();//主要是JBPM提供的JOB服务

IdentityService getIdentityService();//使用这个类可能需要重新实现IdentitySession接口,并配置到jbpm.cfg.xml文件中。具体没有详细了解

JPDL简介

1.      Start state

开始节点  流程开始,每个流程定义文件只能有一个开始节点。

2.      Task node

任务节点  人工参与,调用processEngine.getTaskService().complete()完成任务

3.      State node

状态节点

需要使用execution.signalExcution()触发流程流转

4.      Descision Node

流程流向判断节点

指定condition 条件或者DesisionHandler

5.      Fork node

分支节点,任务并行处理

6.      Join node

任务聚合节点

7.      End State

任务结束节点  可以有多个结束节点

8.      Transition

控制任务流向

9.      Event

事件触发 可以在任何节点加事件触发处理

 

具体参看${JPBM.HOME}/doc/userguide文档 关于JPDL的描述

 

请假流程定义示例

<?xml version="1.0" encoding="UTF-8"?>

 

<process key="leave" name="leave" xmlns="http://jbpm.org/4.0/jpdl">

   <start g="493,45,48,48" name="开始">

      <transition g="-79,-22" name="to exclusive1" to="判断 "/>

   </start>

   <decision g="493,141,48,48" name="判断">

      <transition g="-73,-22" name="to manager" to="部门经理审批">

           <condition expr="#{days&lt;=2}"/><!—使用表达式定义流转条件:小于2天部门经理审批,大于2天分管经理审批 –->

      </transition>

      <transition g="-75,-22" name="to fenguan2" to="分管经理审批"/>

   </decision>

   <task g="364,243,92,52" name="部门经理审批" form="leave!managerAuditForward.action">

<!—注:这里的指定Taskform ,即任务处理的url,这样用户在查看代办任务列表中,点击处理任务(url即这儿的form)即可到达任务处理页面  -- >

        <assignment-handler expr="#{leaveManagerAssign}">

        </assignment-handler>

      <transition g="-68,-22" name="to guidang" to="归档"/>

      <transition name="to end" to="end1" g="279,268:-50,-22"/>

   </task>

   <task g="625,232,92,52" name="分管经理审批">

       <assignment-handler expr="#{leaveFenguan2Assign}">

        </assignment-handler>

      <transition g="-42,-22" name="to ceo" to="归档"/>

   </task>

 

   <state g="520,451,92,52" name="归档">

        <on event="start">

                  <event-listener expr="#{guidangListener}">                

             </event-listener>

         </on>

      <transition g="-58,-22" name="to xiaojia" to="销假"/>

   </state>

   <state g="526,547,92,52" name="销假">

        <on event="start">

                <event-listener expr="#{xiaojiaListener}">               

             </event-listener>

         </on>

      <transition g="-50,-22" name="to end1" to="结束"/>

   </state>

<end g="273,539,48,48" name="结束"/>

</process>

 

注:授权处理器代码:

public class LeaveFenguanAssignment implements AssignmentHandler{

       public void assign(Assignable assignable, OpenExecution execution)

                     throws Exception {

              assignable.setAssignee("2");

              //简单授权给用户2处理此任务

       }

}

监听器处理代码:

public class ArchiveListener implements EventListener{

       public void notify(EventListenerExecution execution) throws Exception {

              //SendEmail,Logger,SendMessage etc

       }

}

 

                                                                                                 

 

你可能感兴趣的:(spring,tomcat,bean,ant,jbpm)