zoukankan      html  css  js  c++  java
  • jpbm工作流框架

    一:JBPM是什么?有什么用?能解决什么问题?

    现实生活中有很多需要走一些流程的过程,比如请假流程,报销流程等,使用工作流框架,即可写一个流程即可,添加流程时不在繁琐的建立新的各种配置。

    1:jBPM,全称是Java Business Process Management,是一种基于J2EE的轻量级工作流管理系统。

    2:他可以使用 JPdl详细定义状态图的每个部分,如起始,结束状态,状态之间的转换等。

    3:JBPM还有一个特点就是他使用  Hibernate  来管理他的数据库,他会在数据库中建立十八张表,项目中的流程都存在于这18张表中。不仅如此,他还提供了各个数据库的执行脚本

    二:基本操作

    1:以请假为例说明其基本操作

    1:添加Jar包,提供三个核心配置文件

    核心配置文件-----jbpm.cfg.xml
    hibernate框架配置文件-----jbpm.hibernate.cfg.xml
    日志配置文件-----logging.properties

    2:加载发布流程定义:公司中的管理员通过jBPM的designer插件设计了一套请假的流程是什么样子的。

    .3:对于流程的基本操作

    3.1)部署流程

    1 NewDeployment deployment = processEngine.getRepositoryService().createDeployment();
    2 ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(new File("D:\room\jbpm\process\hello.zip")));
    3 deployment.addResourcesFromZipInputStream(zipInputStream);
    4 String id = deployment.deploy();
    5 System.out.println(id);

    3.2)删除流程

    1 String deploymentId = "1";
    2 processEngine.getRepositoryService().deleteDeployment(deploymentId);

    3.3)查询流程

    1 ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
    2 long count = query.count();
    3 System.out.println("当前系统流程定义的数量 = " + count);
    4 List<ProcessDefinition> list = query.list();

    3.4)获取一次流程对应的文档(xml文件以及png图片)

     1 Set<String> names = processEngine.getRepositoryService().getResourceNames(deploymentId);
     2 for(String name:names){
     3 System.out.println(name);
     4 }
     5 
     6 //获得一次部署对应的文件输入流
     7 String resourceName = "helloworld.jpdl.xml";
     8 //获得部署对应的输入流
     9 InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName);
    10 //通过此输出流将文件保存到本地磁盘
    11 OutputStream out = new FileOutputStream(new File("d:\" + resourceName));
    12 byte[] b = new byte[1024];
    13 int len = 0;
    14 while((len = in.read(b)) != -1){
    15 out.write(b, 0, len);
    16 }
    17 out.close();
    18 in.close();

    4 启动流程:现在可以请假了!!

    1     String processDefinitionId = "请假流程-2";
    2     ProcessInstance processInstance = processEngine.getExecutionService().startProcessInstanceById(processDefinitionId);

    5 处理任务:

    5.1查询我可以处理的任务

    1 String userId = "王五";
    2     //获取任务查询对象
    3     TaskQuery query = processEngine.getTaskService().createTaskQuery();
    4     query.assignee(userId);//添加过滤条件
    5     List<Task> list = query.list();

    5.2 办理任务

    1     String taskId = "50001";
    2     processEngine.getTaskService().completeTask(taskId);

    6 记录流程的相关状态

    5:在操作过程中常用的Service

    1)processEngine.getRepositoryService()----流程定义的部署,删除,查询,获得流程定义文档
    2)processEngine.getExecutionService()-----启动一个流程实例,跳转到下一步
    3)processEngine.getTaskService()----------查询我的任务列表,办理任务

    6:在炒作过程中常用的查询对象

    1)流程定义查询对象---processEngine.getRepositoryService().createProcessDefinitionQuery();
    2)流程实例查询对象---processEngine.getExecutionService().createProcessInstanceQuery();
    3)任务查询对象-------processEngine.getTaskService().createTaskQuery();
    4)部署查询对象-------processEngine.getRepositoryService().createDeploymentQuery();

    7:jBPM中的及格对象

    1)Deployment----部署对象,对应就是一次部署
    2)Execution-----执行对象
    3)ProcessDefinition----流程定义对象,一个流程的步骤说明
    4)ProcessInstance---流程实例对象,其实就是一个特殊的执行对象,特指从流程开始到结束的最大分支
    5)Task----任务对象

    二:Myeclipse2017集成JBPM7框架。

    1:登陆官网  http://downloads.jboss.org/jbpm/release/7.0.0.Final/  下载  jbpm7 -full 压缩包 

    2:在Myeclipse2017安装路径【D:Mycelipse2017install】下新建文件夹【jpbm7-plugins】

    3)在安装路径下的dropins文件夹下【D:Mycelipse2017installdropins】新建  【jbpm.link】文件,内容为

    path=D:\Mycelipse2017\install\jpbm7-plugins

    4)将【jbpm-installer-7.0.0.Final.zip】解压下的【jbpm-installerlib 】文件夹下,找到找到org.drools.updatesite-7.0.0.Final.zip  将此文件解压 复制【 features 】和【 plugins 】文件到第2步【jbpm7-plugins】文件夹下

    5)将j【bpm-installerlib 】文件夹下【jbpm-7.0.0.Final-bin.zip】解压,新建并复制到【D:Mycelipse2017jbpm7.Final-binjbpm-7.0.0.Final-bin 】文件夹下

    6)重启Myeclipse2017,window——>preferences——>jBPM,然后添加刚刚在【D:Mycelipse2017jbpm7.Final-binjbpm-7.0.0.Final-bin】文件夹下的内容,结果如图

     

    7)点击Apply——>OK

    8)  新建jBPM工程验证即可。

     三:如何在SSH项目中整合  jbpm 并使用。

    1)对于jar包,原有的SSH项目中对于jpbm所依赖的15个jar包其实已经包含了10个,我们只需再考五个即可。

    2)配置文件:原来的三个只需拷一个【 jbpm.cfg.xml 】,其他的由其他进行配置,

      是jbpm.hibernate.cfg.xml

    所以在beans.xml文件中配置如下内容即可

     1     <!-- 本地会话工厂bean -->
     2     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
     3         <property name="dataSource" ref="dataSource"/>
     4         <!-- 注入hibernate属性 -->
     5         <property name="hibernateProperties">
     6             <props>
     7                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
     8                 <prop key="hibernate.hbm2ddl.auto">update</prop>
     9                 <prop key="hibernate.show_sql">true</prop>
    10                 <prop key="hibernate.format_sql">true</prop>
    11             </props>
    12         </property>
    13         <!-- hibernate映射文件的位置 -->
    14         <property name="mappingDirectoryLocations">
    15             <list>
    16                 <value>classpath:cn/xqc/moder/domain</value>
    17             </list>
    18         </property>
    19 <!--                     新加的   strat                 -->
    20         <!-- 加载jbpm jar包中的hbm映射文件 -->
    21         <property name="mappingJarLocations">
    22             <list>
    23                 <value>/WEB-INF/lib/jbpm.jar</value>
    24             </list>
    25         </property>
    26 <!--                     新加的    end                -->
    27     </bean>

        注:Tomact  与  jbpm的EL表达式的包冲突的问题。

    3)配置jbpm与Spring整合

    整合后我们要将jbpm的控制权交给Spring管理。所以在beans.xml文件中添加如下内容

    1     
    2     <!-- 配置jbpm和spring框架整合的核心类 -->
    3     <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper">
    4         <!-- 指定jbpm框架的核心配置文件 -->
    5         <property name="jbpmCfg" value="jbpm.cfg.xml"/>
    6     </bean>
    7     
    8     <!-- 配置ProcessEngine对象 交由Spring进行管理 -->
    9     <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine"></bean>

    并且修改我们刚刚拷贝的【jbpm.cfg.xml】文件修改如下

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 
     3 <jbpm-configuration>
     4 
     5   <import resource="jbpm.default.cfg.xml" />
     6   <import resource="jbpm.businesscalendar.cfg.xml" />
     7   <!--
     8   
     9   将其改为    jbpm.tx.spring.cfg.xml
    10   <import resource="jbpm.tx.hibernate.cfg.xml" />
    11   
    12   -->
    13   <import resource="jbpm.tx.spring.cfg.xml"></import>
    14   <import resource="jbpm.jpdl.cfg.xml" />
    15   <import resource="jbpm.bpmn.cfg.xml" />
    16   <import resource="jbpm.identity.cfg.xml" />
    17 
    18   <!-- Job executor is excluded for running the example test cases. -->
    19   <!-- To enable timers and messages in production use, this should be included. -->
    20   <!--
    21   <import resource="jbpm.jobexecutor.cfg.xml" />
    22   -->
    23 
    24 </jbpm-configuration>

    4)可以新建一个  Class 让其获取  ProcessEngine 对象测试项目是否整合完成。还有一个可以看一下jbpm的那18张表是不是在数据库中已经创建了。如果创建了,基本就没问题了。

    1     @Resource
    2     private ProcessEngine processEngine;

    5)然后就可以操作  Service 进行流程控制了。

     

  • 相关阅读:
    POJ 1703 Find them, Catch them
    POJ 2236 Wireless Network
    POJ 2010 Moo University
    POJ 2184 Cow Exhibition
    POJ 3280 Cheapest Palindrome
    POJ 3009 Curling 2.0
    POJ 3669 Meteor Shower
    POJ 2718 Smallest Difference
    POJ 3187 Backward Digit Sums
    POJ 3050 Hopscotch
  • 原文地址:https://www.cnblogs.com/nullering/p/9450859.html
Copyright © 2011-2022 走看看