NutzCN Logo
问答 nutz整合snaker加上事物就报错~~~,求救啊
发布于 190天前 作者 qq_64f81159 149 次浏览 复制 上一个帖子 下一个帖子
标签:

还是事物的问题,上次好了 这次不知道怎么,流程随便点了几次以后就卡死了,任何操作都不行。。,全部是等待状态。
NutzTransactionInterceptor

public class NutzTransactionInterceptor extends TransactionInterceptor {
    private static final Logger log = LoggerFactory.getLogger(NutzTransactionInterceptor.class);
    public void initialize(Object accessObject) {
        //ignore
    }

    protected TransactionStatus getTransaction() {
        try {
            boolean isNew = Trans.get() == null;
            Trans.begin(Connection.TRANSACTION_REPEATABLE_READ);
            return new TransactionStatus(Trans.get(), isNew);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            throw new RuntimeException(e.getMessage(), e);
        }
    }

    protected void commit(TransactionStatus status) {
        try {
            Trans.commit();
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage(), e);
        } finally {
            try {
                Trans.close();
            } catch (Exception e) {
                log.error(e.getMessage(), e);
                throw new RuntimeException(e.getMessage(), e);
            }
        }
    }

    protected void rollback(TransactionStatus status) {
        try {
            Trans.rollback();
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage(), e);
        } finally {
            try {
                Trans.close();
            } catch (Exception e) {
                log.error(e.getMessage(), e);
                throw new RuntimeException(e.getMessage(), e);
            }
        }
    }
}

SnakerIocLoader

/**
 * 用法: 假设使用ComboIocLoader及流程文件位于flows目录.在@IocBy中声明 "*xxxxxx.xxx.x.x.SnakerIocLoader", "flows"
 * @author wendal(wendal1985@gmail.com)
 *
 */
public class SnakerIocLoader implements IocLoader {
	
	private static final Log log = Logs.get();
	protected IocObject iobj;
	protected String name = "snakerEngine";
	protected String dataSourceBeanName = "dataSource";
	protected String factoryMethodName = "buildSnaker";
	protected static String querySql = "select * from wf_process where name=? order by version desc";

	public SnakerIocLoader(String...paths) {
    	// 手工构建一个nutz的ioc bean定义

        iobj = new IocObject();
        iobj.setFactory(SnakerIocLoader.class.getName() +"#" + factoryMethodName); // 调用本类的buildSnaker方法

        iobj.setType(SnakerEngine.class); // 反馈类型

        IocValue ds = new IocValue();
        ds.setType(IocValue.TYPE_REFER);
        ds.setValue(dataSourceBeanName); // 引用数据源

        iobj.addArg(ds);
        for (String path : paths) {
        	IocValue p = new IocValue();
        	p.setValue(path);
        	iobj.addArg(p);
		}
        if (log.isDebugEnabled())
        	log.debug("snakerflow bean will define as\n" + Json.toJson(iobj));
    }
	
	public static SnakerEngine buildSnaker(DataSource ds) throws IOException {
		return buildSnaker(ds, new Object[]{});
	}

    public static SnakerEngine buildSnaker(DataSource ds, String path) throws IOException {
    	return buildSnaker(ds, new Object[]{path});
    }
    
