这篇博客重点描述一下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的编写:
<?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>
<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定义流程的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());
//取得张三的待办任务
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定义流程自动进行流转。这里需要说的对于6个Service,需要熟练掌握,我们都是通过Service的方法进行对表进行操作的,多看的API文档。
综上为JBPM4.4的简单运用,注意对JPDL流程定义图的画法属性掌握和流程变量的处理,6个Service方法属性的灵活掌握,这样我们才能对表中的数据进行灵活的处理。建议初期多观察观察表中的数据,对于JBPM处理工作流的流程有个很好的认识,对于更好的驾驭还是非常不错的。