activiti之spring管理监听器的方法

深入Activiti 5.22.0源码的探索与实践 BPMN(Business Process Model and Notation,业务流程模型和符号)2.0是一种可视化业务流程模型的业界标准。它定义了一系列核心元素,用于建模业务流程。核心元素包括事件(Events)、活动(Activities)和网关(Gateways)。事件是流程中发生的事情,可以是流程的开始、结束或某种中断。事件通常分为三种:开始事件、中间事件和结束事件。开始事件触发流程,中间事件在流程执行中发生,而结束事件则标识流程的结束。 阅读详情

以下博客为转载,原文博客:http://blog.youkuaiyun.com/v_will/article/details/78001453

这篇文章主要记录流程监听器的部分用法,整个环境实在集成在spring下,ssm环境:
三个监听器:

A:普通javaBean:

    package com.abc.activiti.listenner;    

    import org.activiti.engine.delegate.DelegateExecution;  

    public class JavaExpressionActivitiListenner {  
        public void expression(DelegateExecution execution) throws Exception {  
            System.out.println("executionId:" + execution.getId() + " ActivitiListenner" + this.toString());  
        }  

B:实现ExecutionListener接口:

 package com.abc.activiti.listenner;  


    import org.activiti.engine.delegate.DelegateExecution;  
    import org.activiti.engine.delegate.DelegateTask;  
    import org.activiti.engine.delegate.ExecutionListener;  
    import org.activiti.engine.delegate.TaskListener;  


    public class ActivitiListenner implements TaskListener, ExecutionListener {  


        /** 
         *  
         */  
        private static final long serialVersionUID = -3759054058055401826L;  


        @Override  
        public void notify(DelegateExecution execution) throws Exception {  
            System.out.println("xml流程:" + execution.getId() + " ActivitiListenner" + this.toString());  
        }  


        @Override  
        public void notify(DelegateTask delegateTask) {  
            System.out.println("xml任务:" + delegateTask.getId() + " ActivitiListenner" + this.toString());  
        }  


    }

C:实现JavaDelegate接口

    package com.abc.activiti.listenner;  


    import org.activiti.engine.delegate.DelegateExecution;  
    import org.activiti.engine.delegate.JavaDelegate;  


    public class JavaDelegateActivitiListenner implements JavaDelegate {  


    @Override  
    public void execute(DelegateExecution execution) throws Exception {  
    System.out.println("executionId:" + execution.getId() + " ActivitiListenner" + this.toString());  



    }

第一种尝试:javaClass配置实现监听
流程设计:

流程非常短:启动-办理-结束,并配置了三个监听器

监听器配置:

 <span style="font-size:18px;"><span style="white-space:pre">    </span><process id="abc" name="流程监听注入" isExecutable="true">  
    <span style="white-space:pre">      </span><extensionElements>  
    <span style="white-space:pre">          </span><activiti:executionListener event="start"  
    <span style="white-space:pre">              </span>class="com.abc.activiti.listenner.xxxListenner"></activiti:executionListener>  
    <span style="white-space:pre">          </span><activiti:executionListener event="end"  
    <span style="white-space:pre">              </span>class="com.abc.activiti.listenner.xxxListenner"></activiti:executionListener>  
    <span style="white-space:pre">      </span></extensionElements>  
    <span style="white-space:pre">      </span><startEvent id="startevent1" name="Start"></startEvent>  
    <span style="white-space:pre">      </span><userTask id="usertask1" name="User Task"></userTask>  
    <span style="white-space:pre">      </span><sequenceFlow id="flow1" sourceRef="startevent1"  
    <span style="white-space:pre">          </span>targetRef="usertask1"></sequenceFlow>  
    <span style="white-space:pre">      </span><endEvent id="endevent1" name="End"></endEvent>  
    <span style="white-space:pre">      </span><sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1">  
    <span style="white-space:pre">          </span><extensionElements>  
    <span style="white-space:pre">              </span><activiti:executionListener event="take"  
    <span style="white-space:pre">                  </span>class="com.abc.activiti.listenner.xxxListenner"></activiti:executionListener>  
    <span style="white-space:pre">          </span></extensionElements>  
    <span style="white-space:pre">      </span></sequenceFlow>  
    <span style="white-space:pre">  </span></process></span>  

A类监听测试:

    <span style="font-size:18px;">2017-09-16 10:36:25.816 [http-nio-8080-exec-3] ERROR c.a.a.controller.ActivitiController.exception - 处理请求http://localhost:8080/abc-master/activiti/start?null 时出错。  
    完整异常栈堆信息  
    org.activiti.engine.ActivitiIllegalArgumentException: com.abc.activiti.listenner.JavaExpressionActivitiListenner doesn't implement interface org.activiti.engine.delegate.ExecutionListener nor interface org.activiti.engine.delegate.JavaDelegate</span>

启动流程时报错,说明通过javaClass配置activiti的流程监听器必须实现org.activiti.engine.delegate.ExecutionListener或者org.activiti.engine.delegate.JavaDelegate接口
B类监听测试:
流程启动-办理-结束,三个监听器的方法分别被执行:执行结果如下:

    <span style="font-size:18px;">xml流程:7f7aa2be-9a89-11e7-9d02-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.ActivitiListenner@39ca6dcd  
    xml流程:7f7aa2be-9a89-11e7-9d02-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.ActivitiListenner@306a75c6  
    xml流程:7f7aa2be-9a89-11e7-9d02-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.ActivitiListenner@342664da</span>  

测试表明,通过加载java class的方式去加载实现了ExecutionListener接口的bean,可以顺利实现流程监听,但是每次获取的监听器都是一个新对象;
C类监听测试:
执行结果如下:

 <span style="font-size:18px;">executionId:eebefb34-9a89-11e7-b1f2-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.JavaDelegateActivitiListenner@26d8afc4  
    executionId:eebefb34-9a89-11e7-b1f2-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.JavaDelegateActivitiListenner@38835b92  
    executionId:eebefb34-9a89-11e7-b1f2-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.JavaDelegateActivitiListenner@21dcaa6e</span>  

不出所料,其结果与B类监听一致;
进一步测试:spring容器注入bean:
可以设想一下,javaClass加载监听器的时,每次都是activitiEngine通过反射产生新的对象,因此此种方式下通过spring管理去注入可能会失败:
对实现了JavaDelegate的监听器进行改造:

 <span style="font-size:18px;">package com.abc.activiti.listenner;  

    import org.activiti.engine.delegate.DelegateExecution;  
    import org.activiti.engine.delegate.JavaDelegate;  
    import org.springframework.beans.factory.annotation.Autowired;  
    import org.springframework.stereotype.Service;  

    import com.abc.activiti.service.ActivitiService;  

    @Service  
    public class JavaDelegateActivitiListenner implements JavaDelegate {  

        @Autowired  
        private ActivitiService activitiService;  

        @Override  
        public void execute(DelegateExecution execution) throws Exception {  
            System.out.println("executionId:" + execution.getId() + " ActivitiListenner" + this.toString()  
                    + "  spring容器注入bean:" + activitiService.toString());  
        }  

    }</span>  

测试结果:
妥妥的空指针,注入失败:

    <span style="font-size:18px;">2017-09-16 10:57:01.760 [http-nio-8080-exec-3] ERROR c.a.a.controller.ActivitiController.exception - 处理请求http://localhost:8080/abc-master/activiti/start?null 时出错。  
    完整异常栈堆信息  
    java.lang.NullPointerException: null  
        at com.abc.activiti.listenner.JavaDelegateActivitiListenner.execute(JavaDelegateActivitiListenner.java:19) ~[JavaDelegateActivitiListenner.class:na]  
        at org.activiti.engine.impl.delegate.JavaDelegateInvocation.invoke(JavaDelegateInvocation.java:34) ~[activiti-engine-5.20.0.jar:na]</span>  

对实现了ExecutionListener的监听器进行改造:

 <span style="font-size:18px;">package com.abc.activiti.listenner;  


    import org.activiti.engine.delegate.DelegateExecution;  
    import org.activiti.engine.delegate.DelegateTask;  
    import org.activiti.engine.delegate.ExecutionListener;  
    import org.activiti.engine.delegate.TaskListener;  
    import org.springframework.beans.factory.annotation.Autowired;  
    import org.springframework.stereotype.Service;  


    import com.abc.activiti.service.ActivitiService;  


    @Service  
    public class ActivitiListenner implements TaskListener, ExecutionListener {  


    <span style="white-space:pre">  </span>/** 
    <span style="white-space:pre">  </span> *  
    <span style="white-space:pre">  </span> */  
    <span style="white-space:pre">  </span>private static final long serialVersionUID = -3759054058055401826L;  


    <span style="white-space:pre">  </span>@Autowired  
    <span style="white-space:pre">  </span>private ActivitiService activitiService;  


    <span style="white-space:pre">  </span>@Override  
    <span style="white-space:pre">  </span>public void notify(DelegateExecution execution) throws Exception {  
    <span style="white-space:pre">      </span>System.out.println("xml流程:" + execution.getId() + " ActivitiListenner" + this.toString());  
    <span style="white-space:pre">      </span>System.out.println("activitiService: " + activitiService.toString());  
    <span style="white-space:pre">  </span>}  


    <span style="white-space:pre">  </span>@Override  
    <span style="white-space:pre">  </span>public void notify(DelegateTask delegateTask) {  
    <span style="white-space:pre">      </span>System.out.println("xml任务:" + delegateTask.getId() + " ActivitiListenner" + this.toString());  
    <span style="white-space:pre">  </span>}  


    }  
    </span>  

测试结果:

    <span style="font-size:18px;">xml流程:03ec2a11-9a8b-11e7-903c-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.ActivitiListenner@5de11ac2  
    2017-09-16 10:59:11.541 [http-nio-8080-exec-3] ERROR c.a.a.controller.ActivitiController.exception - 处理请求http://localhost:8080/abc-master/activiti/start?null 时出错。  
    完整异常栈堆信息  
    java.lang.NullPointerException: null  
    <span style="white-space:pre">  </span>at com.abc.activiti.listenner.ActivitiListenner.notify(ActivitiListenner.java:26) ~[ActivitiListenner.class:na]  
    <span style="white-space:pre">  </span>at org.activiti.engine.impl.delegate.ExecutionListenerInvocation.invoke(ExecutionListenerInvocation.java:34) ~[activiti-engine-5.20.0.jar:na]</span> 

以上两组结果表明,spring只是将其纳入管理,但并成功注入到activitiEngine中。
第二种尝试:expression配置实现监听
监听器配置:

 <span style="font-size:18px;"><process id="abc" name="流程监听注入" isExecutable="true">  
            <extensionElements>  
                <activiti:executionListener event="start"  
                    expression="${javaExpressionActivitiListenner.expression(execution)}"></activiti:executionListener>  
                <activiti:executionListener event="end"  
                    expression="${javaExpressionActivitiListenner.expression(execution)}"></activiti:executionListener>  
            </extensionElements>  
            <startEvent id="startevent1" name="Start"></startEvent>  
            <userTask id="usertask1" name="User Task"></userTask>  
            <sequenceFlow id="flow1" sourceRef="startevent1"  
                targetRef="usertask1"></sequenceFlow>  
            <endEvent id="endevent1" name="End"></endEvent>  
            <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1">  
                <extensionElements>  
                    <activiti:executionListener event="take"  
                        expression="${javaExpressionActivitiListenner.expression(execution)}"></activiti:executionListener>  
                </extensionElements>  
            </sequenceFlow>  
        </process></span>

A类监听测试:
需要注意的是,此时通过expression表达式注入时,是的

    <span style="font-size:18px;">2017-09-16 11:27:29.420 [http-nio-8080-exec-3] ERROR c.a.a.controller.ActivitiController.exception - 处理请求http://localhost:8080/abc-master/activiti/start?null 时出错。  
    完整异常栈堆信息  
    org.activiti.engine.ActivitiException: Unknown property used in expression: ${javaExpressionActivitiListenner.expression(execution)}  
        at org.activiti.engine.impl.el.JuelExpression.getValue(JuelExpression.java:53) ~[activiti-engine-5.20.0.jar:na]  
    ......  
    Caused by: org.activiti.engine.impl.javax.el.PropertyNotFoundException: Cannot resolve identifier 'javaExpressionActivitiListenner'  
        at org.activiti.engine.impl.juel.AstIdentifier.eval(AstIdentifier.java:83) ~[activiti-engine-5.20.0.jar:5.20.0]</span> 

监听器改造:

  <span style="font-size:18px;">package com.abc.activiti.listenner;  

    import org.activiti.engine.delegate.DelegateExecution;  
    import org.springframework.stereotype.Component;  

    @Component  
    public class JavaExpressionActivitiListenner {  

        public void expression(DelegateExecution execution) throws Exception {  
            System.out.println("executionId:" + execution.getId() + " ActivitiListenner" + this.toString());  
        }  
    }  
    </span>  

测试结果如下:

  <span style="font-size:18px;">executionId:ddd3f07e-9a8d-11e7-9fc5-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.JavaExpressionActivitiListenner@420a38c6  
    executionId:ddd3f07e-9a8d-11e7-9fc5-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.JavaExpressionActivitiListenner@420a38c6  
    executionId:ddd3f07e-9a8d-11e7-9fc5-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.JavaExpressionActivitiListenner@420a38c6</span>  

B类监听测试:

测试结果:

    <span style="font-size:18px;">xml流程:2175ef09-9a8e-11e7-9af4-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.ActivitiListenner@2f68610c  
    xml流程:2175ef09-9a8e-11e7-9af4-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.ActivitiListenner@2f68610c  
    xml流程:2175ef09-9a8e-11e7-9af4-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.ActivitiListenner@2f68610c</span>  

C类监听测试:

测试结果:

  <span style="font-size:18px;">executionId:719dc30a-9a8d-11e7-9ac9-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.JavaDelegateActivitiListenner@7374d21e  
    executionId:719dc30a-9a8d-11e7-9ac9-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.JavaDelegateActivitiListenner@7374d21e  
    executionId:719dc30a-9a8d-11e7-9ac9-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.JavaDelegateActivitiListenner@7374d21e</span>  

进一步测试:spring注入bean:
测试结果:

 <span style="font-size:18px;">xml流程:2b882f40-9a91-11e7-9325-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.ActivitiListenner@42e9857e  
    activitiService: com.abc.activiti.service.ActivitiService@2f9b021f  
    xml流程:2b882f40-9a91-11e7-9325-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.ActivitiListenner@42e9857e  
    activitiService: com.abc.activiti.service.ActivitiService@2f9b021f  
    xml流程:2b882f40-9a91-11e7-9325-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.ActivitiListenner@42e9857e  
    activitiService: com.abc.activiti.service.ActivitiService@2f9b021f</span>

此处仅提供A类监听测试结果,其余测试结果均一致,以上测试结果表明,使用expression表达式江容器中的bean作为监听器注入到activitiEngine中是一种非常灵活强大的方式。
第三种尝试:delegate expression配置实现监听
监听器配置:

    <span style="font-size:18px;">  <process id="abc" name="流程监听注入" isExecutable="true">  
            <extensionElements>  
                <activiti:executionListener event="start"  
                    delegateExpression="${activitiListenner}"></activiti:executionListener>  
                <activiti:executionListener event="end"  
                    delegateExpression="${activitiListenner}"></activiti:executionListener>  
            </extensionElements>  
            <startEvent id="startevent1" name="Start"></startEvent>  
            <userTask id="usertask1" name="User Task"></userTask>  
            <sequenceFlow id="flow1" sourceRef="startevent1"  
                targetRef="usertask1"></sequenceFlow>  
            <endEvent id="endevent1" name="End"></endEvent>  
            <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1">  
                <extensionElements>  
                    <activiti:executionListener event="take"  
                        delegateExpression="${activitiListenner}"></activiti:executionListener>  
                </extensionElements>  
            </sequenceFlow>  
        </process></span>  

A类监听测试:

 <span style="font-size:18px;">2017-09-16 12:21:54.134 [http-nio-8080-exec-3] ERROR c.a.a.controller.ActivitiController.exception - 处理请求http://localhost:8080/abc-master/activiti/start?null 时出错。  
    完整异常栈堆信息  
    org.activiti.engine.ActivitiIllegalArgumentException: Delegate expression ${javaExpressionActivitiListenner} did not resolve to an implementation of interface org.activiti.engine.delegate.ExecutionListener nor interface org.activiti.engine.delegate.JavaDelegate  
        at org.activiti.engine.impl.bpmn.listener.DelegateExpressionExecutionListener.notify(DelegateExpressionExecutionListener.java:57) ~[activiti-engine-5.20.0.jar:5.20.0]  
        at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:42) ~[activiti-engine-5.20.0.jar:na]</span>  

B类监听测试:

    <span style="font-size:18px;">xml流程:fcc6c8ba-9a95-11e7-826d-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.ActivitiListenner@71425d05  
    activitiService: com.abc.activiti.service.ActivitiService@72a765d5  
    xml流程:fcc6c8ba-9a95-11e7-826d-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.ActivitiListenner@71425d05  
    activitiService: com.abc.activiti.service.ActivitiService@72a765d5  
    xml流程:fcc6c8ba-9a95-11e7-826d-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.ActivitiListenner@71425d05  
    activitiService: com.abc.activiti.service.ActivitiService@72a765d5</span>  

C类监听测试:

 <span style="font-size:18px;">executionId:c96567e2-9a95-11e7-b7e3-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.JavaDelegateActivitiListenner@6f660921  spring容器注入bean:com.abc.activiti.service.ActivitiService@1dc6b66a  
    executionId:c96567e2-9a95-11e7-b7e3-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.JavaDelegateActivitiListenner@6f660921  spring容器注入bean:com.abc.activiti.service.ActivitiService@1dc6b66a  
    executionId:c96567e2-9a95-11e7-b7e3-b4b6761cb4ac ActivitiListennercom.abc.activiti.listenner.JavaDelegateActivitiListenner@6f660921  spring容器注入bean:com.abc.activiti.service.ActivitiService@1dc6b66a  
    </span> 

以上测试结果表明:
通过delegate expression配置容器中的监听器时,仍然需要实现ExecutionListener或者JavaDelegate接口
总结:
1
通过javaClass加载指定类,这种硬编码的形式管理监听器,是将class字节码文件交由activitiEngine处理,每次需要的时候则由engine通过反射构建实例对象,spring无法管理;
2
通过delegate expression配置容器中的bean作为监听器, 类名;需要bean自身实现org.activiti.engine.delegate.ExecutionListener或者org.activiti.engine.delegate.JavaDelegate接口,并重写对应的方法,在改监听器被调用时,会默认制定重写方法中的逻辑,此时,bean对象是由spring管理,可以与容器无缝对接;3通过expression配置容器中的bean作为监听器, {类名.方法名(参数名)};这是最为灵活也最为强大的方法,可以使用任意的bean,也可以自定义将要执行的方法,与spring容器无缝对接,与业务逻辑完美契合。

使用STM输出互补SPWM波(三相各差120°) 使用STM32输出SPWM波形(三相各差120°) 阅读详情

相关推荐

研发工作量科学量化评估模型:从多维系数到等级落地指南

摘要:本文提出了一套基于多维系数的科学量化评估模型,用于精准评估软件开发工作量。该模型从需求复杂度、技术难度、质量要求和依赖风险四个核心维度进行量化评估,通过系数乘积计算综合工作量。文章详细说明了各维度的系数区间划分标准,并演示了从基础工作量估算到综合系数计算的具体步骤。该模型通过结构化评估过程,将主观经验转化为客观量化指标,帮助团队提高工作量评估的准确性,增强项目交付的可预测性。其价值在于使评估过程透明化、结构化和可追溯,从而减少项目延期风险,优化资源规划。

友莘居士的博客 1684

activiti学习之监听流程实例的开始和结束

写在前面 activiti的监听器分为全局监听器,连线监听器,节点监听器,本文要监听流程实例的开始和结束需要通过全局监听器来实现,依赖的接口是org.activiti.engine.delegate.ExecutionListener,源码如下: public interface ExecutionListener extends Serializable { // 流程实例开始 String EVENTNAME_START = "start"; // 流程实例结束 String EVENT

wang0907的博客 3124

安卓开发者必看:Win11最新Fastboot驱动安装避坑指南(含Android Bootloader Interface选择技巧)

本文为安卓开发者提供了Windows 11系统下Fastboot驱动安装的详细指南,特别针对Android Bootloader Interface选择技巧和多设备并发连接时的驱动冲突问题。通过解析Windows 11的特殊驱动验证机制,推荐使用Google官方USB驱动,并提供安装流程、版本选择建议及疑难问题排查方法,帮助开发者高效完成开发环境配置。

sea99的博客 1332

Activiti5第十一弹,流程监听器与任务监听器

首先创建流程监听器和任务监听器的实体类,个人比较喜欢使用Delegate Expression方式,其他两种方式也可以 流程监听器 package org.mpc.final_activiti; import java.io.Serializable; import org.activiti.engine.delegate.DelegateExecution; import...

weixin_33871366的博客 2726

C#实现跨域访问共享文件夹的账号密码验证方案

本文详细介绍了在C#中实现跨域访问共享文件夹的账号密码验证方案。通过调用Windows API LogonUser函数,结合LOGON32_LOGON_NEW_CREDENTIALS登录类型,可安全模拟指定用户身份,有效解决工作组与域环境间的文件共享访问难题。文章提供了完整的工具类封装、多种实战场景示例及详细的错误排查指南。

pea55的博客 540

Obsidian的Git插件设置配置全流程 -- 简单的电脑端多平台同步方案及常见问题

Git同步obsidian的保姆级教程和常见问题

weixin_44370439的博客 1万+

activiti学习之监听器

昨天测试到一个结束流程的时候报了错:Mylistener not implementsExecutionListener norJavaDelegate 是说没有实现ExecutionListener 接口,看了activiti里配置的监听器 只实现了TaskListener,之后我又加了ExecutionListener之后测试不再报错。 import org.activiti.engi...

海淀吴彦祖的博客 838

【回归预测】GRNN广义回归神经网络-MATLAB

广义回归神经网络(GRNN)是一种基于径向基函数(RBF)的神经网络模型,主要用于非线性回归任务。与传统的回归分析方法相比,GRNN具有更强的非线性映射能力和学习速度,能够快速逼近复杂的非线性关系。输入层、模式层、求和层和输出层。输入层接收输入数据,模式层通过径向基函数将输入映射到高维空间,求和层对模式层的输出进行加权求和,最后输出层生成预测结果。GRNN的核心思想是利用高斯核函数计算输入与训练样本之间的相似度,然后根据相似度加权平均得到预测值。

2303_77200324的博客 1092

activiti 5.22 自由流转核心代码(多实例可以用)

因为国情,所以自由流 方式也是工作中可能遇到的情况,分享给大家

u010069011的博客 1315

CATIA V5新手必看:从零开始的界面导航与基础操作指南(附常见问题解决)

本文为CATIA V5新手提供全面的界面导航与基础操作指南,涵盖核心工作区解析、文件管理规范、视图操作秘籍及常见问题解决方案。通过详细的步骤说明和实用技巧,帮助用户快速掌握这一工业设计标杆软件,特别适合从SolidWorks、AutoCAD等软件过渡的用户。

b9c0d的博客 532

深度强化学习在机器人控制中的应用

非常感谢您提供如此详细的任务要求和约束条件。作为一位世界级的人工智能专家和计算机领域大师,我将全身心投入到这篇技术博客的撰写中。 深度强化学习在机器人控制中的应用 1. 背景介绍 近年来,随着人工智能技术的飞速发展,深度学习和强化学习在各个领域都得到了广泛应用,尤其是在机器人

AI天才研究院 1324

activiti 任务监听器

import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.delegate.TaskListener; public class Listener implements TaskListener {     @Override public void notify(DelegateTask ...

qq_36760953的博客 1016

解决Office 365 SMTP问题:C#邮件发送详解

本文介绍了如何在C#中使用Office 365 SMTP服务发送邮件。重点讲解了正确配置SMTP客户端的关键参数:必须使用587端口并启用TLS加密(EnableSsl=true),同时通过NetworkCredential进行身份验证。虽然SmtpClient已不推荐用于新项目,但本文提供的代码示例仍适用于临时项目或系统维护,并建议未来可考虑使用MailKit等现代邮件库。文章还包含了错误处理机制,确保程序健壮性。

2501_90323865的博客 141

Activiti :监听器注入问题

在公司开发项目使用activiti框架时,出现了监听器无法注入问题,查阅资料后得到以下信息: 1、通过javaClass加载指定类,属于硬编码的形式管理监听器,就是将class字节码文件交由activtiEngine处理, 每次需要的时候则有engine通过反射构建实例对象,spring无法管理。 2、通过delegate expression配置容器的中的bean作为监听器,需要实现E...

weixin_40213204的博客 2965

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Activiti流程控制框架

Activiti概述 Activiti5是由Alfresco软件发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人TomBaeyens...

chuoyuan3350的博客 593

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

activiti-2

内容安排: 历史数据查询 流程变量(设置、获取) 任务的类型(个人、公共、接收) 监听器(执行、任务) 网关(并行、排他) Spring整合   一、历史数据查询 1.1查询历史流程实例列表   1.2查询历史活动数据   1.3查询历史任务数据 二、流程变量 2.1设置流程变量 2.1.1在启动流程实例时设置     2.1.2在办理任务时设置  ...

woxuyaohaohaoxuexi的博客 295

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Activiti监听器配置全攻略:Expression与DelegateExpression到底怎么选?

本文深度解析Activiti流程引擎中expression与delegateExpression两种监听器配置方式的差异与应用场景。通过实际案例对比,帮助开发者根据业务复杂度、性能需求选择最佳方案,提升流程开发效率与系统可维护性。

weixin_30315723的博客 467

Flowable7流程管理

Flowable 是一个基于 BPMN 2.0 标准的流程引擎,用于构建和管理业务流程。它支持 Spring Boot 集成,并提供了多种服务接口(如 RepositoryService、RuntimeService、TaskService 等)来管理流程的部署、执行和监控。

weixin_62307424的博客 1529

Activiti工作流-笔记2

兴趣是最好的老师 211

Activity工作流(四):任务管理

Activity任务管理

专治八阿哥的孟老师 629

activiti工作流的监听类调用spring中的been

在我们使用activiti监听类的时候有时需要调用spring中的been,但是你会发现如果在监听类中直接引入been会报null指针异常。

tt094534的博客 2936

Activity流程引擎保姆级教程:从入门到精通

摘要: Activity作为开源工作流引擎,基于BPMN 2.0标准,解决了传统硬编码业务流程的耦合性高、变更困难等问题。其核心架构包含五大服务接口(如流程定义、任务管理)和25张数据库表,分为流程定义、运行时和历史记录等类别。通过Spring Boot集成可快速配置数据源和自动化部署,支持可视化流程设计(如请假审批流程)和条件分支处理。Java服务层提供流程启动、任务查询等API,实现业务逻辑与流程引擎的解耦,提升开发效率和系统可维护性。

cx1050306424的博客 601

activiti监听器中注入spring bean

/** * 抄收主管审核监听器 */ @Component("gasChargeCopySupervisorReviewListener") public class CopySupervisorReviewListener implements TaskListener { private static final long serialVersionUID = 6436489088014722180L; @Autowired private IActKeyValueProp.

bool的博客 2557

activiti(7):监听器之流程监听及spring注入

activiti监听器使用及spring管理与注入

开发备忘 2万+

activiti任务监听器获取Spring Bean

hibernate sql server 2005 假分页 hibernate3.x版本对Sql Server分页使用的Select Top方式,如果一页显示100条要查看第100页数据hibernate查询语句为Select Top 10000,先查出10000条然后再从里面取100条,解决方法为升级hibernate到4.x版本,设置hibernate.dialect=org.hiberna...

weixin_44048532的博客 2243

Activiti监听器中获取Spring IOC中的Bean

Activiti监听器中获取Spring IOC中的BeanActiviti监听器中的配置 Activiti监听器中的配置 Activiti的监听器不受SpringIOC管理,所以不能直接通过注入的方式来获取IOC中的Bean, 具体在监听器的配置是 比如我需要获取到IOC中的UserService public class TaskListenerImpl implements TaskList...

weixin_44005175的博客 648
上一篇: 关于maven的settings.xml配置常用标签解析
下一篇: HttpServletRequest与ServletRequest的区别
十月丶
博客等级 码龄10年 3粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值