提交 461589b8 编写于 作者: J Joram Barrez

Fix email task + byte array variable deletion when process instance ends

上级 9d9d9bfa
......@@ -69,10 +69,7 @@ public class EndExecutionOperation extends AbstractOperation {
} else {
String processInstanceId = executionEntity.getId(); // No parent
// execution ==
// process
// instance id
String processInstanceId = executionEntity.getId(); // No parent execution == process instance id
logger.debug("No parent execution found. Verifying if process instance {} can be stopped.", processInstanceId);
// TODO: optimisation can be made by keeping the nr of active
......
......@@ -13,7 +13,6 @@
package org.activiti.engine.impl.bpmn.parser.factory;
import org.activiti.bpmn.model.BoundaryEvent;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.BusinessRuleTask;
import org.activiti.bpmn.model.CallActivity;
import org.activiti.bpmn.model.CancelEventDefinition;
......@@ -140,15 +139,14 @@ public interface ActivityBehaviorFactory {
public abstract MailActivityBehavior createMailActivityBehavior(SendTask sendTask);
// We do not want a hard dependency on the Mule module, hence we return
// ActivityBehavior and instantiate
// the delegate instance using a string instead of the Class itself.
public abstract ActivityBehavior createMuleActivityBehavior(ServiceTask serviceTask, BpmnModel bpmnModel);
// ActivityBehavior and instantiate the delegate instance using a string instead of the Class itself.
public abstract ActivityBehavior createMuleActivityBehavior(ServiceTask serviceTask);
public abstract ActivityBehavior createMuleActivityBehavior(SendTask sendTask, BpmnModel bpmnModel);
public abstract ActivityBehavior createMuleActivityBehavior(SendTask sendTask);
public abstract ActivityBehavior createCamelActivityBehavior(ServiceTask serviceTask, BpmnModel bpmnModel);
public abstract ActivityBehavior createCamelActivityBehavior(ServiceTask serviceTask);
public abstract ActivityBehavior createCamelActivityBehavior(SendTask sendTask, BpmnModel bpmnModel);
public abstract ActivityBehavior createCamelActivityBehavior(SendTask sendTask);
public abstract ShellActivityBehavior createShellActivityBehavior(ServiceTask serviceTask);
......
......@@ -188,15 +188,15 @@ public class DefaultActivityBehaviorFactory extends AbstractBehaviorFactory impl
// We do not want a hard dependency on Mule, hence we return
// ActivityBehavior and instantiate
// the delegate instance using a string instead of the Class itself.
public ActivityBehavior createMuleActivityBehavior(ServiceTask serviceTask, BpmnModel bpmnModel) {
return createMuleActivityBehavior(serviceTask, serviceTask.getFieldExtensions(), bpmnModel);
public ActivityBehavior createMuleActivityBehavior(ServiceTask serviceTask) {
return createMuleActivityBehavior(serviceTask, serviceTask.getFieldExtensions());
}
public ActivityBehavior createMuleActivityBehavior(SendTask sendTask, BpmnModel bpmnModel) {
return createMuleActivityBehavior(sendTask, sendTask.getFieldExtensions(), bpmnModel);
public ActivityBehavior createMuleActivityBehavior(SendTask sendTask) {
return createMuleActivityBehavior(sendTask, sendTask.getFieldExtensions());
}
protected ActivityBehavior createMuleActivityBehavior(Task task, List<FieldExtension> fieldExtensions, BpmnModel bpmnModel) {
protected ActivityBehavior createMuleActivityBehavior(Task task, List<FieldExtension> fieldExtensions) {
try {
Class<?> theClass = Class.forName("org.activiti.mule.MuleSendActivitiBehavior");
......@@ -209,17 +209,16 @@ public class DefaultActivityBehaviorFactory extends AbstractBehaviorFactory impl
}
// We do not want a hard dependency on Camel, hence we return
// ActivityBehavior and instantiate
// the delegate instance using a string instead of the Class itself.
public ActivityBehavior createCamelActivityBehavior(ServiceTask serviceTask, BpmnModel bpmnModel) {
return createCamelActivityBehavior(serviceTask, serviceTask.getFieldExtensions(), bpmnModel);
// ActivityBehavior and instantiate the delegate instance using a string instead of the Class itself.
public ActivityBehavior createCamelActivityBehavior(ServiceTask serviceTask) {
return createCamelActivityBehavior(serviceTask, serviceTask.getFieldExtensions());
}
public ActivityBehavior createCamelActivityBehavior(SendTask sendTask, BpmnModel bpmnModel) {
return createCamelActivityBehavior(sendTask, sendTask.getFieldExtensions(), bpmnModel);
public ActivityBehavior createCamelActivityBehavior(SendTask sendTask) {
return createCamelActivityBehavior(sendTask, sendTask.getFieldExtensions());
}
protected ActivityBehavior createCamelActivityBehavior(Task task, List<FieldExtension> fieldExtensions, BpmnModel bpmnModel) {
protected ActivityBehavior createCamelActivityBehavior(Task task, List<FieldExtension> fieldExtensions) {
try {
Class<?> theClass = null;
FieldExtension behaviorExtension = null;
......
......@@ -40,47 +40,42 @@ public class SendTaskParseHandler extends AbstractExternalInvocationBpmnParseHan
protected void executeParse(BpmnParse bpmnParse, SendTask sendTask) {
ActivityImpl activity = createActivityOnCurrentScope(bpmnParse, sendTask, BpmnXMLConstants.ELEMENT_TASK_SEND);
activity.setAsync(sendTask.isAsynchronous());
activity.setExclusive(!sendTask.isNotExclusive());
if (StringUtils.isNotEmpty(sendTask.getType())) {
if (sendTask.getType().equalsIgnoreCase("mail")) {
activity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createMailActivityBehavior(sendTask));
sendTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createMailActivityBehavior(sendTask));
} else if (sendTask.getType().equalsIgnoreCase("mule")) {
activity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createMuleActivityBehavior(sendTask, bpmnParse.getBpmnModel()));
sendTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createMuleActivityBehavior(sendTask));
} else if (sendTask.getType().equalsIgnoreCase("camel")) {
activity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createCamelActivityBehavior(sendTask, bpmnParse.getBpmnModel()));
sendTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createCamelActivityBehavior(sendTask));
}
// for web service
} else if (ImplementationType.IMPLEMENTATION_TYPE_WEBSERVICE.equalsIgnoreCase(sendTask.getImplementationType()) && StringUtils.isNotEmpty(sendTask.getOperationRef())) {
if (!bpmnParse.getOperations().containsKey(sendTask.getOperationRef())) {
logger.warn(sendTask.getOperationRef() + " does not exist for sendTask " + sendTask.getId());
} else {
WebServiceActivityBehavior webServiceActivityBehavior = bpmnParse.getActivityBehaviorFactory().createWebServiceActivityBehavior(sendTask);
Operation operation = bpmnParse.getOperations().get(sendTask.getOperationRef());
webServiceActivityBehavior.setOperation(operation);
if (sendTask.getIoSpecification() != null) {
IOSpecification ioSpecification = createIOSpecification(bpmnParse, sendTask.getIoSpecification());
webServiceActivityBehavior.setIoSpecification(ioSpecification);
}
for (DataAssociation dataAssociationElement : sendTask.getDataInputAssociations()) {
AbstractDataAssociation dataAssociation = createDataInputAssociation(bpmnParse, dataAssociationElement);
webServiceActivityBehavior.addDataInputAssociation(dataAssociation);
}
for (DataAssociation dataAssociationElement : sendTask.getDataOutputAssociations()) {
AbstractDataAssociation dataAssociation = createDataOutputAssociation(bpmnParse, dataAssociationElement);
webServiceActivityBehavior.addDataOutputAssociation(dataAssociation);
}
activity.setActivityBehavior(webServiceActivityBehavior);
}
// if (!bpmnParse.getOperations().containsKey(sendTask.getOperationRef())) {
// logger.warn(sendTask.getOperationRef() + " does not exist for sendTask " + sendTask.getId());
// } else {
// WebServiceActivityBehavior webServiceActivityBehavior = bpmnParse.getActivityBehaviorFactory().createWebServiceActivityBehavior(sendTask);
// Operation operation = bpmnParse.getOperations().get(sendTask.getOperationRef());
// webServiceActivityBehavior.setOperation(operation);
//
// if (sendTask.getIoSpecification() != null) {
// IOSpecification ioSpecification = createIOSpecification(bpmnParse, sendTask.getIoSpecification());
// webServiceActivityBehavior.setIoSpecification(ioSpecification);
// }
//
// for (DataAssociation dataAssociationElement : sendTask.getDataInputAssociations()) {
// AbstractDataAssociation dataAssociation = createDataInputAssociation(bpmnParse, dataAssociationElement);
// webServiceActivityBehavior.addDataInputAssociation(dataAssociation);
// }
//
// for (DataAssociation dataAssociationElement : sendTask.getDataOutputAssociations()) {
// AbstractDataAssociation dataAssociation = createDataOutputAssociation(bpmnParse, dataAssociationElement);
// webServiceActivityBehavior.addDataOutputAssociation(dataAssociation);
// }
//
// activity.setActivityBehavior(webServiceActivityBehavior);
// }
} else {
logger.warn("One of the attributes 'type' or 'operation' is mandatory on sendTask " + sendTask.getId());
}
......
......@@ -51,10 +51,10 @@ public class ServiceTaskParseHandler extends AbstractExternalInvocationBpmnParse
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createMailActivityBehavior(serviceTask));
} else if (serviceTask.getType().equalsIgnoreCase("mule")) {
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createMuleActivityBehavior(serviceTask, bpmnParse.getBpmnModel()));
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createMuleActivityBehavior(serviceTask));
} else if (serviceTask.getType().equalsIgnoreCase("camel")) {
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createCamelActivityBehavior(serviceTask, bpmnParse.getBpmnModel()));
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createCamelActivityBehavior(serviceTask));
} else if (serviceTask.getType().equalsIgnoreCase("shell")) {
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createShellActivityBehavior(serviceTask));
......
......@@ -88,13 +88,6 @@ public class VariableInstanceEntity implements ValueFields, PersistentObject, Ha
}
public void delete() {
Context.getCommandContext().getDbSqlSession().delete(this);
byteArrayRef.delete();
deleted = true;
}
public Object getPersistentState() {
Map<String, Object> persistentState = new HashMap<String, Object>();
if (longValue != null) {
......@@ -121,6 +114,10 @@ public class VariableInstanceEntity implements ValueFields, PersistentObject, Ha
public int getRevisionNext() {
return revision + 1;
}
public void setDeleted(boolean isDeleted) {
this.deleted = isDeleted;
}
public boolean isDeleted() {
return deleted;
......@@ -161,6 +158,10 @@ public class VariableInstanceEntity implements ValueFields, PersistentObject, Ha
public String getByteArrayValueId() {
return byteArrayRef.getId();
}
public ByteArrayRef getByteArrayRef() {
return byteArrayRef;
}
@Override
@Deprecated
......
......@@ -18,6 +18,9 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.activiti.engine.delegate.event.impl.ActivitiEventBuilder;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.persistence.CachedEntityMatcher;
/**
......@@ -75,12 +78,32 @@ public class VariableInstanceEntityManager extends AbstractEntityManager<Variabl
params.put("names", names);
return getDbSqlSession().selectList("selectVariableInstancesByTaskAndNames", params);
}
@Override
public void delete(VariableInstanceEntity entity) {
delete(entity, true);
}
@Override
public void delete(VariableInstanceEntity entity, boolean fireDeleteEvent) {
getDbSqlSession().delete(entity);
ByteArrayRef byteArrayRef = entity.getByteArrayRef();
if (byteArrayRef != null) {
byteArrayRef.delete();
}
entity.setDeleted(true);
if (fireDeleteEvent && Context.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) {
Context.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_DELETED, entity));
}
}
public void deleteVariableInstanceByTask(TaskEntity task) {
Map<String, VariableInstanceEntity> variableInstances = task.getVariableInstances();
if (variableInstances != null) {
for (VariableInstanceEntity variableInstance : variableInstances.values()) {
variableInstance.delete();
delete(variableInstance);
}
}
}
......
......@@ -443,8 +443,7 @@ public abstract class VariableScopeImpl implements Serializable, VariableScope {
for (VariableInstanceEntity variableInstance : variableInstances.values()) {
Context.getCommandContext().getHistoryManager().recordVariableUpdate(variableInstance);
variableInstance.delete();
Context.getCommandContext().getVariableInstanceEntityManager().delete(variableInstance);
}
}
......@@ -672,7 +671,7 @@ public abstract class VariableScopeImpl implements Serializable, VariableScope {
}
protected void deleteVariableInstanceForExplicitUserCall(VariableInstanceEntity variableInstance, ExecutionEntity sourceActivityExecution) {
variableInstance.delete();
Context.getCommandContext().getVariableInstanceEntityManager().delete(variableInstance);
variableInstance.setValue(null);
// Record historic variable deletion
......
......@@ -20,7 +20,6 @@ import java.util.Map;
import java.util.Set;
import org.activiti.bpmn.model.BoundaryEvent;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.BusinessRuleTask;
import org.activiti.bpmn.model.CallActivity;
import org.activiti.bpmn.model.CancelEventDefinition;
......@@ -208,23 +207,23 @@ public class TestActivityBehaviorFactory extends AbstractBehaviorFactory impleme
}
@Override
public ActivityBehavior createMuleActivityBehavior(ServiceTask serviceTask, BpmnModel bpmnModel) {
return wrappedActivityBehaviorFactory.createMuleActivityBehavior(serviceTask, bpmnModel);
public ActivityBehavior createMuleActivityBehavior(ServiceTask serviceTask) {
return wrappedActivityBehaviorFactory.createMuleActivityBehavior(serviceTask);
}
@Override
public ActivityBehavior createMuleActivityBehavior(SendTask sendTask, BpmnModel bpmnModel) {
return wrappedActivityBehaviorFactory.createMuleActivityBehavior(sendTask, bpmnModel);
public ActivityBehavior createMuleActivityBehavior(SendTask sendTask) {
return wrappedActivityBehaviorFactory.createMuleActivityBehavior(sendTask);
}
@Override
public ActivityBehavior createCamelActivityBehavior(ServiceTask serviceTask, BpmnModel bpmnModel) {
return wrappedActivityBehaviorFactory.createCamelActivityBehavior(serviceTask, bpmnModel);
public ActivityBehavior createCamelActivityBehavior(ServiceTask serviceTask) {
return wrappedActivityBehaviorFactory.createCamelActivityBehavior(serviceTask);
}
@Override
public ActivityBehavior createCamelActivityBehavior(SendTask sendTask, BpmnModel bpmnModel) {
return wrappedActivityBehaviorFactory.createCamelActivityBehavior(sendTask, bpmnModel);
public ActivityBehavior createCamelActivityBehavior(SendTask sendTask) {
return wrappedActivityBehaviorFactory.createCamelActivityBehavior(sendTask);
}
@Override
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册