    protected static SnakerEngine buildSnaker(DataSource ds, Object...paths) throws IOException {
    	// 首先,我们构建一个snaker的上下文
    	SimpleContext ctx = new SimpleContext();
    	// 将集成nutz所必须的两个类,关联之. 这样使用者仅需要声明本IocLoader即可完成全部配置
    	ctx.put(NutzAccess.class.getName(), NutzAccess.class);
    	ctx.put(NutzTransactionInterceptor.class.getName(), NutzTransactionInterceptor.class);
    	// 开始构建sanker的配置对象
    	Configuration cnf = new Configuration(ctx);
    	// fix : 事务拦截器直接放SimpleContext会不生效
    	Mirror.me(cnf).setValue(cnf, "interceptor", ctx.find(NutzTransactionInterceptor.class));
        cnf.initAccessDBObject(ds);
        SnakerEngine engine = cnf.buildSnakerEngine();
        // 如果用户声明了流程描述文件的路径,加载之

        if (paths != null) {
        	for (Object path : paths) {
				for(NutResource re : Scans.me().scan(String.valueOf(path))) {
					if (log.isDebugEnabled())
						log.debug("Found snakerflow xml > " + re.getName());
					//*********************************************************

					// 这部分属于hack的部分, 因为snaker并不识别相同的流程配置,而是简单地作为新流程

					// 所以,需要自行查询一下是不是数据相同,不一样的时候才deploy

					byte[] data = Streams.readBytesAndClose(re.getInputStream());
					ProcessModel model = ModelParser.parse(data);
					List<Process> list = ctx.find(DBAccess.class).queryList(Process.class, querySql, model.getName());
					if (!list.isEmpty()) {
						Process p = list.get(0);
						byte[] cnt = p.getDBContent();
						if (cnt != null && Arrays.equals(cnt, data)) {
							log.debug("Same  snakerflow xml > " + re.getName() + " skiped");
							continue;
						}
					}
					//*********************************************************

					// 同名的流程数据有更新或这是全新的流程,部署之

					engine.process().deploy(new ByteArrayInputStream(data));
				}
			}
        }
        // 工厂方法完成, snaker引擎已经准备好了,可以返回了

        return engine;
    }

	public String[] getName() {
		// 这个类仅需要维护一个ioc bean的定义,所以就是单个name的数组咯

		return new String[]{name};
	}

	public boolean has(String name) {
		return this.name.equals(name); // 就一个ioc bean定义嘛

	}

	public IocObject load(IocLoading il, String name) throws ObjectLoadException {
		if (this.name.equals(name))
			return iobj;
		throw new ObjectLoadException("Object '" + name + "' without define!");
	}
}

流程操作的是

@At("/process")
	@Ok("json")
	public Object process(@Param("processId") String processId,@Param("orderId") String orderId,
							@Param("taskId") String taskId,@Param("nextOperator") String nextOperator,
							@Param("nodeName") String nodeName,@Param("ccOperator") String ccOperator,HttpServletRequest req) {
		try{
			Map<String, Object> params = new HashMap<String, Object>();
			Enumeration<String> paraNames = req.getParameterNames();
			while (paraNames.hasMoreElements()) {
				String element = paraNames.nextElement();
				int index = element.indexOf("_");
				if(index == -1) {
					params.put(element, req.getParameter(element));
				} else {
					char type = element.charAt(0);
					String name = element.substring(index + 1);
					Object value = null;
					switch(type) {
					case 'S':
						value = req.getParameter(element);
						break;
					case 'I':
						value = StringUtil.getParaToInt(req,element);
						break;
					case 'L':
						value = StringUtil.getParaToLong(req,element);
						break;
					case 'B':
						value = StringUtil.getParaToBoolean(req,element);
						break;
					case 'D':
						value = StringUtil.getParaToDate(req,element);
						break;
					case 'N':
						value = Double.parseDouble(req.getParameter(element));
						break;
					default:
						value = req.getParameter(element);
						break;
					}
					params.put(name, value);
				}
			}
			if (StringUtils.isEmpty(orderId) && StringUtils.isEmpty(taskId)) {
				startAndExecute(processId, ShiroUtils.getUsername(), params);
			} else {
				int method = StringUtil.getParaToInt(req,PARA_METHOD, 0);
				switch(method) {
				case 0://任务执行
					execute(taskId, ShiroUtils.getUsername(), params);
					break;
				case -1://驳回、任意跳转
					executeAndJump(taskId, ShiroUtils.getUsername(), params,nodeName);
					break;
				case 1://转办
					if(StringUtils.isNotEmpty(nextOperator)) {
						transferMajor(taskId, ShiroUtils.getUsername(), nextOperator.split(","));
					}
					break;
				case 2://协办
					if(StringUtils.isNotEmpty(nextOperator)) {
						transferAidant(taskId, ShiroUtils.getUsername(), nextOperator.split(","));
					}
					break;
				default:
					execute(taskId, ShiroUtils.getUsername(), params);
					break;
				}
			}
			if(StringUtils.isNotEmpty(ccOperator)) {
				engine.order().createCCOrder(orderId, ShiroUtils.getUsername(), ccOperator.split(","));
			}
			return Result.success("system.success");
		} catch (Exception e) {
			e.printStackTrace();
			return Result.error("system.error");
		}
	}

