搭建开发环境
1.为eclipse安装流程设计器gpd插件
安装完成后检查Window?Preference中是否有Jboss jBPM
路径jbpm-4.4/install/src/gpd/jbpm-gpd-site.zip
安装完后重启eclipse
2.添加jar包:jbpm.jar和JBPM_HOME/lib/下的jar。
注意不添加以下jar包:servlet-api.jar, junit.jar。
其中junit.jar一定不要添加,因为3.8.2版本与我们使用的junit4有冲突。
在tomcat中如果访问jsp出现javax/el/ExpressionFactory异常,则需要把juel.jar, juel-engine.jar, juel-impl.jar 这三个包复制到tomcat的lib中,并删除原来的el-api.jar。还要把工程中的三个jar删掉。
Jbpm开发包中已包含mysql驱动jar包
3.配置文件可以从JBPM_HOME/examples/src/中拷贝:
jbpm.cfg.xml (jbpm的配置文件)
logging.properties (日志文件)
jbpm.hibernate.cfg.xml (jbpm的hibernate配置文件)
注意事项
修改jbpm.hibernate.cfg.xml中的数据库连接信息。如果使用MySql,使用的方言一定要是:org.hibernate.dialect.MySQL5InnoDBDialect
把jbpm.hibernate.cfg.xml的hibernate.hbm2ddl.auto配置为update,初始化流程引擎时,jbpm就会自动建表。
数据库连接编码一定要是UTF-8。否则可能会在部署含有中文字符的流程定义时会抛异常,说sql语法错误。
修改logging.properties中的日志输出级别为WARNING: java.util.logging.ConsoleHandler.level=WARNING
4.编写代码;
jbpm初始化
初始化jbpm数据库环境
new Configuration().configure("jbpm.hibernate.cfg.xml").buildSessionFactory();
注意这里Configuration要是hibernate包中的。
获取工作流引擎
processEngine = new org.jbpm.api.Configuration().buildProcessEngine();
部署流程
processEngine.getRepositoryService()
.createDeployment()
.addResourceFromClasspath("test.jpdl.xml")
.addResourceFromClasspath("test.png")
.deploy();
jbpm编程操作:
启动流程 (流程实例)
processEngine
.getExecutionService().
.startProcessInstanceByKey(“test”); //key即可流程名称
结束流程
processEngine.getExecutionService().
endProcessInstance("test.130001", ProcessInstance.STATE_ENDED);
设置流程变量,设置的流程变量可以在后续流程中获取。注意设置的流程变量要实现Serializable接口
Map map = new HashMap();
map.put("cid", "张三");
processEngine
.getExecutionService().
.startProcessInstanceByKey("test“,map);
任务处理
任务查询:
Task task = processEngine.getTaskService()
.createTaskQuery()
.assignee("张三").uniqueResult();
任务处理
processEngine.getTaskService()
.completeTask(task.getId());
控制流转
processEngine.getTaskService()
.completeTask(task.getId(),outcome);
设置任务待办人
在流程定义中通过assignee直接指定。 如: #{studentName}
在流程定义assignee中使用流程变量指定。
组任务:在流程定义xml文件中配置assignment-handler,并通过AssignmentHandler实现类指定
assignee中一定为none
查询组任务,以及指定名称的组任务:
engine.getTaskService().createTaskQuery().candidate(employeeId).uniqueResult();
engine.getTaskService().createTaskQuery().
candidate(employeeId).activityName(taskName).list();
注意事项:
1. 流程图文件名为xxx.jpdl.xml,注意流程图文件名不要用中文文件名。
演示画流程图,并设置任务待办人
2. 添加xml校验schema文件,
文件位置:jbpm-4.4\src\jpdl-4.4.xsd
在Window?Preference中搜索xml catalog,然后点add添加
若仍无提示,则可以在xml任意位置打空格或者字符产生改动,xml产生变动并保存后即可有根据DTD产生提示
3. 修改xxx.jpdl.xml文件后,需要重新部署(调用delopy()方法),否则改动并不会生效