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

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

JBPM4.4(二)——初步运用_第1张图片


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


           一,和各种框架一样,首先需要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的编写:


		<?xml version="1.0" encoding="UTF-8"?>
		
		<jbpm-configuration>
		  <!-- 引入jbpm的一些配置文件 -->
		  <import resource="jbpm.default.cfg.xml" />
		  <import resource="jbpm.businesscalendar.cfg.xml" />
		  <import resource="jbpm.tx.hibernate.cfg.xml" />
		  <import resource="jbpm.jpdl.cfg.xml" />
		  <import resource="jbpm.bpmn.cfg.xml" />
		  <import resource="jbpm.identity.cfg.xml" />
		</jbpm-configuration>



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


		<hibernate-configuration>
		  <session-factory>
		  
		     <!-- 数据库连接,注意方言的要用InnoDB的 -->
		     <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
		            ……………………
		     
		     <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" />
		     
		     <mapping resource="com/bjpowernode/jbpm4/FlowCard.hbm.xml"/>
		     <mapping resource="com/bjpowernode/jbpm4/ApproveInfo.hbm.xml"/>
		  </session-factory>
		</hibernate-configuration>

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

JBPM4.4(二)——初步运用_第2张图片


         四,部署流程:


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


    //创建processEngine
	ProcessEngine processEngine = new Configuration().buildProcessEngine();
	//创建RepositoryService,其他六个一样的创建法
	RepositoryService repositoryService = processEngine.getRepositoryService();
         
         //进行部署,
	repositoryService.createDeployment().addResourcesFromZipInputStream(new ZipInputStream(new FileInputStream("zip包的路径"))).deploy();



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


	     //利用executeService,注意id=key + 横线 + version
             executionService.startProcessInstanceById("FlowCard-1");

	//获得最新版本的流程定义
	ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
					.orderDesc(ProcessDefinitionQuery.PROPERTY_VERSION)
					.page(0, 1)
					.uniqueResult();
	//创建流程实例
	executionService.startProcessInstanceById(processDefinition.getId());



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


	//取得张三的待办任务
	public void testJbpm3() {
		//取的代办流程
		Task task = taskService.findPersonalTasks("张三").get(0);
		
		//获取JBPM中的session方便,便于事物的处理
		EnvironmentFactory environmentFactory = (EnvironmentFactory)processEngine;
		EnvironmentImpl environmentImpl = environmentFactory.openEnvironment();
		DbSessionImpl dbSessionImpl = environmentImpl.getFromCurrent(DbSessionImpl.class);
		Session session = dbSessionImpl.getSession();
		
		try {
			//开启事物
			session.getTransaction().begin();
			
			//流程单的信息添加
			FlowCard flowCard = new FlowCard();
			flowCard.setName("xxxx");
			flowCard.setLevel("xxxxx");
			flowCard.setCreateTime(new Date());
			flowCard.setCreator("xxxx");
			//保存流向单
			session.save(flowCard);
			
			//将流向单信息放到流程变量中
			Map<String, Object> variables = new HashMap<String, Object>();
			variables.put("id", flowCard.getId());
			variables.put("level", flowCard.getLevel());
			
			//放到jbpm4_variable表中,流程变量与流程共存亡
			taskService.setVariables(task.getId(), variables);
			//完成任务
			taskService.completeTask(task.getId());
			//提交事物
			session.getTransaction().commit();
		}catch(Exception ex) {
			ex.printStackTrace();
			//事物回滚
			session.getTransaction().rollback();
		}finally {
			session.close();
		}
	}



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

 

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



你可能感兴趣的:(workflow,工作流,jbpm,业务流程,jpdl)