JBPM4.3中ExecutionService.findExecutioById()疑惑
最近很纠结。JBPM4。3的问题。
说明我的应用开发环境是:JPBM4.3,Spring2.0整个项目框架基于SSH搭建。数据库为MySql5.0。
?
第一步:项目的配置文件
数据库db.properties
#development
dev.connection.driver_class=com.mysql.jdbc.Driver
dev.connection.url=jdbc:mysql://localhost:3306/test_oatianai?useUnicode=true&characterEncoding=UTF-8
dev.connection.username=root
dev.connection.password=123456
#test
test.connection.driver_class=com.mysql.jdbc.Driver
test.connection.url=jdbc:mysql://localhost:3306/test_oatianai?useUnicode=true&characterEncoding=UTF-8
test.connection.username=root
test.connection.password=123456
?
hibernate的配置文件为jbpm4.3中带的hibernate.cfg.xml
?
jbpm4.3的jbpm配置文件如下:jbpm.cfg.xml
?
<?xml version="1.0" encoding="UTF-8"?>
<jbpm-configuration>
? <import resource="jbpm.default.cfg.xml" />
? <import resource="jbpm.tx.spring.cfg.xml" />
? <import resource="jbpm.jpdl.cfg.xml" />
? <import resource="jbpm.bpmn.cfg.xml" />
? <import resource="jbpm.identity.cfg.xml" />
? <import resource="jbpm.businesscalendar.cfg.xml" />
? <import resource="jbpm.console.cfg.xml" />
? <import resource="jbpm.jobexecutor.cfg.xml" />
??
??
??<!--配置 Spring-->
? <process-engine-context>
??? <string name="spring.cfg" value="spring/spring-jbpm.xml" />
? </process-engine-context>
?
? <!-- 扩展用户
? <transaction-context>
??? <identity-session />
??? <object />
? </transaction-context>
?
?? <transaction-context>
??? <identity-session current="true"/>
??? <object />
? </transaction-context>
??? -->
</jbpm-configuration>
?
?
JBPM4.3中配置Spring相对JBPM4.0要简单一些。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
????? xmlns:aop="http://www.springframework.org/schema/aop"
????? xmlns:context="http://www.springframework.org/schema/context"
????? xmlns:tx="http://www.springframework.org/schema/tx"
?????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
????? xsi:schemaLocation="
????????? http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
????????? http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
????????? http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.0.xsd
????????? http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
? <bean id="springHelper" />
? <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
?
? <bean id="sessionFactory" value="classpath:hibernate.cfg.xml" />
??? <property name="dataSource" ref="dataSource" />
? </bean>
?
? <bean id="transactionManager" ref="sessionFactory" />
??? <property name="dataSource" ref="dataSource" />
? </bean>
? <bean id="dataSource" value="com.mysql.jdbc.Driver" />
??? <property name="url" value="jdbc:mysql://localhost:3306/test_oatianai?useUnicode=true&characterEncoding=UTF-8" />
??? <property name="username" value="root" />
??? <property name="password" value="123456" />
? </bean>
?这里本是想这样来配置JBPM的服务
<bean id="springHelper" />
? <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
<bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService" />
但这样会报错误,说无法这样创建executionService? BEAN,希望大家给指点一下。
?
整个项目的搭建配置与JBPM4相关的到此配置也就完成。
?
第二步:表数据模块,我的实例是基于请款而写的,业务表单Bean如下:
ublic class ApplyMoneyForm {
?private Long id;
?
?private String applyuser;
?private String reason;
?
?private float applynum;
?
?private String suggestion1;
?
?private String decision1;
?
?private String manager;
?
?private String suggestion2;
?
?private String decision2;
?
?private String boss;
?
?private String processid;
?
?public String getDecision1() {
??return decision1;
?}
?public void setDecision1(String decision1) {
??this.decision1 = decision1;
?}
?public String getDecision2() {
??return decision2;
?}
?public void setDecision2(String decision2) {
??this.decision2 = decision2;
?}
?public Long getId() {
??return id;
?}
?public void setId(Long id) {
??this.id = id;
?}
?public String getApplyuser() {
??return applyuser;
?}
?public void setApplyuser(String applyuser) {
??this.applyuser = applyuser;
?}
?public String getReason() {
??return reason;
?}
?public void setReason(String reason) {
??this.reason = reason;
?}
?public float getApplynum() {
??return applynum;
?}
?public void setApplynum(float applynum) {
??this.applynum = applynum;
?}
?public String getSuggestion1() {
??return suggestion1;
?}
?public void setSuggestion1(String suggestion1) {
??this.suggestion1 = suggestion1;
?}
?public String getManager() {
??return manager;
?}
?public void setManager(String manager) {
??this.manager = manager;
?}
?public String getSuggestion2() {
??return suggestion2;
?}
?public void setSuggestion2(String suggestion2) {
??this.suggestion2 = suggestion2;
?}
?public String getBoss() {
??return boss;
?}
?public void setBoss(String boss) {
??this.boss = boss;
?}
这是表彰数据。
?
第三步:业务数据与流程实例结合
?流程定义文件applymoney.xml
<process name="applymoney" xmlns="http://jbpm.org/4.0/jpdl" key="applymoney"
?description="请款流程定义">
?<start g="207,78,53,48" name="start1">
??<transition g="-40,-16" name="to 填写请款单" to="填写请款单" />
?</start>
?<task assignee="#{user}" g="176,203,110,55" name="填写请款单">
??<transition g="-32,-11" name="to 经理审核" to="经理审核" />
?</task>
?<task assignee="#{manager}" g="182,300,101,50" name="经理审核">
??<transition g="-7,-13" name="同意" to="老板审核">
??</transition>
??<transition g="345,324;345,229:-13,-10" name="驳回" to="填写请款单">
??</transition>
??<transition g="347,324:-14,60" name="不同意" to="cancel1">
??</transition>
?</task>
?<task assignee="boss" g="186,398,98,48" name="老板审核">
??<transition g="-14,-8" name="同意" to="end1">
??</transition>
??<transition g="137,421;133,230:-11,11" name="驳回" to="填写请款单">
??</transition>
??<transition g="-27,-11" name="不同意" to="cancel1">
??</transition>
?</task>
?<end g="109,490,66,42" name="end1" />
?<end-cancel g="325,489,82,52" name="cancel1" />
</process>
?
?
流程管理ApplyMoneyManager.java
?
package com.cqta.oatianai.jbpm;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jbpm.api.Execution;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.TaskService;
import org.jbpm.api.task.Task;
import org.jbpm.pvm.internal.task.TaskImpl;
import com.cqta.oatianai.model.ApplyMoneyForm;
public class ApplyMoneyManager {
?private ProcessEngine processEngine;
?public void setProcessEngine(ProcessEngine processEngine) {
??this.processEngine = processEngine;
?}
?/**
? *发起请款流
? * @param username
? */
?public String startApplyMoney(String username){
??Map<String, Object> variables=new HashMap<String, Object>();
??variables.put("user", username);
??ExecutionService executionService=processEngine.getExecutionService();
??ProcessInstance processInstance=executionService.startProcessInstanceByKey("applymoney", variables);
??String processId=processInstance.getId();
??return processId;
?}
?/**
? * 请假表单结合
? * @param applyMoneyForm
? */
?public void applyMoney(ApplyMoneyForm applyMoneyForm){
??Map<String, Object> variables=new HashMap<String, Object>();
??variables.put("manager", applyMoneyForm.getManager());
??TaskService taskService=processEngine.getTaskService();
??List<Task> listTasks=taskService.findPersonalTasks(applyMoneyForm.getApplyuser());
??if(listTasks.size()<=0){
???return ;
??}
??Task task=listTasks.get(0);
??taskService.setVariables(task.getId(), variables);
??taskService.completeTask(task.getId());
?}
?public void confirm(ApplyMoneyForm applyMoneyForm,String taskId){
??TaskService taskService=processEngine.getTaskService();
??Task task=taskService.getTask(taskId);
??
??System.out.println("executionId==========>"+task.getExecutionId());
??
??ExecutionService executionService=processEngine.getExecutionService();
??
??Execution execution=executionService.findExecutionById(task.getExecutionId());
??if(execution.getProcessInstance().isActive("经理审核")){
???taskService.completeTask(task.getId(),applyMoneyForm.getDecision1());
??}else if(execution.getProcessInstance().isActive("老板审核")){
???taskService.completeTask(task.getId(), applyMoneyForm.getDecision2());
??}
??
?}
}
这里红色标识的就是最近纠结的地方了,findExecutionById(task.getExecutionId())本身应去JBPM4_Execution表中的ID_字段,但去取JBPM4_Execution表中的DBID_字段。前一个字段为字符类型,后一个字段为long型。这个问题在Sqlserver2000与oracle中都出现了问题。希望大家帮忙解决一下。原来是hibernate的版本搞错了
?
表单数据与流程实例相继合我是在Controller中进行的,不知是否合理。ApplyMoneyController
package com.cqta.oatianai.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.jbpm.api.task.Task;
import com.cqta.core.utils.BeanUtils;
import com.cqta.core.web.ApplicationController;
import com.cqta.oatianai.dao.ApplyMoneyFormDaoImpl;
import com.cqta.oatianai.jbpm.ApplyMoneyManager;
import com.cqta.oatianai.jbpm.PersonTasks;
import com.cqta.oatianai.model.ApplyMoneyForm;
public class ApplyMoneyController extends ApplicationController{
?private ApplyMoneyManager applyMoneyManager;
?
?private ApplyMoneyFormDaoImpl applyMoneyFormDaoImpl;
?
?private PersonTasks personTasks;
?
?public void setApplyMoneyManager(ApplyMoneyManager applyMoneyManager) {
??this.applyMoneyManager = applyMoneyManager;
?}
?
?public void setApplyMoneyFormDaoImpl(ApplyMoneyFormDaoImpl applyMoneyFormDaoImpl) {
??this.applyMoneyFormDaoImpl = applyMoneyFormDaoImpl;
?}
?
?
?public void setPersonTasks(PersonTasks personTasks) {
??this.personTasks = personTasks;
?}
?public ActionForward applyMoney(ActionMapping mapping, ActionForm form,
???HttpServletRequest request, HttpServletResponse response)
???throws Exception {
??return mapping.findForward("apply_money");
?}
?public ActionForward managerApproval(ActionMapping mapping, ActionForm form,
???HttpServletRequest request, HttpServletResponse response)
???throws Exception {
??String taskId=request.getParameter("taskId");
??String procesId=personTasks.getProcessInstanceIdByTaskId(taskId);
??ApplyMoneyForm applyMoneyForm=applyMoneyFormDaoImpl.findApplyMoneyForm(procesId);
??request.setAttribute("applyMoneyForm", applyMoneyForm);
??request.setAttribute("taskId", taskId);
??return mapping.findForward("apply_money_manager");
?}
?public ActionForward bossApproval(ActionMapping mapping, ActionForm form,
???HttpServletRequest request, HttpServletResponse response)
???throws Exception {
??String taskId=request.getParameter("taskId");
??String processId=personTasks.getProcessInstanceIdByTaskId(taskId);
??ApplyMoneyForm applyMoneyForms=applyMoneyFormDaoImpl.findApplyMoneyForm(processId);
??request.setAttribute("applyMoneyForm", applyMoneyForms);
??request.setAttribute("taskId", taskId);
??return mapping.findForward("apply_money_boss");
?}
?/**
? * 发起请假流程
? * @param mapping
? * @param form
? * @param request
? * @param response
? * @return
? * @throws Exception
? */
?public ActionForward startApply(ActionMapping mapping, ActionForm form,
???HttpServletRequest request, HttpServletResponse response)
???throws Exception {
??ApplyMoneyForm applyMoneyForm=new ApplyMoneyForm();
??BeanUtils.populate(applyMoneyForm,request.getParameterMap());
??String processId=applyMoneyManager.startApplyMoney(applyMoneyForm.getApplyuser());
??applyMoneyManager.applyMoney(applyMoneyForm);
??applyMoneyForm.setProcessid(processId);
??applyMoneyFormDaoImpl.startApplyMoney(applyMoneyForm);
??return mapping.findForward("apply_money");
?}
?/**
? * 经理审批
? * @param mapping
? * @param form
? * @param request
? * @param response
? * @return
? * @throws Exception
? */
?public ActionForward managerApprovaled(ActionMapping mapping, ActionForm form,
???HttpServletRequest request, HttpServletResponse response)
???throws Exception {
??ApplyMoneyForm applyMoneyForm=new ApplyMoneyForm();
??String taskId=request.getParameter("taskId");
??System.out.println("taskId============>"+taskId);
??BeanUtils.populate(applyMoneyForm,request.getParameterMap());
??applyMoneyManager.confirm(applyMoneyForm, taskId);
??applyMoneyFormDaoImpl.updateApplyMoney(applyMoneyForm, applyMoneyForm.getId());
??return mapping.findForward("apply_money_manager");
?}
?/**
? * 老板审批
? * @param mapping
? * @param form
? * @param request
? * @param response
? * @return
? * @throws Exception
? */
?public ActionForward bossApprovaled(ActionMapping mapping, ActionForm form,
???HttpServletRequest request, HttpServletResponse response)
???throws Exception {
??ApplyMoneyForm applyMoneyForm=new ApplyMoneyForm();
??String taskId=request.getParameter("taskId");
??BeanUtils.populate(applyMoneyForm, request.getParameterMap());
??applyMoneyManager.confirm(applyMoneyForm, taskId);
??applyMoneyFormDaoImpl.updateApplyMoney(applyMoneyForm,applyMoneyForm.getId());
??return mapping.findForward("apply_money_boss");
?}
?/**
? * 获取用户列表
? * @param mapping
? * @param form
? * @param request
? * @param response
? * @return
? * @throws Exception
? */
?public ActionForward taskLists(ActionMapping mapping, ActionForm form,
???HttpServletRequest request, HttpServletResponse response)
???throws Exception {
??String userName=request.getParameter("username");
??List<Task> taskList=personTasks.findByPerson(userName);
??System.out.println("=========>"+taskList.size());
??request.setAttribute("taskList", taskList);
??return mapping.findForward("index");
?}
}
这就是一个 SSH与JBPM4。3与实际业务相结合。正在探索中学习JBPM啦。
?
?
本文中的问题已解决,是因为hibernate得版本问题。我的项目中有两个hibernate,一个是JBPM包下的,一个是我自己加上的。唉,细节呀
?