不知道这个上面是否需要加@AOP类 我看jfaker中有@Before(Tx.class)

报错如下

insert into wf_task_actor (task_Id, actor_Id) values (?, ?)
2017-06-07 15:00:30,364 org.snaker.engine.access.jdbc.JdbcAccess.saveOrUpdate(JdbcAccess.java:171) ERROR - Lock wait timeout exceeded; try restarting transaction Query: insert into wf_task_actor (task_Id, actor_Id) values (?, ?) Parameters: [54c4ba245afc40e7b97a700ebe0a8a1b, superadmin]
java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction Query: insert into wf_task_actor (task_Id, actor_Id) values (?, ?) Parameters: [54c4ba245afc40e7b97a700ebe0a8a1b, superadmin]
	at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:392)
	at org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:491)
	at org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:404)
	at org.snaker.engine.access.jdbc.JdbcAccess.saveOrUpdate(JdbcAccess.java:169)
	at org.snaker.engine.access.AbstractDBAccess.saveTaskActor(AbstractDBAccess.java:264)
	at org.snaker.engine.core.TaskService.assignTask(TaskService.java:308)
	at org.snaker.engine.core.TaskService.saveTask(TaskService.java:429)
	at org.snaker.engine.core.TaskService.createTask(TaskService.java:379)
	at org.snaker.engine.core.TaskService$$EnhancerByCGLIB$$dd544ac7.CGLIB$createTask$5(<generated>)
	at org.snaker.engine.core.TaskService$$EnhancerByCGLIB$$dd544ac7$$FastClassByCGLIB$$7b4622eb.invoke(<generated>)
	at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:215)
	at org.snaker.engine.access.transaction.TransactionInterceptor.intercept(TransactionInterceptor.java:91)
	at org.snaker.engine.core.TaskService$$EnhancerByCGLIB$$dd544ac7.createTask(<generated>)
	at org.snaker.engine.handlers.impl.CreateTaskHandler.handle(CreateTaskHandler.java:53)
	at org.snaker.engine.model.BaseModel.fire(BaseModel.java:47)
	at org.snaker.engine.model.TransitionModel.execute(TransitionModel.java:66)
	at org.snaker.engine.model.NodeModel.runOutTransition(NodeModel.java:92)
	at org.snaker.engine.model.StartModel.exec(StartModel.java:41)
	at org.snaker.engine.model.NodeModel.execute(NodeModel.java:81)
	at org.snaker.engine.core.SnakerEngineImpl.startProcess(SnakerEngineImpl.java:241)
	at org.snaker.engine.core.SnakerEngineImpl.startInstanceById(SnakerEngineImpl.java:196)
	at org.snaker.engine.core.SnakerEngineImpl$$EnhancerByCGLIB$$5da1ed21.CGLIB$startInstanceById$6(<generated>)
	at org.snaker.engine.core.SnakerEngineImpl$$EnhancerByCGLIB$$5da1ed21$$FastClassByCGLIB$$69ec0f5a.invoke(<generated>)
	at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:215)
	at org.snaker.engine.access.transaction.TransactionInterceptor.intercept(TransactionInterceptor.java:91)
	at org.snaker.engine.core.SnakerEngineImpl$$EnhancerByCGLIB$$5da1ed21.startInstanceById(<generated>)
	at com.kanq.modules.controllers.platform.workflow.SnakerController.startAndExecute(SnakerController.java:158)
	at com.kanq.modules.controllers.platform.workflow.FlowController.process(FlowController.java:138)
	at com.kanq.modules.controllers.platform.workflow.FlowController$$FASTCLASS._invoke(FlowController.java:1)
	at org.nutz.lang.reflect.AbstractFastClass.invoke(AbstractFastClass.java:143)
	at org.nutz.lang.reflect.FastClassFactory.invoke(FastClassFactory.java:67)
	at org.nutz.mvc.impl.processor.MethodInvokeProcessor.process(MethodInvokeProcessor.java:27)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.AdaptorProcessor.process(AdaptorProcessor.java:33)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.ActionFiltersProcessor.process(ActionFiltersProcessor.java:58)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at com.kanq.common.processor.XssSqlFilterProcessor.process(XssSqlFilterProcessor.java:33)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at com.kanq.common.processor.NutShiroProcessor.process(NutShiroProcessor.java:49)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.ModuleProcessor.process(ModuleProcessor.java:123)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.EncodingProcessor.process(EncodingProcessor.java:27)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor.process(UpdateRequestAttributesProcessor.java:15)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at com.kanq.common.processor.GlobalsSettingProcessor.process(GlobalsSettingProcessor.java:33)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at com.kanq.common.processor.LogTimeProcessor.process(LogTimeProcessor.java:21)
	at org.nutz.mvc.impl.NutActionChain.doChain(NutActionChain.java:44)
	at org.nutz.mvc.impl.ActionInvoker.invoke(ActionInvoker.java:67)
	at org.nutz.mvc.ActionHandler.handle(ActionHandler.java:31)
	at org.nutz.mvc.NutFilter.doFilter(NutFilter.java:198)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2466)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2455)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)
