jBPM 44 入门指南Word文件下载.docx
- 文档编号:8012896
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:16
- 大小:27.19KB
jBPM 44 入门指南Word文件下载.docx
《jBPM 44 入门指南Word文件下载.docx》由会员分享,可在线阅读,更多相关《jBPM 44 入门指南Word文件下载.docx(16页珍藏版)》请在冰点文库上搜索。
OA(办公自动化)主要技术之一就是工作流。
2.jBPM4入门与准备
2.1.jBPM介绍
jBPM即javaBusinessProcessManagement,是基于java的业务流程管理系统,它是一组J2SE组件,可以作为J2EE应用集群部署。
jBPM是公开源代码项目。
jBPM是市面上相当流行的一款开源工作流引擎,引擎底层基于ActiveDiagram模型。
作为jBoss的一个子项目,它使用了hibernate,因此可以很好的支持主流数据库。
官方主页:
http:
//www.jboss.org/jbpm
本文档对应的版本为:
jBPM4.4
1,jBPM4.4使用Hibernate3.3.1作为引擎的持久框架。
2,jBPM4.4共有18张表。
2.2.jBPM3与jBPM4的区别说明
说明
jBPM3
jBPM4
数据库表的数量
32张表
18张表
流程定义的解析
先解析,再部署,表中即有流程定义文件,也有流程定义对象。
表中只保存流程定义文件,使用时再解析。
(所以没有与流程对象定义相关的表)
历史库
没有(正在执行数据的与执行完的数据都放在一起)
有(分开存放正在执行数据的与执行完的数据)
ProcessInstance
用Token表示执行路径,每个流程实例对应一个RootToken。
没有Token。
或说成把Token合并到ProcessInstance中了。
ProcessInstance也叫做Execution。
开始节点
启动流程实例后,停在开始节点
启动流程实例后,会自动离开开始节点。
任务定义
任务节点中可以定义多个任务
任务节点中只有一个任务,即任务节点就表示任务。
API分类
JbpmContext.getGraphSession()…
JbpmContext.getTaskMgmtSession()…
JbpmContext…
…
使用各种Service:
RepositoryService
ExecutionService
TaskService
Node(节点)
Activity(活动)
自定义节点:
Node
自定义活动:
Custom
办理任务
start(),end()
completeTask(taskId)
2.3.准备环境1:
安装流程设计器插件(GraphicalProcessDesigner)
1,jBPM4.4包含了一个图形化设计流程的工具(GPD),它是eclipse插件,是用来设计jPDL的图形化流程的,支持的版本为Eclipse3.5。
2,插件所在的路径为:
install/src/gpd/jbpm-gpd-site.zip。
3,安装方法:
在eclipse3.5中点击help->
installnewsoftware->
workwith->
add->
Archive,选择jbpm4插件的安装包install/src/gpd/jbpm-gpd-site.zip进行安装。
安装完成后进行重新启动Eclipse。
(在UserGuide文档的2.11.2节中有详细说明)。
4,查看是否成功安装了插件:
WindowPreference中是否有JbossjBPM项。
(通过实验,发现不可以使用把插件目录直接放到dropins下面的方法)
5,流程定义文件的xsd文件的路径为:
JBPM_HOME/src/jpdl-4.4.xsd
2.4.准备环境2:
准备jBPM开发环境
先新建Eclipse工程(JavaProject)。
2.4.1.添加jBPM的jar包
1,JBPM_HOME/jbpm.jar(核心包)
2,JBPM_HOME/lib/目录中的所有jar包,以下jar包可以不添加:
hsqldb.jar,postgresql.jar,mysql-connector-java.jar,servlet-api.jar,junit.jar。
其中junit.jar一定不要添加,因为是3.8.2版本,与我们使用的junit4有冲突。
3,所使用的数据库对应的驱动的jar包。
2.4.2.添加配置文件并修改配置文件内容
1,配置文件可以从JBPM_HOME/examples/src/中拷贝:
jbpm.cfg.xml、logging.properties、jbpm.hibernate.cfg.xml、jbpm.tx.hibernate.cfg.xml。
2,修改logging.properties中的日志输出级别为WARNING:
修改配置java.util.logging.ConsoleHandler.level=WARNING
3,修改jbpm.hibernate.cfg.xml中的数据库连接信息。
如果使用MySql,使用的方言一定要是org.hibernate.dialect.MySQL5InnoDBDialect。
(如使用MySQLDialect,就会在流程实例结束时抛异常:
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException:
Cannotdeleteorupdateaparentrow:
aforeignkeyconstraintfails(`jbpm44_20101028/jbpm4_execution`,CONSTRAINT`FK_EXEC_INSTANCE`FOREIGNKEY(`INSTANCE_`)REFERENCES`jbpm4_execution`(`DBID_`))。
)
4,创建数据库表。
使用Hibernate的自动建表,在jbpm.hibernate.cfg.xml中配置:
hibernate.hbm2ddl.auto=update。
说明:
如果要改变jbpm.hibernate.cfg.xml的文件名称,需要做:
1、从JBPM_HOME/src/中拷贝jbpm.tx.hibernate.cfg.xml放到工程的src/下,然后进行修改。
2、修改jbpm.tx.hibernate.cfg.xml中的hibernate主配置文件的路径配置(指定的是相对于classpath的相对路径)。
3.API与实体与表的说明
3.1.核心API
InteractingwithjBPMoccursthroughservices.TheserviceinterfacescanbeobtainedfromtheProcessEnginewhichisbuildfromaConfiguration.AProcessEngineisthreadsafeandcanbestoredinastaticmemberfield.
使用默认的配置文件生成Configuration并构建ProcessEngine:
ProcessEngineprocessEngine=newConfiguration().buildProcessEngine();
或是使用指定的配置文件(要放到classPath下):
ProcessEngineprocessEngine=newConfiguration()
.setResource("
my-own-configuration-file.xml"
.buildProcessEngine();
jBPM所有的操作都是通过Service完成的,以下是获取Service的方式:
RepositoryServicerepositoryService=processEngine.getRepositoryService();
ExecutionServiceexecutionService=processEngine.getExecutionService();
TaskServicetaskService=processEngine.getTaskService();
HistoryServicehistoryService=processEngine.getHistoryService();
ManagementServicemanagementService=processEngine.getManagementService();
jBPM自己有一个IOC容器。
Processengineobjectsdefinedintheconfigurationcanalsoberetrievedbytype(processEngine.get(Class<
T>
))orbyname(processEngine.get(String))。
各种Service的作用:
管理流程定义
执行管理,包括启动、推进、删除流程实例,设置变量等操作
任务管理(任务的查询与完成等操作)
HistoryService
历史管理(执行完的数据管理)
IdentityService
jBPM的用户、组管理
ManagementService
3.2.实体、实体之间的关系、表(了解一下就可以)
实体
对应表
Deployment
jbpm4_deployment
jbpm4_deployprop
ProcessDefinition
流程定义
Transition
流转(或叫做连线)
Activity
活动(或叫做节点)
ActivityBehaviour
ExternalActivityBehaviour
StartActivity
还有很多其他的Activity,都是ActivityBehaviour接口的实现类,代码对应活动的具体行为。
EndActivity
TaskActivity
Execution
jbpm4_execution
流程实例
TaskDefinition
Task
任务
jbpm4_task
4.系统的学习
4.1.管理流程(定义)
所有的流程定义的操作都是使用RepositoryService实现的。
相关的两个类:
Deployment与ProcessDefinition:
1,Deployment表示流程定义文档,可以添加一些文件:
.jpdl.xml与.png与.class等。
2,ProcessDefinition表示流程定义对象,流程定义包含多个Activity与多个Transition,流程定义对象是由.jpdl.xml文件解析得到的。
3,jBPM4只存储流程定义文档中的文件,使用时才解析出ProcessDefinition对象。
(jBPM3也存储解析后的ProcessDefinition对象)
4.1.1.部署流程定义
4.1.1.1.示例代码1:
流程定义有关文件在classpath中
StringdeploymentId=processEngine.getRepositoryService()
.createDeployment()
.addResourceFromClasspath("
process/test.jpdl.xml"
)/
.addResourceFromClasspath("
.deploy();
4.1.1.2.示例代码2:
一次添加多个流程定义有关文件(要先打成zip包)
.addResourcesFromZipInputStream(zipInputStream)
.deploy();
4.1.1.3.说明
方法:
RepositoryService.createDeployment():
NewDeployment
1,NewDeployment.addResourceFromClasspath(resource);
可以调用多次以添加多个文件。
文件重复添加也不会报错。
2,再调用.addResourceFromInputStream(resourceName,inputStream)添加一个文件(使用InputStream)
3,.addResourcesFromZipInputStream(zipInputStream)添加一个zip文件,里面有文件夹也没关系。
就相当于一次添加了多个文件
4,以上方法可以在一起调用。
5,一个文件添加多次,则都会存储,但只是一个流程定义。
6,如果name指定为中文,则key就会为一个汉字变为一个"
_"
。
4.1.2.查询流程定义
RepositoryService().createProcessDefinitionQuery()
1,调用.list()查询一个列表,或调用.uniqueResult()查询一个唯一的结果。
2,排序:
.orderAsc(ProcessDefinitionQuery.PROPERTY_NAME),其中属性名为常量
要完成的功能:
1,查询所有
2,查询所有最新的版本(要先查询出所有,再自己处理,只保留最新的版本)
4.1.2.1.示例代码1:
查询所有流程定义
//1,构建查询
ProcessDefinitionQuerypdQuery=processEngine.getRepositoryService()
.createProcessDefinitionQuery()//
.orderAsc(ProcessDefinitionQuery.PROPERTY_NAME)//
.orderDesc(ProcessDefinitionQuery.PROPERTY_VERSION);
//2,查询出总数量与数据列表
longcount=pdQuery.count();
List<
ProcessDefinition>
list=pdQuery.page(0,100).list();
//分页:
取出前100条记录
//3,显示结果
System.out.println(count);
for(ProcessDefinitionpd:
list){
System.out.println("
id="
+pd.getId()//
+"
deploymentId="
+pd.getDeploymentId()//
name="
+pd.getName()//
version="
+pd.getVersion()//
key="
+pd.getKey());
//
}
4.1.2.2.示例代码2:
查询所有最新版本的流程定义列表
//1,查询出所有流程定义
all=processEngine.getRepositoryService()//
.createProcessDefinitionQuery()//
.list();
//2,对结果进行过滤,不同的流程定义名称只保留最新的版本
Map<
String,ProcessDefinition>
map=newHashMap<
();
all){
ProcessDefinitionpdInMap=map.get(pd.getName());
if(pdInMap==null){
map.put(pd.getName(),pd);
}else{
if(pd.getVersion()>
pdInMap.getVersion()){
map.put(pd.getName(),pd);
}
}
Collection<
result=map.values();
result){
4.1.3.删除流程定义
4.1.3.1.示例代码1:
删除流程定义
repositoryService.deleteDeployment(deploymentId);
4.1.3.2.示例代码2:
删除流程定义,并删除关联的流程实例与历史信息
repositoryService.deleteDeploymentCascade(deploymentId);
4.1.3.3.示例代码3:
删除指定名称的所有版本
//1,查询出指定名称的所有流程定义列表
list=processEngine.getRepositoryService()//
.processDefinitionName("
test"
)//
//2,循环删除
processEngine.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId());
4.1.4.获取文件内容
4.1.4.1.示例代码
InputStreamin=repositoryService.getResourceAsStream(deploymentId,resourceName);
4.1.4.2.说明
1,resourceName是相对路径,或是部署时指定的名称。
2,如部署时使用.addResourceFromClasspath("
cn/itcast/test.jpdl.xml"
),则获取时指定名称为:
cn/itcast/test.jpdl.xml。
如果是zip,则是在zip中的一个相对于根的相对路径。
4.1.5.获取某节点的坐标
repositoryService.getActivityCoordinates(processDefinitionId,activityName);
4.2.执行流程(实例)
要使用到的Service有:
ExecutionService与TaskService。
4.2.1.启动流程实例
4.2.1.1.示例代码1:
使用指定key的最新版本启动流程实例
//流程定义的key
StringprocessDefinitionKey="
费用报销流程"
;
//启动流程实例
ProcessInstancepi=processEngine.getExecutionService()//
.startProcessInstanceByKey(processDefinitionKey);
//显示信息
System.out.println("
+pi.getId()//
+"
+pi.getName()//
+pi.getKey()//
state="
+pi.getState());
4.2.1.2.示例代码2:
使用指定key的最新版本启动流程实例,并设置一些流程变量
String,Object>
variables=newHashMap<
variables.put("
金额"
1000);
申请人"
"
张三"
);
ProcessInstancepi=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jBPM 44 入门指南 入门 指南