当前位置:网站首页>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();
}
}
边栏推荐
- Redis-Key的操作
- A picture to understand! Why did the school teach you coding but still not
- Unreal browser plug-in
- 干货!通过软硬件协同设计加速稀疏神经网络
- 【全网最全】 |MySQL EXPLAIN 完全解读
- Paddle framework: paddlenlp overview [propeller natural language processing development library]
- Folio.ink 免费、快速、易用的图片分享工具
- Blue Bridge Cup embedded stm32g431 - the real topic and code of the eighth provincial competition
- Leetcode 208. Implement trie (prefix tree)
- 记一个 @nestjs/typeorm^8.1.4 版本不能获取.env选项问题
猜你喜欢
How to see the K-line chart of gold price trend?
Huawei converged VLAN principle and configuration
General operation method of spot Silver
[solved] how to generate a beautiful static document description page
插卡4G工业路由器充电桩智能柜专网视频监控4G转以太网转WiFi有线网速测试 软硬件定制
Alibaba canal usage details (pit draining version)_ MySQL and ES data synchronization
dried food! Accelerating sparse neural network through hardware and software co design
MySQL learning notes 2
Basic operations of databases and tables ----- primary key constraints
[understanding of opportunity-39]: Guiguzi - Chapter 5 flying clamp - warning 2: there are six types of praise. Be careful to enjoy praise as fish enjoy bait.
随机推荐
Docker compose配置MySQL并实现远程连接
leetcode刷题_反转字符串中的元音字母
【Flask】官方教程(Tutorial)-part2:蓝图-视图、模板、静态文件
Test de vulnérabilité de téléchargement de fichiers basé sur dvwa
UE4 unreal engine, editor basic application, usage skills (IV)
Flutter Doctor:Xcode 安装不完整
SCM Chinese data distribution
晶振是如何起振的?
Remember that a version of @nestjs/typeorm^8.1.4 cannot be obtained Env option problem
LeetCode 322. Change exchange (dynamic planning)
DOM introduction
[flask] response, session and message flashing
Basic operations of databases and tables ----- default constraints
Yii console method call, Yii console scheduled task
Leetcode 208. 实现 Trie (前缀树)
Kotlin basics 1
Basic operations of database and table ----- set the fields of the table to be automatically added
Idea sets the default line break for global newly created files
Docker compose configures MySQL and realizes remote connection
leetcode刷题_平方数之和