一、JBPM定义JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。二、为什么用JBPM 业务分析师和开发人员使用的是同一种语言来交谈,大大降低了开发的风险,如果要开发一个项目,速度也更快了,因为开发人员不用再将用户需求转化成软件设计了。其次,JBPM采用的不是一般的开发工具,而是自己的图形化开发工具,非常方便随时了解和掌握运行的进程。最后,JBPM的流程框架非常灵活,使用起来也非常安全,它经过了安全认证,因此可以保证一些商业机密不被泄露。
三、JBPM环境配置详解首先在Eclipse中配置环境。如下:
① 配置GPD(流程设计器)Help ------> Install New Software点击add,出现一个Add Repository点击Archive,选择jbbm4.4/install/src/gpd/jbpm-gpd-site.zip ② 选择所有插件,然后点Next即可③
配置JBPM运行时1) 打开window --- preferences1) 选择 JBoss jBPM --> Runtime Locations2) 点击 Add...3) 在 Add Location 对话框中,输入一个名字,比如 jbpm-4.4 然后点击 Search...4) 在 Browse For Folder 对话框中,选择你的jbpm 根目录,然后点击 OK④
在目录中添加JPDL4模式如果你想直接编辑XML 源码, 最好是在你的XML 目录中指定一下模式(schema),这样当你在编辑流程源码的时候,可以更好的帮助你编写代码。1) 点击窗口 --> 属性(Windows --> Preferences)2) 选择XML --> 目录(XML --> XML CataLog)3) 点击添加(Add)4) 添加XML 目录(Add XML Catalog Entry)的窗口打开5) 点击map-icon 的图标下面的按钮并选择文件系统(File System)6) 在打开的对话框中, 选择jBPM 安装目录下src 文件夹中jpdl.xsd 文件7) 点击打开(Open)并且关闭所有的对话框
四、JBPM开发步骤详解 ① 引入JAR文件在jbpm4.4的解压包中根目录Jbpm的jar包还有lib文件夹中除report-engine,war包外所有jar包注:因为Jbpm4.4是用Mysql作为DB的,如果要用Oracle作为DB需要引入相应的驱动包。
② 创建配置文件
③ 画流程图---[新建jpdl.xml文件] 并生成jbpmtest.jpdl.xml文件:
五、关键代码① 创建表18张[http://www.linuxidc.com/Linux/2017-01/139344.htm]表的详细说明
②获取工作流引擎
| 123456 | ProcessEngine processEngine=new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine(); @Test public void test01(){ System.out.println(processEngine); } |
③部署流程定义?
| 123456789 | @Test public void deploy(){ String deployid = processEngine.getRepositoryService() .createDeployment() .addResourceFromClasspath("jbpmtest.jpdl.xml") .addResourceFromClasspath("jbpmtest.png").deploy(); System.out.println("部署流程 id:"+deployid); } |
④启动流程实例
| 1234567 | @Test public void startTest(){ ProcessInstance pi=processEngine.getExecutionService().startProcessInstanceByKey("jbpmtest");System.out.println("start ok!");System.out.println("id:"+pi.getId()+",状态:"+pi.getState()+",流程定义的ID:"+pi.getProcessDefinitionId()); } |
⑤查看任务列表
| 12345678910 | @Test public void selectTask(){ String user="张三"; String users="王五"; List<Task> tasks = processEngine.getTaskService().findPersonalTasks(user); for (Task task : tasks) { System.out.println("任务ID:"+task.getId()+" 任务名称:"+task.getName()+" 任务办理人:"+task.getAssignee()); } } |
⑥查看当前任务所在点
| 12345 | @Test public void findSelect(){ String name = processEngine.getExecutionService().createProcessInstanceQuery().processInstanceId("jbpmtest.80001").uniqueResult().findActiveActivityNames().toString(); System.out.println(name); } |
⑦办理任务
| 12345 | @Test public void testCompleteTask(){ processEngine.getTaskService().completeTask("10002"); System.out.println("OK"); } |
六、流程管理 ①查询所有流程定义
| 1 | ProcessEngine pro=Configuration.getProcessEngine(); |
| 1234567891011 | @Testpublic void findAll(){ List<ProcessDefinition> list = pro.getRepositoryService().createProcessDefinitionQuery().list(); for (ProcessDefinition pd : list) { System.out.println("id:"+pd.getId()+" name:"+pd.getName()+" key:"+pd.getKey()+" 版本号:"+pd.getVersion()+" 部署的id:"+pd.getDeploymentId()); }} |
②查询最新版的流程定义
| 123456789101112131415161718192021 | @Test public void getNewFindAll(){ List<ProcessDefinition> all = pro.getRepositoryService().createProcessDefinitionQuery().orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION).list(); Map<String, ProcessDefinition> map=new HashMap<String, ProcessDefinition>(); for (ProcessDefinition pd : all) { map.put(pd.getKey(), pd); } for (ProcessDefinition pd : map.values()) { System.out.println("id=" + pd.getId() + ", name=" + pd.getName() + ", key=" + pd.getKey() + ", version=" + pd.getVersion() + ", deploymentId=" + pd.getDeploymentId()); } } |
③根据id删除注:deleteDeploymentCascade级联删除
| 12345 | @Test public void delById(){ pro.getRepositoryService().deleteDeploymentCascade("1"); System.out.println("del ok!!!"); } |
④删除指定key的所有版本的流程
| 12345678 | @Test public void delByKey(){ List<ProcessDefinition> list = pro.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey("jbpmtest").list(); for (ProcessDefinition pd : list) { pro.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId()); } } |
⑤ZIP 部署
| 123456789 | @Test public void addZip(){ InputStream is=this.getClass().getClassLoader().getResourceAsStream("src.zip"); ZipInputStream zs=new ZipInputStream(is); String id= pro.getRepositoryService().createDeployment().addResourcesFromZipInputStream(zs).deploy(); System.out.println("部署成功:deploymentid:"+id); } |
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139343.htm