jBPM4.3+SSH环境搭建


1    JBPM4.3+SSH环境搭建  你要用 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 Xml 代码 1. 2. 3. 6. 7. 8. 9. 1    2    10. 11. 12. 13. 14. 15. applicationContext.xml Xml 代码 1. 2. 10. 11. 13. 14. com.microsoft.jdbc.sqlserver.SQLServerDriver 15. 16. 17. jdbc:microsoft:sqlserver://localhost:1433;dataBaseName=jbpm 18. 19. 20. sa 21. 22. 23. sa 24. 25. 26. 28. 29. 2    3    30. 31. 32. 33. 34. 35. 36. 37. org.hibernate.dialect.SQLServerDialect 38. 39. true 40. true 41. 42. 43. 44. 45. classpath:hbm/jbpm.hibernate.cfg.xml //指定你存放的 路径 46. 47. 48. 49. 50. //大字符串操作 51. 53. 54. 56. 57. 58. 59. 60. 62. 63. 64. 65. 66. 67. 68. 71. 73. 74. 75. 76. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. jbpm.cfg.xml --这个文件一定要放到 src 目录下,不然系统找不到,开始半天没调通就是这个问题。 Xml 代码 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. // 指定自己的路径 16. 17. 18. 4    5    jbpmTemplate.java Java 代码 1. package com.meibiye.util; 2. 3. import java.util.List; 4. import java.util.Map; 5. 6. import org.jbpm.api.Execution; 7. import org.jbpm.api.ExecutionService; 8. import org.jbpm.api.HistoryService; 9. import org.jbpm.api.ManagementService; 10. import org.jbpm.api.ProcessEngine; 11. import org.jbpm.api.ProcessInstance; 12. import org.jbpm.api.RepositoryService; 13. import org.jbpm.api.TaskService; 14. import org.jbpm.api.task.Task; 15. 16. /** 17. * jbpm 模板类(初步实现) 18. * 19. * @author Administrator 20. * 21. */ 22. public class JbpmTemplate { 23. 24. /** 25. * 部署流程到数据库 26. * 27. * @param resourceName 28. * 资源文件名字 比如(org/forever/jbpm/jpdl/process.jpdl.xml) 29. * @return 返回流程定义 id(格式:key-version) 30. */ 31. public String Deploy(String resourceName) { 32. return repositoryService.createDeployment().addResourceFromClasspath( 33. resourceName).deploy(); 34. } 35. 36. /** 37. * 创建一个新的流程实例 38. * 39. * @param processDefinitionKey 5    6    40. * (process.jpdl.xml 中 process 标签的 key) 41. * @param processInstanceKey 42. * (用户给的 key,比如一个请假单的 id) 43. * @return 流程实例 44. */ 45. public ProcessInstance addProcessInstance(String processDefinitionKey, 46. String processInstanceKey) { 47. return executionService.startProcessInstanceByKey(processDefinitionKey, 48. processInstanceKey); 49. 50. } 51. 52. /** 53. * 创建一个新的流程实例 54. * @param processDefinitionKey(process.jpdl.xml 中 process 标签的 key) 55. * @param variables 该流程实例要用到的变量 56. * @param processInstanceKey(用户给定的业务 key) 57. * @return 58. */ 59. public ProcessInstance addProcessInstance( 60. String processDefinitionKey, 61. Map variables, 62. String processInstanceKey){ 63. return executionService.startProcessInstanceByKey(processDefinitionKey, vari ables, processInstanceKey); 64. } 65. 66. /** 67. * 提交任务 68. * @param taskId 任务 id 69. */ 70. public void completeTask(String taskId){ 71. taskService.completeTask(taskId); 72. } 73. 74. /** 75. * 将任务流转到指定名字的流程中去 76. * @param taskId 77. * @param outcome 78. */ 79. public void completeTask(String taskId,String outcome){ 80. taskService.completeTask(taskId, outcome); 81. } 82. 6    7    83. /** 84. * 根据 key 获取流程实例(这里我使用的 uuid) 85. * 86. * @param key 87. * (对应于数据库表 jbpm4_execution 中的 KEY_字段) 88. * @return 返回查找到得流程实例,没有返回 null 89. */ 90. public ProcessInstance getProcessInstance(String key) { 91. return executionService.createProcessInstanceQuery() 92. .processInstanceKey(key).uniqueResult(); 93. } 94. 95. 96. /** 97. * 根据 executionId 获取指定的变量值 98. * @param executionId 99. * @param variableName 100. * @return 101. */ 102. public Object getVariableByexecutionId(String executionId,String variableName){ 103. return executionService.getVariable(executionId, variableName); 104. } 105. 106. 107. /** 108. * 根据任务 id 获取指定变量值 109. * @param taskId 110. * @param variableName 111. * @return 112. */ 113. public Object getVariableByTaskId(String taskId,String variableName){ 114. return taskService.getVariable(taskId, variableName); 115. } 116. 117. /** 118. * 获取指定用户名字的任务 119. * @param userId 120. * @return 121. */ 122. public List findPersonalTasks(String userId){ 123. return taskService.findPersonalTasks(userId); 124. } 125. 7    8    126. /** 127. * 根据任务 id 获取任务 128. * @param taskId 129. * @return 130. */ 131. public Task getTask(String taskId) { 132. return taskService.getTask(taskId); 133. 134. } 135. 136. /** 137. * 根据流程实例 id 获取 138. * @param executionId 139. * @return 140. */ 141. public Execution findExecutionById(String executionId) { 142. return executionService.findExecutionById(executionId); 143. } 144. 145. /** 146. * 彻底删除文件的部署 147. * 148. * @param deploymentId 流程定义 id 149. */ 150. public void deleteDeploymentCascade(String deploymentId) { 151. repositoryService.deleteDeploymentCascade(deploymentId); 152. } 153. 154. public JbpmTemplate() { 155. 156. } 157. 158. public JbpmTemplate(ProcessEngine processEngine) { 159. this.processEngine = processEngine; 160. repositoryService = processEngine.getRepositoryService(); 161. executionService = processEngine.getExecutionService(); 162. taskService = processEngine.getTaskService(); 163. historyService = processEngine.getHistoryService(); 164. managementService = processEngine.getManagementService(); 165. } 166. 167. private ProcessEngine processEngine; 168. private RepositoryService repositoryService = null; 169. private ExecutionService executionService = null; 8    9    170. private TaskService taskService = null; 171. private HistoryService historyService = null; 172. private ManagementService managementService = null; 173. 174. public ProcessEngine getProcessEngine() { 175. return processEngine; 176. } 177. 178. public void setProcessEngine(ProcessEngine processEngine) { 179. this.processEngine = processEngine; 180. System.out.println(processEngine); 181. repositoryService = processEngine.getRepositoryService(); 182. executionService = processEngine.getExecutionService(); 183. taskService = processEngine.getTaskService(); 184. historyService = processEngine.getHistoryService(); 185. managementService = processEngine.getManagementService(); 186. } 187. 188. public RepositoryService getRepositoryService() { 189. return repositoryService; 190. } 191. 192. public void setRepositoryService(RepositoryService repositoryService) { 193. this.repositoryService = repositoryService; 194. } 195. 196. public ExecutionService getExecutionService() { 197. return executionService; 198. } 199. 200. public void setExecutionService(ExecutionService executionService) { 201. this.executionService = executionService; 202. } 203. 204. public TaskService getTaskService() { 205. return taskService; 206. } 207. 208. public void setTaskService(TaskService taskService) { 209. this.taskService = taskService; 210. } 211. 212. public HistoryService getHistoryService() { 213. return historyService; 9    10    214. } 215. 216. public void setHistoryService(HistoryService historyService) { 217. this.historyService = historyService; 218. } 219. 220. public ManagementService getManagementService() { 221. return managementService; 222. } 223. 224. public void setManagementService(ManagementService managementService) { 225. this.managementService = managementService; 226. } 227. 228. 229.} 配置文件就是这些,毕! 五、请假流程 下面完成一个简单的请假流程。 参见:http://abstractforever.javaeye.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 用户表 10    11    11    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引擎参数表。   
还剩10页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享pdf获得金币 ] 13 人已下载

下载pdf

pdf贡献者

chenshijie

贡献于2011-03-01

下载需要 15 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf