当前位置:网站首页>Comments on flowable source code (XXXV) timer activation process definition processor, process instance migration job processor

Comments on flowable source code (XXXV) timer activation process definition processor, process instance migration job processor

2022-07-06 01:35:00 jinyangjie0

Flowable Source code address :https://github.com/flowable/flowable-engine

Flowable-6.7.2 Source code comment address :https://github.com/solojin/flowable-6.7.2-annotated

Package path :org.flowable.engine.impl.jobexecutor

TimerActivateProcessDefinitionHandler Timer activation process definition processor

/** *  Timer activation process definition processor  * * @author Joram Barrez */
public class TimerActivateProcessDefinitionHandler extends TimerChangeProcessDefinitionSuspensionStateJobHandler {
    

    //  type : Activate the process definition 
    public static final String TYPE = "activate-processdefinition";

    //  Access to type 
    @Override
    public String getType() {
    
        return TYPE;
    }

    //  Perform operation ,job Operation entity ,configuration To configure ,variableScope Variable range ,commandContext Command context 
    @Override
    public void execute(JobEntity job, String configuration, VariableScope variableScope, CommandContext commandContext) {
    
        ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext);
        
        boolean activateProcessInstances = false;
        try {
    
            JsonNode configNode = processEngineConfiguration.getObjectMapper().readTree(configuration);
            activateProcessInstances = getIncludeProcessInstances(configNode);
        } catch (Exception e) {
    
            //  Read json Error in value 
            throw new FlowableException("Error reading json value " + configuration, e);
        }

        String processDefinitionId = job.getProcessDefinitionId();
        ActivateProcessDefinitionCmd activateProcessDefinitionCmd = new ActivateProcessDefinitionCmd(processDefinitionId, null, activateProcessInstances, null, job.getTenantId());
        activateProcessDefinitionCmd.execute(commandContext);
    }

}

AbstractProcessInstanceMigrationJobHandler Abstract process instance migration job processor

/** *  Abstract process instance migration job processor  */
public abstract class AbstractProcessInstanceMigrationJobHandler implements JobHandler {
    

    //  Batch result status label 
    public static final String BATCH_RESULT_STATUS_LABEL = "resultStatus";
    //  Batch result information label 
    public static final String BATCH_RESULT_MESSAGE_LABEL = "resultMessage";

    protected static final String CFG_LABEL_BATCH_ID = "batchId";
    protected static final String CFG_LABEL_BATCH_PART_ID = "batchPartId";
    
    protected static String getBatchIdFromHandlerCfg(String handlerCfg) {
    
        try {
    
            JsonNode cfgAsJson = getObjectMapper().readTree(handlerCfg);
            if (cfgAsJson.has(CFG_LABEL_BATCH_ID)) {
    
                return cfgAsJson.get(CFG_LABEL_BATCH_ID).asText();
            }
            return null;
        } catch (IOException e) {
    
            return null;
        }
    }

    protected static String getBatchPartIdFromHandlerCfg(String handlerCfg) {
    
        try {
    
            JsonNode cfgAsJson = getObjectMapper().readTree(handlerCfg);
            if (cfgAsJson.has(CFG_LABEL_BATCH_PART_ID)) {
    
                return cfgAsJson.get(CFG_LABEL_BATCH_PART_ID).asText();
            }
            return null;
        } catch (IOException e) {
    
            return null;
        }
    }
    
    public static String getHandlerCfgForBatchId(String batchId) {
    
        ObjectNode handlerCfg = getObjectMapper().createObjectNode();
        handlerCfg.put(CFG_LABEL_BATCH_ID, batchId);
        return handlerCfg.toString();
    }

    public static String getHandlerCfgForBatchPartId(String batchPartId) {
    
        ObjectNode handlerCfg = getObjectMapper().createObjectNode();
        handlerCfg.put(CFG_LABEL_BATCH_PART_ID, batchPartId);
        return handlerCfg.toString();
    }

    protected static ObjectMapper getObjectMapper() {
    
        if (CommandContextUtil.getCommandContext() != null) {
    
            return CommandContextUtil.getProcessEngineConfiguration().getObjectMapper();
        } else {
    
            return new ObjectMapper();
        }
    }
}

ProcessInstanceMigrationJobHandler Process instance migration job processor

/** *  Process instance migration job processor  */
public class ProcessInstanceMigrationJobHandler extends AbstractProcessInstanceMigrationJobHandler {
    

    //  type : Process migration 
    public static final String TYPE = "process-migration";

    @Override
    public String getType() {
    
        return TYPE;
    }

    @Override
    public void execute(JobEntity job, String configuration, VariableScope variableScope, CommandContext commandContext) {
    
        ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext);
        BatchService batchService = processEngineConfiguration.getBatchServiceConfiguration().getBatchService();
        ProcessInstanceMigrationManager processInstanceMigrationManager = processEngineConfiguration.getProcessInstanceMigrationManager();

        String batchPartId = getBatchPartIdFromHandlerCfg(configuration);
        BatchPart batchPart = batchService.getBatchPart(batchPartId);
        Batch batch = batchService.getBatch(batchPart.getBatchId());
        ProcessInstanceMigrationDocument migrationDocument = ProcessInstanceMigrationDocumentImpl.fromJson(batch.getBatchDocumentJson(processEngineConfiguration.getEngineCfgKey()));

        String exceptionMessage = null;
        try {
    
            processInstanceMigrationManager.migrateProcessInstance(batchPart.getScopeId(), migrationDocument, commandContext);
        } catch (FlowableException e) {
    
            exceptionMessage = e.getMessage();
        }

        String resultAsJsonString = prepareResultAsJsonString(exceptionMessage);
        
        if (exceptionMessage != null) {
    
            batchService.completeBatchPart(batchPartId, ProcessInstanceBatchMigrationResult.RESULT_FAIL, resultAsJsonString);
        } else {
    
            batchService.completeBatchPart(batchPartId, ProcessInstanceBatchMigrationResult.RESULT_SUCCESS, resultAsJsonString);
        }
    }

    protected static String prepareResultAsJsonString(String exceptionMessage) {
    
        ObjectNode objectNode = getObjectMapper().createObjectNode();
        if (exceptionMessage == null) {
    
            objectNode.put(BATCH_RESULT_STATUS_LABEL, ProcessInstanceBatchMigrationResult.RESULT_SUCCESS);
        } else {
    
            objectNode.put(BATCH_RESULT_STATUS_LABEL, ProcessInstanceBatchMigrationResult.RESULT_FAIL);
            objectNode.put(BATCH_RESULT_MESSAGE_LABEL, exceptionMessage);
        }
        return objectNode.toString();
    }

}
原网站

版权声明
本文为[jinyangjie0]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140121410827.html