JBPM4.4(二)——初步运用

来源:互联网 发布:天刀好看的捏脸数据 编辑:程序博客网 时间:2024/05/17 06:29
  

JBPM4.4(二)——初步运用

           这篇博客重点描述一下JBPM4.4的初步运用,利用eclipse进行工作流开发,首先需要进行eclipse插件的安装jbpm-gpd-site.zip。通过help->Install NewSoftware进行安装即可。当我们右击新建other出现如图所示时,表示我们已经安装好了:



           好,安装好了,看一下如何使用吧:


           一,和各种框架一样,首先需要JBPM4.4所需要的jar包,这里利用MySql数据库为例演示:


jbpm.jar(核心jar包)

lib\*.jar(删除mysql-connector-java.jar,我们自己引入MySql的驱动jar包,这里有很多jar包,我们可以有选择的进行删除,例如一些例子,日志的,单元测试的等,当然了如果不知道的话就不要删除)

MySQL JDBC Driver(MySql的驱动jar包)

 

         二,编写必要的配置文件:


            1,jbpm.cfg.xml的编写:


[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:18px;">      <?xml version="1.0" encoding="UTF-8"?>  
  2.           
  3.         <jbpm-configuration>  
  4.           <!-- 引入jbpm的一些配置文件 -->  
  5.           <import resource="jbpm.default.cfg.xml" />  
  6.           <import resource="jbpm.businesscalendar.cfg.xml" />  
  7.           <import resource="jbpm.tx.hibernate.cfg.xml" />  
  8.           <import resource="jbpm.jpdl.cfg.xml" />  
  9.           <import resource="jbpm.bpmn.cfg.xml" />  
  10.           <import resource="jbpm.identity.cfg.xml" />  
  11.         </jbpm-configuration>  
  12. </span>  



           2,jbpm.hibernate.cfg.xml,JBPM的持久化层就是使用Hibernate的:


[html] view plaincopyprint?派生到我的代码片
  1. <span style="font-size:18px;">      <hibernate-configuration>  
  2.           <session-factory>  
  3.             
  4.              <!-- 数据库连接,注意方言的要用InnoDB的 -->  
  5.              <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>  
  6.                     ……………………  
  7.                
  8.              <mapping resource="jbpm.repository.hbm.xml" />  
  9.              <mapping resource="jbpm.execution.hbm.xml" />  
  10.              <mapping resource="jbpm.history.hbm.xml" />  
  11.              <mapping resource="jbpm.task.hbm.xml" />  
  12.              <mapping resource="jbpm.identity.hbm.xml" />  
  13.                
  14.              <mapping resource="com/bjpowernode/jbpm4/FlowCard.hbm.xml"/>  
  15.              <mapping resource="com/bjpowernode/jbpm4/ApproveInfo.hbm.xml"/>  
  16.           </session-factory>  
  17.         </hibernate-configuration>  
  18. </span>  

          三,定义流程:JPDL(Jboss JBPM Process   Definition Language),用来构建构建JBPM框架上的流程语言之一。在JPDL中提供了任务(tasks)、待处理状态(wait states)、计时器(timers)、自动处理(automated actions)……等,并通过图形化的流程定义,很直观的描述业务流程。其实就是画活动流程图,它会自动为我们生成项目需要的XML资源文件,然后进行解析此资源文件,进行流程的处理,这里其实就是我们只需要关心流程,对于具体的操作,JBPM已经都进行封装。



         四,部署流程:


            将利用JPDL定义流程的xml文件和图片进行压缩成zip压缩包,利用repositoryService进行部署:


[java] view plaincopyprint?派生到我的代码片
  1. <span style="font-size:18px;">    //创建processEngine  
  2.     ProcessEngine processEngine = new Configuration().buildProcessEngine();  
  3.     //创建RepositoryService,其他六个一样的创建法  
  4.     RepositoryService repositoryService = processEngine.getRepositoryService();  
  5.            
  6.          //进行部署,  
  7.     repositoryService.createDeployment().addResourcesFromZipInputStream(new ZipInputStream(new FileInputStream("zip包的路径"))).deploy();  
  8. </span>  



        五,创建流程实例,当然也可以通过获取最新版本的流程进行动态获取id


[java] view plaincopyprint?派生到我的代码片
  1. <span style="font-size:18px;">       //利用executeService,注意id=key + 横线 + version  
  2.              executionService.startProcessInstanceById("FlowCard-1");  
  3.   
  4.     //获得最新版本的流程定义  
  5.     ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()  
  6.                     .orderDesc(ProcessDefinitionQuery.PROPERTY_VERSION)  
  7.                     .page(01)  
  8.                     .uniqueResult();  
  9.     //创建流程实例  
  10.     executionService.startProcessInstanceById(processDefinition.getId());  
  11. </span>  



       六,采用TaskService取得代办流程并进行处理,简单看一个测试程序:


[java] view plaincopyprint?派生到我的代码片
  1. <span style="font-size:18px;">  //取得张三的待办任务  
  2.     public void testJbpm3() {  
  3.         //取的代办流程  
  4.         Task task = taskService.findPersonalTasks("张三").get(0);  
  5.           
  6.         //获取JBPM中的session方便,便于事物的处理  
  7.         EnvironmentFactory environmentFactory = (EnvironmentFactory)processEngine;  
  8.         EnvironmentImpl environmentImpl = environmentFactory.openEnvironment();  
  9.         DbSessionImpl dbSessionImpl = environmentImpl.getFromCurrent(DbSessionImpl.class);  
  10.         Session session = dbSessionImpl.getSession();  
  11.           
  12.         try {  
  13.             //开启事物  
  14.             session.getTransaction().begin();  
  15.               
  16.             //流程单的信息添加  
  17.             FlowCard flowCard = new FlowCard();  
  18.             flowCard.setName("xxxx");  
  19.             flowCard.setLevel("xxxxx");  
  20.             flowCard.setCreateTime(new Date());  
  21.             flowCard.setCreator("xxxx");  
  22.             //保存流向单  
  23.             session.save(flowCard);  
  24.               
  25.             //将流向单信息放到流程变量中  
  26.             Map<String, Object> variables = new HashMap<String, Object>();  
  27.             variables.put("id", flowCard.getId());  
  28.             variables.put("level", flowCard.getLevel());  
  29.               
  30.             //放到jbpm4_variable表中,流程变量与流程共存亡  
  31.             taskService.setVariables(task.getId(), variables);  
  32.             //完成任务  
  33.             taskService.completeTask(task.getId());  
  34.             //提交事物  
  35.             session.getTransaction().commit();  
  36.         }catch(Exception ex) {  
  37.             ex.printStackTrace();  
  38.             //事物回滚  
  39.             session.getTransaction().rollback();  
  40.         }finally {  
  41.             session.close();  
  42.         }  
  43.     }  
  44. </span>  



         这样就可以根据不同的角色进行处理,JBPM会根据JPDL定义流程自动进行流转。这里需要说的对于6Service,需要熟练掌握,我们都是通过Service的方法进行对表进行操作的,多看的API文档。

 

         综上为JBPM4.4的简单运用,注意对JPDL流程定义图的画法属性掌握和流程变量的处理,6Service方法属性的灵活掌握,这样我们才能对表中的数据进行灵活的处理。建议初期多观察观察表中的数据,对于JBPM处理工作流的流程有个很好的认识,对于更好的驾驭还是非常不错的。

0 0
原创粉丝点击