Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.
activiti-api-impl的是一个非常常见的需求。
@Configuration
@PropertySource("classpath:conf/rest-jackson-configuration.properties") //load default jackson configuration
public class CommonModelAutoConfiguration {
//this bean will be automatically injected inside boot's ObjectMapper
@Bean
public Module customizeCommonModelObjectMapper() {
SimpleModule module = new SimpleModule("mapCommonModelInterfaces",
Version.unknownVersion());
SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver() {
//this is a workaround for https://github.com/FasterXML/jackson-databind/issues/2019
//once version 2.9.6 is related we can remove this @override method
@Override
public JavaType resolveAbstractType(DeserializationConfig config,
BeanDescription typeDesc) {
return findTypeMapping(config,
typeDesc.getType());
}
};
resolver.addMapping(VariableInstance.class,
VariableInstanceImpl.class);
module.setAbstractTypes(resolver);
module.setMixInAnnotation(Payload.class,
PayloadMixIn.class);
module.setMixInAnnotation(Result.class,
ResultMixIn.class);
module.registerSubtypes(new NamedType(EmptyResult.class,
EmptyResult.class.getSimpleName()));
return module;
}
}
public abstract class RuntimeEventImpl<ENTITY_TYPE, EVENT_TYPE extends Enum<?>> implements RuntimeEvent<ENTITY_TYPE, EVENT_TYPE> {
private String id;
private Long timestamp;
private String processInstanceId;
private String processDefinitionId;
private String processDefinitionKey;
private Integer processDefinitionVersion;
private String businessKey;
private String parentProcessInstanceId;
private ENTITY_TYPE entity;
public RuntimeEventImpl() {
id = UUID.randomUUID().toString();
timestamp = System.currentTimeMillis();
}
public RuntimeEventImpl(ENTITY_TYPE entity) {
this();
this.entity = entity;
}
public RuntimeEventImpl(String id,
Long timestamp,
ENTITY_TYPE entity) {
this.id = id;
this.timestamp = timestamp;
this.entity = entity;
}
public class ProcessModelAutoConfiguration {
@Autowired(required = false)
@ProcessVariableTypeConverter
@Lazy
private Set<Converter<?, ?>> converters = Collections.emptySet();
//this bean will be automatically injected inside boot's ObjectMapper
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public Module customizeProcessModelObjectMapper(ObjectProvider<ConversionService> conversionServiceProvider) {
SimpleModule module = new SimpleModule("mapProcessModelInterfaces",
Version.unknownVersion());
SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver() {
//this is a workaround for https://github.com/FasterXML/jackson-databind/issues/2019
//once version 2.9.6 is related we can remove this @override method
@Override
public JavaType resolveAbstractType(DeserializationConfig config,
BeanDescription typeDesc) {
return findTypeMapping(config,
typeDesc.getType());
}
};
resolver.addMapping(BPMNActivity.class,
BPMNActivityImpl.class);
resolver.addMapping(ProcessInstance.class,
ProcessInstanceImpl.class);
resolver.addMapping(ProcessDefinition.class,
ProcessDefinitionImpl.class);
resolver.addMapping(BPMNSequenceFlow.class,
BPMNSequenceFlowImpl.class);
resolver.addMapping(IntegrationContext.class,
IntegrationContextImpl.class);
resolver.addMapping(BPMNSignal.class,
BPMNSignalImpl.class);
resolver.addMapping(BPMNTimer.class,
BPMNTimerImpl.class);
resolver.addMapping(BPMNMessage.class,
BPMNMessageImpl.class);
resolver.addMapping(BPMNError.class,
BPMNErrorImpl.class);
resolver.addMapping(MessageSubscription.class,
MessageSubscriptionImpl.class);
resolver.addMapping(StartMessageSubscription.class,
StartMessageSubscriptionImpl.class);
resolver.addMapping(StartMessageDeployedEvent.class,
StartMessageDeployedEventImpl.class);
resolver.addMapping(StartMessageDeploymentDefinition.class,
StartMessageDeploymentDefinitionImpl.class);
resolver.addMapping(ProcessCandidateStarterUser.class,
ProcessCandidateStarterUserImpl.class);
resolver.addMapping(ProcessCandidateStarterGroup.class,
ProcessCandidateStarterGroupImpl.class);
module.registerSubtypes(new NamedType(ProcessInstanceResult.class,
ProcessInstanceResult.class.getSimpleName()));
module.registerSubtypes(new NamedType(DeleteProcessPayload.class,
DeleteProcessPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(GetProcessDefinitionsPayload.class,
GetProcessDefinitionsPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(GetProcessInstancesPayload.class,
GetProcessInstancesPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(GetVariablesPayload.class,
GetVariablesPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(RemoveProcessVariablesPayload.class,
RemoveProcessVariablesPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(SetProcessVariablesPayload.class,
SetProcessVariablesPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(SignalPayload.class,
SignalPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(TimerPayload.class,
TimerPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(StartProcessPayload.class,
StartProcessPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(CreateProcessInstancePayload.class,
CreateProcessInstancePayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(SuspendProcessPayload.class,
SuspendProcessPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(ResumeProcessPayload.class,
ResumeProcessPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(UpdateProcessPayload.class,
UpdateProcessPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(StartMessagePayload.class,
StartMessagePayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(ReceiveMessagePayload.class,
ReceiveMessagePayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(MessageEventPayload.class,
MessageEventPayload.class.getSimpleName()));
module.setAbstractTypes(resolver);
ConversionService conversionService = conversionServiceProvider.getIfUnique(this::conversionService);
module.addSerializer(new ProcessVariablesMapSerializer(conversionService));
module.addDeserializer(ProcessVariablesMap.class,
new ProcessVariablesMapDeserializer(conversionService));
return module;
}
public class DefaultServiceTaskBehavior extends AbstractBpmnActivityBehavior {
private final ApplicationContext applicationContext;
private final IntegrationContextBuilder integrationContextBuilder;
private final VariablesPropagator variablesPropagator;
public DefaultServiceTaskBehavior(ApplicationContext applicationContext,
IntegrationContextBuilder integrationContextBuilder, VariablesPropagator variablesPropagator) {
this.applicationContext = applicationContext;
this.integrationContextBuilder = integrationContextBuilder;
this.variablesPropagator = variablesPropagator;
}
/**
* We have two different implementation strategy that can be executed
* in according if we have a connector action definition match or not.
**/
@Override
public void execute(DelegateExecution execution) {
Connector connector = getConnector(getImplementation(execution));
IntegrationContext integrationContext = connector.apply(integrationContextBuilder.from(execution));
variablesPropagator.propagate(execution, integrationContext.getOutBoundVariables());
leave(execution);
}
private String getImplementation(DelegateExecution execution) {
return ((ServiceTask) execution.getCurrentFlowElement()).getImplementation();
}
private Connector getConnector(String implementation) {
return applicationContext.getBean(implementation,
Connector.class);
}
private String getServiceTaskImplementation(DelegateExecution execution) {
return ((ServiceTask) execution.getCurrentFlowElement()).getImplementation();
}
public boolean hasConnectorBean(DelegateExecution execution) {
String implementation = getServiceTaskImplementation(execution);
return applicationContext.containsBean(implementation) && applicationContext.getBean(implementation) instanceof Connector;
}
}
public class APIVariableInstanceConverter
extends ListConverter<org.activiti.engine.impl.persistence.entity.VariableInstance, VariableInstance>
implements ModelConverter<org.activiti.engine.impl.persistence.entity.VariableInstance, VariableInstance> {
@Override
public VariableInstance from(org.activiti.engine.impl.persistence.entity.VariableInstance internalVariableInstance) {
return new VariableInstanceImpl<>(internalVariableInstance.getName(),
internalVariableInstance.getTypeName(),
internalVariableInstance.getValue(),
internalVariableInstance.getProcessInstanceId(),
internalVariableInstance.getTaskId());
}
}
public class TaskModelAutoConfiguration {
//this bean will be automatically injected inside boot's ObjectMapper
@Bean
public Module customizeTaskModelObjectMapper() {
SimpleModule module = new SimpleModule("mapTaskRuntimeInterfaces",
Version.unknownVersion());
SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver() {
//this is a workaround for https://github.com/FasterXML/jackson-databind/issues/2019
//once version 2.9.6 is related we can remove this @override method
@Override
public JavaType resolveAbstractType(DeserializationConfig config,
BeanDescription typeDesc) {
return findTypeMapping(config,
typeDesc.getType());
}
};
resolver.addMapping(Task.class,
TaskImpl.class);
resolver.addMapping(TaskCandidateUser.class,
TaskCandidateUserImpl.class);
resolver.addMapping(TaskCandidateGroup.class,
TaskCandidateGroupImpl.class);
module.registerSubtypes(new NamedType(TaskResult.class,
TaskResult.class.getSimpleName()));
module.registerSubtypes(new NamedType(ClaimTaskPayload.class,
ClaimTaskPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(CompleteTaskPayload.class,
CompleteTaskPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(SaveTaskPayload.class,
SaveTaskPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(CreateTaskPayload.class,
CreateTaskPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(DeleteTaskPayload.class,
DeleteTaskPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(GetTasksPayload.class,
GetTasksPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(GetTaskVariablesPayload.class,
GetTaskVariablesPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(ReleaseTaskPayload.class,
ReleaseTaskPayload.class.getSimpleName()));
module.registerSubtypes(new NamedType(UpdateTaskPayload.class,
UpdateTaskPayload.class.getSimpleName()));
module.setAbstractTypes(resolver);
return module;
}
}
至此core 包分析完毕。
[1]. https://www.activiti.org/
欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~