2017-06-07 15:00:30,364 org.snaker.engine.access.jdbc.JdbcAccess.saveOrUpdate(JdbcAccess.java:171) ERROR - Lock wait timeout exceeded; try restarting transaction Query: insert into wf_task_actor (task_Id, actor_Id) values (?, ?) Parameters: [397d898bee3e4f4da3e6edda048d38ff, superadmin]
java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction Query: insert into wf_task_actor (task_Id, actor_Id) values (?, ?) Parameters: [397d898bee3e4f4da3e6edda048d38ff, superadmin]
	at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:392)
	at org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:491)
	at org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:404)
	at org.snaker.engine.access.jdbc.JdbcAccess.saveOrUpdate(JdbcAccess.java:169)
	at org.snaker.engine.access.AbstractDBAccess.saveTaskActor(AbstractDBAccess.java:264)
	at org.snaker.engine.core.TaskService.assignTask(TaskService.java:308)
	at org.snaker.engine.core.TaskService.saveTask(TaskService.java:429)
	at org.snaker.engine.core.TaskService.createTask(TaskService.java:379)
	at org.snaker.engine.core.TaskService$$EnhancerByCGLIB$$dd544ac7.CGLIB$createTask$5(<generated>)
	at org.snaker.engine.core.TaskService$$EnhancerByCGLIB$$dd544ac7$$FastClassByCGLIB$$7b4622eb.invoke(<generated>)
	at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:215)
	at org.snaker.engine.access.transaction.TransactionInterceptor.intercept(TransactionInterceptor.java:91)
	at org.snaker.engine.core.TaskService$$EnhancerByCGLIB$$dd544ac7.createTask(<generated>)
	at org.snaker.engine.handlers.impl.CreateTaskHandler.handle(CreateTaskHandler.java:53)
	at org.snaker.engine.model.BaseModel.fire(BaseModel.java:47)
	at org.snaker.engine.model.TransitionModel.execute(TransitionModel.java:66)
	at org.snaker.engine.model.NodeModel.runOutTransition(NodeModel.java:92)
	at org.snaker.engine.model.StartModel.exec(StartModel.java:41)
	at org.snaker.engine.model.NodeModel.execute(NodeModel.java:81)
	at org.snaker.engine.core.SnakerEngineImpl.startProcess(SnakerEngineImpl.java:241)
	at org.snaker.engine.core.SnakerEngineImpl.startInstanceById(SnakerEngineImpl.java:196)
	at org.snaker.engine.core.SnakerEngineImpl$$EnhancerByCGLIB$$5da1ed21.CGLIB$startInstanceById$6(<generated>)
	at org.snaker.engine.core.SnakerEngineImpl$$EnhancerByCGLIB$$5da1ed21$$FastClassByCGLIB$$69ec0f5a.invoke(<generated>)
	at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:215)
	at org.snaker.engine.access.transaction.TransactionInterceptor.intercept(TransactionInterceptor.java:91)
	at org.snaker.engine.core.SnakerEngineImpl$$EnhancerByCGLIB$$5da1ed21.startInstanceById(<generated>)
	at com.kanq.modules.controllers.platform.workflow.SnakerController.startAndExecute(SnakerController.java:158)
	at com.kanq.modules.controllers.platform.workflow.FlowController.process(FlowController.java:138)
	at com.kanq.modules.controllers.platform.workflow.FlowController$$FASTCLASS._invoke(FlowController.java:1)
	at org.nutz.lang.reflect.AbstractFastClass.invoke(AbstractFastClass.java:143)
	at org.nutz.lang.reflect.FastClassFactory.invoke(FastClassFactory.java:67)
	at org.nutz.mvc.impl.processor.MethodInvokeProcessor.process(MethodInvokeProcessor.java:27)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.AdaptorProcessor.process(AdaptorProcessor.java:33)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.ActionFiltersProcessor.process(ActionFiltersProcessor.java:58)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at com.kanq.common.processor.XssSqlFilterProcessor.process(XssSqlFilterProcessor.java:33)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at com.kanq.common.processor.NutShiroProcessor.process(NutShiroProcessor.java:49)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.ModuleProcessor.process(ModuleProcessor.java:123)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.EncodingProcessor.process(EncodingProcessor.java:27)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor.process(UpdateRequestAttributesProcessor.java:15)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at com.kanq.common.processor.GlobalsSettingProcessor.process(GlobalsSettingProcessor.java:33)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at com.kanq.common.processor.LogTimeProcessor.process(LogTimeProcessor.java:21)
	at org.nutz.mvc.impl.NutActionChain.doChain(NutActionChain.java:44)
	at org.nutz.mvc.impl.ActionInvoker.invoke(ActionInvoker.java:67)
	at org.nutz.mvc.ActionHandler.handle(ActionHandler.java:31)
	at org.nutz.mvc.NutFilter.doFilter(NutFilter.java:198)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2466)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2455)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)
