当前位置:网站首页>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();
}
}
边栏推荐
- Loop structure of program (for loop)
- Unity | two ways to realize facial drive
- ctf. Show PHP feature (89~110)
- General operation method of spot Silver
- 【Flask】官方教程(Tutorial)-part1:项目布局、应用程序设置、定义和访问数据库
- 竞价推广流程
- dried food! Accelerating sparse neural network through hardware and software co design
- ClickOnce 不支持请求执行级别“requireAdministrator”
- Unreal browser plug-in
- 【Flask】官方教程(Tutorial)-part3:blog蓝图、项目可安装化
猜你喜欢

VMware Tools installation error: unable to automatically install vsock driver

干货!通过软硬件协同设计加速稀疏神经网络

Maya hollowed out modeling

Ordinary people end up in Global trade, and a new round of structural opportunities emerge

晶振是如何起振的?

C web page open WinForm exe

Basic operations of databases and tables ----- default constraints

普通人下场全球贸易,新一轮结构性机会浮出水面

MATLB|实时机会约束决策及其在电力系统中的应用

Superfluid_ HQ hacked analysis
随机推荐
Test de vulnérabilité de téléchargement de fichiers basé sur dvwa
【全網最全】 |MySQL EXPLAIN 完全解讀
[flask] static file and template rendering
【Flask】响应、session与Message Flashing
What is weak reference? What are the weak reference data types in ES6? What are weak references in JS?
ThreeDPoseTracker项目解析
Luo Gu P1170 Bugs Bunny and Hunter
Loop structure of program (for loop)
Recommended areas - ways to explore users' future interests
CocoaPods could not find compatible versions for pod 'Firebase/CoreOnly'
02.Go语言开发环境配置
UE4 unreal engine, editor basic application, usage skills (IV)
【详细】快速实现对象映射的几种方式
剑指 Offer 12. 矩阵中的路径
Redis-字符串类型
internship:项目代码所涉及陌生注解及其作用
Initialize MySQL database when docker container starts
MATLB|实时机会约束决策及其在电力系统中的应用
You are using pip version 21.1.1; however, version 22.0.3 is available. You should consider upgradin
Une image! Pourquoi l'école t'a - t - elle appris à coder, mais pourquoi pas...