• activiti 全局流程监听ActivitiEventListener,实现监听不同类型事件,不需要在acitivit中配置任务监听,非常方便


    如果我们像给任务配置监听,按照常规的做法是这样的
    file
    一个个配置,比较麻烦。

    现在利用ActivitiEventListener,监听全局事件,并且可以判断不同的事件类型,进而执行不同的业务逻辑。

    1.定义事件处理handler接口

    用接口来定义统一约定

    public interface EventHandler {
        void handle(ActivitiEvent event);
    }
    
    

    2.实现不同事件

    任务结束事件

     */
    public class TaskCompleteListener implements EventHandler {
    
        protected Logger logger = LoggerFactory.getLogger(getClass());
        @Override
        public void handle(ActivitiEvent event) {
            ActivitiEntityEventImpl eventImpl = (ActivitiEntityEventImpl) event;
            TaskEntity taskEntity = (TaskEntity) eventImpl.getEntity();
       
    
        }
    }
    

    任务创建事件

    public class TaskCreateListener implements EventHandler {
    
        protected Logger logger = LoggerFactory.getLogger(getClass());
    
        @Override
        public void handle(ActivitiEvent event) {
            ActivitiEntityEventImpl eventImpl = (ActivitiEntityEventImpl) event;
            TaskEntity taskEntity = (TaskEntity) eventImpl.getEntity();
            
        }
    
    }
    

    还有很多事件,比如TASK_ASSIGNED,PROCESS_STARTED,PROCESS_COMPLETED

    3.实现ActivitiEventListener

    public class GlobalEventListener implements ActivitiEventListener {
        protected Logger logger = LoggerFactory.getLogger(getClass());
        /**
         * 各类 Event 的处理器
         */
        private Map<ActivitiEventType, EventHandler> handlers = new HashMap<ActivitiEventType, EventHandler>();
    
    
    
        @Override
        public void onEvent(ActivitiEvent event) {
            EventHandler eventHandler = handlers.get(event.getType());
            if(eventHandler!=null){
                eventHandler.handle(event);
            }
        }
    
        @Override
        public boolean isFailOnException() {
            return false;
        }
    
        public Map<ActivitiEventType, EventHandler> getHandlers() {
            return handlers;
        }
    
        public void setHandlers(Map<ActivitiEventType, EventHandler> handlers) {
            this.handlers = handlers;
        }
    }
    

    4.注册事件监听

     <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
            <property name="dataSource" ref="dataSource"/>
            <property name="transactionManager" ref="transactionManager"/>
            <property name="databaseSchemaUpdate" value="true"/>
            <property name="jobExecutorActivate" value="false"/>
            <property name="history" value="full"/>
            <property name="processDefinitionCacheLimit" value="10"/>
    
            <!-- 生成流程图的字体 -->
            <property name="activityFontName" value="宋体"/>
            <property name="labelFontName" value="宋体"/>
            <property name="annotationFontName" value="宋体"/>
            <!-- 自动部署 -->
            <property name="deploymentResources">
                <list>
                    <value>classpath*:*</value>
                </list>
            </property>
            <!--  <property name="idGenerator" ref="idGenerator"/>-->
            <property name="eventListeners">
                <list>
                      <ref bean="globalEventListener"/>
                </list>
            </property>
            <property name="customFormTypes">
                <bean class="org.activiti.engine.impl.form.DateFormType">
                    <constructor-arg value="yyyy-MM-dd HH:mm:ss"/>
                </bean>
            </property>
        </bean>
    
        <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
            <property name="processEngineConfiguration" ref="processEngineConfiguration"/>
        </bean>
    
        <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>
        <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"/>
        <bean id="formService" factory-bean="processEngine" factory-method="getFormService"/>
        <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/>
        <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>
        <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/>
        <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService"/>
    
        <!--流程全局事件处理器-->
        <bean id="globalEventListener" class="GlobalEventListener">
             <property name="handlers">
                 <map>
                     <entry key="TASK_CREATED">
                         <bean class="TaskCreateListener"/>
                     </entry>
                       <entry key="TASK_COMPLETED">
                         <bean class="TaskCompleteListener"/>
                       </entry>
                 </map>
             </property>
         </bean>
    

    优点

    • 这样代码清晰,业务逻辑解耦,单一职责
    • 省去在bpmn.xml中配置,方便。
  • 相关阅读:
    SOA简介
    WebService传XML
    架构设计师与SOA(转)
    第二次自己总结WebService
    SQL SERVER的数据类型
    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法
    写了一个分页存储过程把总记录数也写到返回表的每行了
    ASP.net新手经常会碰到的问题
    动态添加、删除附件
    七问七答 SOA
  • 原文地址:https://www.cnblogs.com/qingmiaokeji/p/12285173.html
Copyright © 2020-2023  润新知