- 浏览: 71418 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
jinjiankang:
请教:整合后,%Tomcat%\webapps 下有两个应用吗 ...
JForum单点登陆原理与配置 -
enica:
首先你有一个应用A和一个jforum应用,做单点登录的目的就是 ...
JForum单点登陆原理与配置 -
horseroad:
你好,最近网站遇到了想你所说的这种问题,在你文章的最后一句(设 ...
JForum单点登陆原理与配置
你要用jBPM4.3,首先至少你要了解
1.UML2.0的活动图(因为jBPM是Activity Diagram模型)
2.Hibernate(因为jBPM集成了Hibernate作为引擎的持久框架)
当然最重要的是你对工作流的系统结构有初步的了解。
具体指引请参考 用户手册和开发手册,这里只是一些简单补充。
一、jBPM4.3下载
sourceforge下载
http://sourceforge.net/projects/jbpm/
svn仓库里下载
http://anonsvn.jboss.org/repos/jbpm/jbpm4
二、搭建环境(GDP在Eclipse上的安装)
当你无法在Eclipse安装jBPM4.3 GDP插件,把你的Eclipse SDK版本升级到3.42就OK了。
本人用Myeclipse8.5
三、Myeclipse8.5安装jbpm4插件
下载好的jBPM4.3解包,找到jbpm-4.3\install\src\gpd\jbpm-gpd-site.zip
菜单【Help】-【MyEclipse Configuration Center】-选中【Software】点击【add site】-【Add from Archive File】选中jbpm-gpd-site.zip 点击ok
在【Personal Sites】将里面的接口右击 add to profile ,再点击右上角 Apply 7 change。自己重启,新建就能看到jbpm的菜单,毕!
四、jBPM4.3+SSH
1.在jbpm-4.3\install\src\db\create下选择你使用的数据库脚本(总共有18张表)
2.使用jbpm-4.3\install\src\demo下的SQL脚本生成测试用的数据
3.spring2.5+
4.hibernate用jbpm4.3的包,不支持ehcache。
四、主要配置文件
jbpm.hibernate.cfg.xml
applicationContext.xml
jbpm.cfg.xml --这个文件一定要放到src目录下,不然系统找不到,开始半天没调通就是这个问题。
jbpmTemplate.java
配置文件就是这些,毕!
五、请假流程
下面完成一个简单的请假流程。
参见:http://abstractforever.iteye.com/blog/608189
附录:
JBPM4表结构说明
JBPM4_DEPLOYMENT 流程定义表
JBPM4_DEPLOYPROP 流程定义属性表
JBPM4_EXECUTION 流程实例表
JBPM4_HIST_ACTINST 流程活动(节点)实例表
JBPM4_HIST_DETAIL 流程历史详细表
JBPM4_HIST_PROCINST 流程实例历史表
JBPM4_HIST_TASK 流程任务实例历史表
JBPM4_HIST_VAR 流程变量(上下文)历史表
JBPM4_ID_GROUP 组表
JBPM4_ID_MEMBERSHIP 用户角色表
JBPM4_ID_USER 用户表
JBPM4_JOB 定时表
JBPM4_LOB 存储表
JBPM4_PARTICIPATION 参与者表
JBPM4_SWIMLANE 泳道表
JBPM4_TASK 任务表
JBPM4_VARIABLE 上下文表
红 色的表为经常使用的表.这里不使用JBPM自己的权限角色定义.
发布一个流程deploy后
jbpm4_deployment新增一条记录
jbpm4_deployprop新增三条记录
jbpm4_lob 新增一条记录
开始一个流程startProcessInstanceByKey后
jbpm4_execution新增一条记录
jbpm4_hist_actinst 新增一条记录
jbpm4_hist_procinst新增一条记录
jbpm4_hist_task新增一条记录
jbpm4_task 新增一条记录
流程定义相关的布署信息就存储在(1) JBPM4_DEPLOYMENT、(2) JBPM4_DEPLOYPROP 及(3) JBPM4_LOB 中。上传一个包含png和jpdl.xml的zip包后,JBPM4_DEPLOYMENT多一条记录 JBPM4_DEPLOYPROP 多三条, JBPM4_LOB多两条。
(4)J B PM4_HIST_PROCINST 与(5) JBPM4_HIST_ACTINST 分别存放的是Process Instance、Activity Instance的历史记录。
(6)JBPM4_EXECUTION 主要是存放JBPM4的执行信息,Execution机制代替了JBPM3的Token机制(详细参阅JBPM4的PVM机制,过段时间我也会进一步分析)。
(7)JBPM4_TASK 存放需要人来完成的Activities,需要人来参与完成的Activity 被称为Task。
(8)JBPM4_PARTICIPATION 存放 Participation的信息,Participation的种类有Candidate、Client、Owner、 Replaced Assignee和Viewer。而具体的Participation既可以是单一用户,也可以是用户组。
(9)JBPM4_SWIMLANE。 Swim Lane是一种Runtime Process Role。通过Swim Lane,多个Task可以一次分配到同一Actor身上。
(10) JBPM4 _VARIABLE 存的是进行时的临时变量。
(11) JBPM4_HIST_DETAIL 保存 Variable的变更记录。
(12)JBPM4_HIST_VAR 保存历史的变量 。
(13) JBPM4_HIST_TASK Task的历史信息。
(14)JBPM4_ID_GROUP (15)JBPM_ID_MEMBERSHIP (16)JBPM4_ID_USER 这三张表很常见了,基本的权限控制,关于用户认证方面建议还是自己开发一套,JBPM4的功能太简单了,使用中有很多需要难以满足。
(17) JBPM4_JOB 存放的是Timer 的定义。
(18) JBPM4_PROPERTY JBPM引擎参数表。
毕!
1.UML2.0的活动图(因为jBPM是Activity Diagram模型)
2.Hibernate(因为jBPM集成了Hibernate作为引擎的持久框架)
当然最重要的是你对工作流的系统结构有初步的了解。
具体指引请参考 用户手册和开发手册,这里只是一些简单补充。
一、jBPM4.3下载
sourceforge下载
http://sourceforge.net/projects/jbpm/
svn仓库里下载
http://anonsvn.jboss.org/repos/jbpm/jbpm4
二、搭建环境(GDP在Eclipse上的安装)
当你无法在Eclipse安装jBPM4.3 GDP插件,把你的Eclipse SDK版本升级到3.42就OK了。
本人用Myeclipse8.5
三、Myeclipse8.5安装jbpm4插件
下载好的jBPM4.3解包,找到jbpm-4.3\install\src\gpd\jbpm-gpd-site.zip
菜单【Help】-【MyEclipse Configuration Center】-选中【Software】点击【add site】-【Add from Archive File】选中jbpm-gpd-site.zip 点击ok
在【Personal Sites】将里面的接口右击 add to profile ,再点击右上角 Apply 7 change。自己重启,新建就能看到jbpm的菜单,毕!
四、jBPM4.3+SSH
1.在jbpm-4.3\install\src\db\create下选择你使用的数据库脚本(总共有18张表)
2.使用jbpm-4.3\install\src\demo下的SQL脚本生成测试用的数据
3.spring2.5+
4.hibernate用jbpm4.3的包,不支持ehcache。
四、主要配置文件
jbpm.hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <mapping resource="jbpm.repository.hbm.xml" /> <mapping resource="jbpm.execution.hbm.xml" /> <mapping resource="jbpm.history.hbm.xml" /> <mapping resource="jbpm.task.hbm.xml" /> <mapping resource="jbpm.identity.hbm.xml" /> </session-factory> </hibernate-configuration>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> </property> <property name="url"> <value>jdbc:microsoft:sqlserver://localhost:1433;dataBaseName=jbpm</value> </property> <property name="username"> <value>sa</value> </property> <property name="password"> <value>sa</value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="typeDefinitions"> <ref bean="jbpmTypes" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.SQLServerDialect </prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> </props> </property> <property name="configLocations"> <list> <value>classpath:hbm/jbpm.hibernate.cfg.xml</value> //指定你存放的路径 </list> </property> </bean> //大字符串操作 <bean id="jbpmTypes" class="org.springframework.orm.hibernate3.TypeDefinitionBean"> <property name="typeName" value="string_max" /> <property name="typeClass" value="org.jbpm.db.hibernate.StringMax" /> </bean> <!-- jbpm配置 --> <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" /> <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" /> <!-- 模板配置自己写的,不是必须的 --> <bean id="jbpmTemplate" class="com.meibiye.util.JbpmTemplate"> <property name="processEngine" ref="processEngine"></property> </bean> <!-- 事务管理bean(平台依赖,有jdbc/jta/jdbc等等) --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <aop:config> <aop:advisor pointcut="execution(* com.yyaccp.jbpm.biz.*.*(..))" advice-ref="txAdvice" /> </aop:config> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="delete*" /> <tx:method name="save*" /> <tx:method name="update*" /> <tx:method name="do*" /> <tx:method name="*" propagation="SUPPORTS" read-only="true" /> </tx:attributes> </tx:advice> </beans>
jbpm.cfg.xml --这个文件一定要放到src目录下,不然系统找不到,开始半天没调通就是这个问题。
<?xml version="1.0" encoding="UTF-8"?> <jbpm-configuration> <import resource="jbpm.default.cfg.xml" /> <import resource="jbpm.tx.spring.cfg.xml" /> <import resource="jbpm.jpdl.cfg.xml" /> <import resource="jbpm.bpmn.cfg.xml" /> <import resource="jbpm.identity.cfg.xml" /> <import resource="jbpm.businesscalendar.cfg.xml" /> <import resource="jbpm.console.cfg.xml" /> <!-- <import resource="jbpm.jobexecutor.cfg.xml" /> --> <process-engine-context> <string name="spring.cfg" value="classpath:/config/applicationContext.xml" /> //指定自己的路径 </process-engine-context> </jbpm-configuration>
jbpmTemplate.java
package com.meibiye.util; import java.util.List; import java.util.Map; import org.jbpm.api.Execution; import org.jbpm.api.ExecutionService; import org.jbpm.api.HistoryService; import org.jbpm.api.ManagementService; import org.jbpm.api.ProcessEngine; import org.jbpm.api.ProcessInstance; import org.jbpm.api.RepositoryService; import org.jbpm.api.TaskService; import org.jbpm.api.task.Task; /** * jbpm模板类(初步实现) * * @author Administrator * */ public class JbpmTemplate { /** * 部署流程到数据库 * * @param resourceName * 资源文件名字 比如(org/forever/jbpm/jpdl/process.jpdl.xml) * @return 返回流程定义id(格式:key-version) */ public String Deploy(String resourceName) { return repositoryService.createDeployment().addResourceFromClasspath( resourceName).deploy(); } /** * 创建一个新的流程实例 * * @param processDefinitionKey * (process.jpdl.xml中process标签的key) * @param processInstanceKey * (用户给的key,比如一个请假单的id) * @return 流程实例 */ public ProcessInstance addProcessInstance(String processDefinitionKey, String processInstanceKey) { return executionService.startProcessInstanceByKey(processDefinitionKey, processInstanceKey); } /** * 创建一个新的流程实例 * @param processDefinitionKey(process.jpdl.xml中process标签的key) * @param variables 该流程实例要用到的变量 * @param processInstanceKey(用户给定的业务key) * @return */ public ProcessInstance addProcessInstance( String processDefinitionKey, Map<String, ?> variables, String processInstanceKey){ return executionService.startProcessInstanceByKey(processDefinitionKey, variables, processInstanceKey); } /** * 提交任务 * @param taskId 任务id */ public void completeTask(String taskId){ taskService.completeTask(taskId); } /** * 将任务流转到指定名字的流程中去 * @param taskId * @param outcome */ public void completeTask(String taskId,String outcome){ taskService.completeTask(taskId, outcome); } /** * 根据key获取流程实例(这里我使用的uuid) * * @param key * (对应于数据库表jbpm4_execution中的KEY_字段) * @return 返回查找到得流程实例,没有返回null */ public ProcessInstance getProcessInstance(String key) { return executionService.createProcessInstanceQuery() .processInstanceKey(key).uniqueResult(); } /** * 根据executionId获取指定的变量值 * @param executionId * @param variableName * @return */ public Object getVariableByexecutionId(String executionId,String variableName){ return executionService.getVariable(executionId, variableName); } /** * 根据任务id获取指定变量值 * @param taskId * @param variableName * @return */ public Object getVariableByTaskId(String taskId,String variableName){ return taskService.getVariable(taskId, variableName); } /** * 获取指定用户名字的任务 * @param userId * @return */ public List<Task> findPersonalTasks(String userId){ return taskService.findPersonalTasks(userId); } /** * 根据任务id获取任务 * @param taskId * @return */ public Task getTask(String taskId) { return taskService.getTask(taskId); } /** * 根据流程实例id获取 * @param executionId * @return */ public Execution findExecutionById(String executionId) { return executionService.findExecutionById(executionId); } /** * 彻底删除文件的部署 * * @param deploymentId流程定义id */ public void deleteDeploymentCascade(String deploymentId) { repositoryService.deleteDeploymentCascade(deploymentId); } public JbpmTemplate() { } public JbpmTemplate(ProcessEngine processEngine) { this.processEngine = processEngine; repositoryService = processEngine.getRepositoryService(); executionService = processEngine.getExecutionService(); taskService = processEngine.getTaskService(); historyService = processEngine.getHistoryService(); managementService = processEngine.getManagementService(); } private ProcessEngine processEngine; private RepositoryService repositoryService = null; private ExecutionService executionService = null; private TaskService taskService = null; private HistoryService historyService = null; private ManagementService managementService = null; public ProcessEngine getProcessEngine() { return processEngine; } public void setProcessEngine(ProcessEngine processEngine) { this.processEngine = processEngine; System.out.println(processEngine); repositoryService = processEngine.getRepositoryService(); executionService = processEngine.getExecutionService(); taskService = processEngine.getTaskService(); historyService = processEngine.getHistoryService(); managementService = processEngine.getManagementService(); } public RepositoryService getRepositoryService() { return repositoryService; } public void setRepositoryService(RepositoryService repositoryService) { this.repositoryService = repositoryService; } public ExecutionService getExecutionService() { return executionService; } public void setExecutionService(ExecutionService executionService) { this.executionService = executionService; } public TaskService getTaskService() { return taskService; } public void setTaskService(TaskService taskService) { this.taskService = taskService; } public HistoryService getHistoryService() { return historyService; } public void setHistoryService(HistoryService historyService) { this.historyService = historyService; } public ManagementService getManagementService() { return managementService; } public void setManagementService(ManagementService managementService) { this.managementService = managementService; } }
配置文件就是这些,毕!
五、请假流程
下面完成一个简单的请假流程。
参见:http://abstractforever.iteye.com/blog/608189
附录:
JBPM4表结构说明
JBPM4_DEPLOYMENT 流程定义表
JBPM4_DEPLOYPROP 流程定义属性表
JBPM4_EXECUTION 流程实例表
JBPM4_HIST_ACTINST 流程活动(节点)实例表
JBPM4_HIST_DETAIL 流程历史详细表
JBPM4_HIST_PROCINST 流程实例历史表
JBPM4_HIST_TASK 流程任务实例历史表
JBPM4_HIST_VAR 流程变量(上下文)历史表
JBPM4_ID_GROUP 组表
JBPM4_ID_MEMBERSHIP 用户角色表
JBPM4_ID_USER 用户表
JBPM4_JOB 定时表
JBPM4_LOB 存储表
JBPM4_PARTICIPATION 参与者表
JBPM4_SWIMLANE 泳道表
JBPM4_TASK 任务表
JBPM4_VARIABLE 上下文表
红 色的表为经常使用的表.这里不使用JBPM自己的权限角色定义.
发布一个流程deploy后
jbpm4_deployment新增一条记录
jbpm4_deployprop新增三条记录
jbpm4_lob 新增一条记录
开始一个流程startProcessInstanceByKey后
jbpm4_execution新增一条记录
jbpm4_hist_actinst 新增一条记录
jbpm4_hist_procinst新增一条记录
jbpm4_hist_task新增一条记录
jbpm4_task 新增一条记录
流程定义相关的布署信息就存储在(1) JBPM4_DEPLOYMENT、(2) JBPM4_DEPLOYPROP 及(3) JBPM4_LOB 中。上传一个包含png和jpdl.xml的zip包后,JBPM4_DEPLOYMENT多一条记录 JBPM4_DEPLOYPROP 多三条, JBPM4_LOB多两条。
(4)J B PM4_HIST_PROCINST 与(5) JBPM4_HIST_ACTINST 分别存放的是Process Instance、Activity Instance的历史记录。
(6)JBPM4_EXECUTION 主要是存放JBPM4的执行信息,Execution机制代替了JBPM3的Token机制(详细参阅JBPM4的PVM机制,过段时间我也会进一步分析)。
(7)JBPM4_TASK 存放需要人来完成的Activities,需要人来参与完成的Activity 被称为Task。
(8)JBPM4_PARTICIPATION 存放 Participation的信息,Participation的种类有Candidate、Client、Owner、 Replaced Assignee和Viewer。而具体的Participation既可以是单一用户,也可以是用户组。
(9)JBPM4_SWIMLANE。 Swim Lane是一种Runtime Process Role。通过Swim Lane,多个Task可以一次分配到同一Actor身上。
(10) JBPM4 _VARIABLE 存的是进行时的临时变量。
(11) JBPM4_HIST_DETAIL 保存 Variable的变更记录。
(12)JBPM4_HIST_VAR 保存历史的变量 。
(13) JBPM4_HIST_TASK Task的历史信息。
(14)JBPM4_ID_GROUP (15)JBPM_ID_MEMBERSHIP (16)JBPM4_ID_USER 这三张表很常见了,基本的权限控制,关于用户认证方面建议还是自己开发一套,JBPM4的功能太简单了,使用中有很多需要难以满足。
(17) JBPM4_JOB 存放的是Timer 的定义。
(18) JBPM4_PROPERTY JBPM引擎参数表。
毕!
相关推荐
### jBPM4.3与SSH环境搭建详解 #### 一、引言 jBPM (JBoss Business Process Management) 是一个开源的工作流管理系统,它提供了用于定义业务流程的工具和APIs。本文将详细介绍如何在开发环境中安装并配置jBPM4.3...
在jbpm4.3的环境中,JSP可以用于创建用户友好的交互式界面,展示工作流程的状态,或者提供用户进行审批操作的表单。 结合【描述】中的“业务流程定制,领导审批”,我们可以推断这是一个涉及企业内部审批流程的应用...
本示例主要实现了流程的基本管理,流程实例的管理,...使用本例子只需要拷贝jbpm4.3的lib的jar包到本实例lib里面即可运行,注意用tomcat6的话必须把juel.jar,juel-engine.jar、juel-impl.jar剪切到tomcat的lib目录下。
【标题】"jbpm4.3+struts2+spring3+hibernate3整合(一)"涉及的是一个常见的Java企业级应用架构整合实践,其中jbpm4.3是业务流程管理(Business Process Management)框架,Struts2是MVC(Model-View-Controller)...
SSH+JBPM4.3的整合是企业级应用开发中的一种常见组合,SSH指的是Spring、Struts和Hibernate这三个开源框架的集成,而JBPM4.3则是一个强大的工作流管理系统,用于实现业务流程自动化。这篇内容将深入探讨这两个技术...
"jBPM4.3+struts2.1.8+spring2.5整合" 这个标题表明我们将探讨一个基于Java的企业级应用开发集成框架。jBPM是业务流程管理(Business Process Management)的一个开源工具,版本4.3,用于管理和执行工作流和业务流程...
jbpm4.4+ssh整合还需要安装插件进入到myeclipse中 将相应的jar文件放进去 就能够运行 jbpm4.4 jar ssh(strut2,hibernate3,spring3)三大框架整合的jar包 例子是 请假流程 代码中有很好的注释 便于初学者学习
JBPM4.3 整合SSH lib part7 源码在另外一个资源: http://download.csdn.net/source/2485339
JBPM4.3 整合SSH lib part3 源码在另外一个资源: http://download.csdn.net/source/2485339
JBPM4.3 整合SSH lib part1 源码在另外一个资源: http://download.csdn.net/source/2485339
JBPM4.3 整合SSH lib part3 源码在另外一个资源: http://download.csdn.net/source/2485339
JBPM4.3 整合SSH lib part6 源码在另外一个资源: http://download.csdn.net/source/2485339
JBPM4.3 整合SSH lib part5 源码在另外一个资源: http://download.csdn.net/source/2485339
JBPM4.3 整合SSH lib part2 源码在另外一个资源: http://download.csdn.net/source/2485339
【jbpm4.3环境搭建】涉及的知识点主要包括jbpm工作流引擎的版本管理、集成环境的构建、软件依赖配置以及数据库的连接设置。以下是详细的内容: 1. **jbpm4.3**:jbpm(Java Business Process Management)是一个...
【jbpm5+SSH集成详解】 jbPM5和SSH(Spring、Struts、Hibernate)的集成是企业级Java应用开发中的常见实践,旨在利用jbPM5的流程管理能力与SSH框架的强大功能,构建出高效、灵活的企业级业务系统。jbPM5是一个开源...
JBPM4.3 整合struts2 hibernate spring 请假实例, lib下载,在我的另外资源,路径: http://download.csdn.net/source/2485359 http://download.csdn.net/source/2485373 http://download.csdn.net/source/2485385 ...
`ssh整合需要的jar包目录.doc`应该列出了整合SSH与jbpm4.3所需的所有依赖库,包括SSH框架的jar包和jbpm4.3的jar包,这对于正确构建项目环境至关重要。 总之,SSH与jbpm4.3的整合是企业级应用中常见的技术实践,它能...
2. **安装与配置**:详述如何在开发环境中安装Jbpm4.3,包括所需的Java环境、数据库设置以及Eclipse IDE的集成。 3. **模型设计**:讲解Jbpm流程图的创建,包括任务、事件、决策点等元素,以及如何使用BPMN2.0标准...