2017-06-07 15:00:30,364 org.nutz.trans.Trans._rollback(Trans.java:111) DEBUG - Transaction delay rollback id=20, count=4
2017-06-07 15:00:30,373 org.nutz.trans.Trans._rollback(Trans.java:111) DEBUG - Transaction delay rollback id=21, count=4
2017-06-07 15:00:30,373 org.nutz.trans.Trans._rollback(Trans.java:111) DEBUG - Transaction delay rollback id=20, count=3
org.snaker.engine.SnakerException
2017-06-07 15:00:30,373 org.nutz.trans.Trans._rollback(Trans.java:111) DEBUG - Transaction delay rollback id=21, count=3
	at org.snaker.engine.access.transaction.TransactionInterceptor.intercept(TransactionInterceptor.java:98)
	at org.snaker.engine.core.SnakerEngineImpl$$EnhancerByCGLIB$$5da1ed21.startInstanceById(<generated>)
	at com.kanq.modules.controllers.platform.workflow.SnakerController.startAndExecute(SnakerController.java:158)
	at com.kanq.modules.controllers.platform.workflow.FlowController.process(FlowController.java:138)
	at com.kanq.modules.controllers.platform.workflow.FlowController$$FASTCLASS._invoke(FlowController.java:1)
	at org.nutz.lang.reflect.AbstractFastClass.invoke(AbstractFastClass.java:143)
	at org.nutz.lang.reflect.FastClassFactory.invoke(FastClassFactory.java:67)
	at org.nutz.mvc.impl.processor.MethodInvokeProcessor.process(MethodInvokeProcessor.java:27)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.AdaptorProcessor.process(AdaptorProcessor.java:33)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.ActionFiltersProcessor.process(ActionFiltersProcessor.java:58)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at com.kanq.common.processor.XssSqlFilterProcessor.process(XssSqlFilterProcessor.java:33)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at com.kanq.common.processor.NutShiroProcessor.process(NutShiroProcessor.java:49)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.ModuleProcessor.process(ModuleProcessor.java:123)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.EncodingProcessor.process(EncodingProcessor.java:27)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor.process(UpdateRequestAttributesProcessor.java:15)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at com.kanq.common.processor.GlobalsSettingProcessor.process(GlobalsSettingProcessor.java:33)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at com.kanq.common.processor.LogTimeProcessor.process(LogTimeProcessor.java:21)
	at org.nutz.mvc.impl.NutActionChain.doChain(NutActionChain.java:44)
	at org.nutz.mvc.impl.ActionInvoker.invoke(ActionInvoker.java:67)
	at org.nutz.mvc.ActionHandler.handle(ActionHandler.java:31)
	at org.nutz.mvc.NutFilter.doFilter(NutFilter.java:198)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)

	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2466)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2455)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)
