写jbpm4.4执行完成最后一个任务遇到如下问题。

来源:互联网 发布:怎么看淘宝卖家类目 编辑:程序博客网 时间:2024/05/22 02:08
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:497)    at junit.framework.TestCase.runTest(TestCase.java:164)    at junit.framework.TestCase.runBare(TestCase.java:130)    at junit.framework.TestResult$1.protect(TestResult.java:106)    at junit.framework.TestResult.runProtected(TestResult.java:124)    at junit.framework.TestResult.run(TestResult.java:109)    at junit.framework.TestCase.run(TestCase.java:120)    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:131)    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`JBPM4_EXECUTION`, CONSTRAINT `FK_EXEC_INSTANCE` FOREIGN KEY (`INSTANCE_`) REFERENCES `JBPM4_EXECUTION` (`DBID_`))    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931)    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)    at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1604)    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1519)    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1504)    at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2551)    ... 34 more### EXCEPTION ###########################################10:25:04,540 FIN | [HibernateSessionResource] ----- rolling back hibernate tx 1940445711 -----------------------------------------------------

测试流程如图:
这里写图片描述
我测试代码是:completeTask

package com.tgb.video;import java.util.List;import org.jbpm.api.Configuration;import org.jbpm.api.ExecutionService;import org.jbpm.api.ProcessEngine;import org.jbpm.api.ProcessInstance;import org.jbpm.api.RepositoryService;import org.jbpm.api.TaskService;import org.jbpm.api.task.Task;import junit.framework.TestCase;public class testJbpm extends TestCase{    /**     * 第1步:部署流程;     */    public void deploy(){        ProcessEngine processEngine=Configuration.getProcessEngine();//得到流程引擎processEngine,        RepositoryService repositoryService=processEngine.getRepositoryService();//通过流程引擎得到服务        repositoryService.createDeployment().addResourceFromClasspath("test.jpdl.xml").deploy();            }    /**     * 第2步:创建流程实例;     */    public void createInstance(){        ProcessEngine processEngine=Configuration.getProcessEngine();//得到流程引擎processEngine;        ExecutionService executionService=processEngine.getExecutionService();//通过流程引擎得到流程执行服务;        ProcessInstance processInstance=executionService.startProcessInstanceByKey("test");        System.out.println("流程实例ID==="+processInstance.getId());    }    /**     * 获取对应人员的任务     */    public void getTask(){        ProcessEngine processEngine=Configuration.getProcessEngine();//得到流程引擎processEngine;        TaskService taskService=processEngine.getTaskService();//通过流程引擎得到任务服务接口//      List<Task> tasks=taskService.findPersonalTasks("张三");//得到张三用户拥有的任务        List<Task> tasks=taskService.findPersonalTasks("李四");//得到李四用户拥有的任务        System.out.println("任务数量=="+tasks.size());        System.out.println("任务名称=="+tasks.get(0).getActivityName());        System.out.println("任务人员=="+tasks.get(0).getAssignee()+";任务ID=="+tasks.get(0).getId());    }    /**     * 查看流程实例当前所在节点。如查看请假流程到哪一步了。     */    public void getCurrectActivity(){        ProcessEngine processEngine=Configuration.getProcessEngine();        ExecutionService executionService=processEngine.getExecutionService();        String activityName=executionService.createProcessInstanceQuery().processInstanceId("test.10001").uniqueResult().findActiveActivityNames().toString();        System.out.println("当前任务所在节点==="+activityName);    }    /**     * 完成任务:这一任务完成后,进入到下一任务。如果下一任务为end节点。那么这个流程实例就结束了。     */    public void completeTask(){        ProcessEngine processEngine=Configuration.getProcessEngine();        TaskService taskService=processEngine.getTaskService();//      taskService.completeTask("10002");//完成任务id 10002,在JBPM4_TASK表的DBID字段;这个任务完成后执行到下一个任务节点        taskService.completeTask("20001");//完成任务id 20001,在JBPM4_TASK表的DBID字段;    }}解决:hibernate方言有问题

org.hibernate.dialect.MySQLDialect

把hibernate方言 的配置改成以下

org.hibernate.dialect.MySQLInnoDBDialect

解释:1,mysql默认存储引擎为InnoDB,需创建新表(表名不存在),数据库方言只能选择MySQLDialect;2,mysql默认存储引擎为InnoDB,需更改表结构(表名存在),数据库方言三者皆可选(建议选择MySQLInnoDBDialect);
0 0
原创粉丝点击