这篇博客重点描述一下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的编写:
- <span style="font-size:18px;"> <?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>
- </span>
2,jbpm.hibernate.cfg.xml,JBPM的持久化层就是使用Hibernate的:
- <span style="font-size:18px;"> <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>
- </span>
三,定义流程:JPDL(Jboss JBPM Process Definition Language),用来构建构建JBPM框架上的流程语言之一。在JPDL中提供了任务(tasks)、待处理状态(wait states)、计时器(timers)、自动处理(automated actions)……等,并通过图形化的流程定义,很直观的描述业务流程。其实就是画活动流程图,它会自动为我们生成项目需要的XML资源文件,然后进行解析此资源文件,进行流程的处理,这里其实就是我们只需要关心流程,对于具体的操作,JBPM已经都进行封装。
四,部署流程:
将利用JPDL定义流程的xml文件和图片进行压缩成zip压缩包,利用repositoryService进行部署:
- <span style="font-size:18px;"> //创建processEngine
- ProcessEngine processEngine = new Configuration().buildProcessEngine();
- //创建RepositoryService,其他六个一样的创建法
- RepositoryService repositoryService = processEngine.getRepositoryService();
- //进行部署,
- repositoryService.createDeployment().addResourcesFromZipInputStream(new ZipInputStream(new FileInputStream("zip包的路径"))).deploy();
- </span>
五,创建流程实例,当然也可以通过获取最新版本的流程进行动态获取id
- <span style="font-size:18px;"> //利用executeService,注意id=key + 横线 + version
- executionService.startProcessInstanceById("FlowCard-1");
- //获得最新版本的流程定义
- ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
- .orderDesc(ProcessDefinitionQuery.PROPERTY_VERSION)
- .page(0, 1)
- .uniqueResult();
- //创建流程实例
- executionService.startProcessInstanceById(processDefinition.getId());
- </span>
六,采用TaskService取得代办流程并进行处理,简单看一个测试程序:
- <span style="font-size:18px;"> //取得张三的待办任务
- 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();
- }
- }
- </span>
这样就可以根据不同的角色进行处理,JBPM会根据JPDL定义流程自动进行流转。这里需要说的对于6个Service,需要熟练掌握,我们都是通过Service的方法进行对表进行操作的,多看的API文档。
综上为JBPM4.4的简单运用,注意对JPDL流程定义图的画法属性掌握和流程变量的处理,6个Service方法属性的灵活掌握,这样我们才能对表中的数据进行灵活的处理。建议初期多观察观察表中的数据,对于JBPM处理工作流的流程有个很好的认识,对于更好的驾驭还是非常不错的。