Caused by: org.snaker.engine.SnakerException
	at org.snaker.engine.access.transaction.TransactionInterceptor.intercept(TransactionInterceptor.java:98)
	at org.snaker.engine.core.TaskService$$EnhancerByCGLIB$$dd544ac7.createTask(<generated>)
	at org.snaker.engine.handlers.impl.CreateTaskHandler.handle(CreateTaskHandler.java:53)
	at org.snaker.engine.model.BaseModel.fire(BaseModel.java:47)
	at org.snaker.engine.model.TransitionModel.execute(TransitionModel.java:66)
	at org.snaker.engine.model.NodeModel.runOutTransition(NodeModel.java:92)
	at org.snaker.engine.model.StartModel.exec(StartModel.java:41)
	at org.snaker.engine.model.NodeModel.execute(NodeModel.java:81)
	at org.snaker.engine.core.SnakerEngineImpl.startProcess(SnakerEngineImpl.java:241)
	at org.snaker.engine.core.SnakerEngineImpl.startInstanceById(SnakerEngineImpl.java:196)
	at org.snaker.engine.core.SnakerEngineImpl$$EnhancerByCGLIB$$5da1ed21.CGLIB$startInstanceById$6(<generated>)
	at org.snaker.engine.core.SnakerEngineImpl$$EnhancerByCGLIB$$5da1ed21$$FastClassByCGLIB$$69ec0f5a.invoke(<generated>)
	at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:215)
	at org.snaker.engine.access.transaction.TransactionInterceptor.intercept(TransactionInterceptor.java:91)
	... 61 more

已经改的差不多了 不希望 放弃啊 麻烦帮忙看看 谢谢了。

3 回复

把snaker的事务去掉,放个空的事务实现,全局走web的aop事务

来自炫酷的 NutzCN

把snaker的事务去掉,放个空的事务实现,全局走web的aop事务

来自炫酷的 NutzCN

要不你把项目传到github或git@osc,这个我也能试一下

来自炫酷的 NutzCN

添加回复
请先登陆
回到顶部