Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
开发团队
Flowable Engine
提交
461589b8
F
Flowable Engine
项目概览
开发团队
/
Flowable Engine
通知
9
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Flowable Engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
461589b8
编写于
4月 15, 2015
作者:
J
Joram Barrez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix email task + byte array variable deletion when process instance ends
上级
9d9d9bfa
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
88 addition
and
77 deletion
+88
-77
modules/activiti-engine/src/main/java/org/activiti/engine/impl/agenda/EndExecutionOperation.java
...rg/activiti/engine/impl/agenda/EndExecutionOperation.java
+1
-4
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/factory/ActivityBehaviorFactory.java
...ine/impl/bpmn/parser/factory/ActivityBehaviorFactory.java
+5
-7
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/factory/DefaultActivityBehaviorFactory.java
...l/bpmn/parser/factory/DefaultActivityBehaviorFactory.java
+11
-12
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/handler/SendTaskParseHandler.java
...engine/impl/bpmn/parser/handler/SendTaskParseHandler.java
+27
-32
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/handler/ServiceTaskParseHandler.java
...ine/impl/bpmn/parser/handler/ServiceTaskParseHandler.java
+2
-2
modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/entity/VariableInstanceEntity.java
...ngine/impl/persistence/entity/VariableInstanceEntity.java
+8
-7
modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/entity/VariableInstanceEntityManager.java
...mpl/persistence/entity/VariableInstanceEntityManager.java
+24
-1
modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/entity/VariableScopeImpl.java
...iti/engine/impl/persistence/entity/VariableScopeImpl.java
+2
-3
modules/activiti-engine/src/main/java/org/activiti/engine/test/TestActivityBehaviorFactory.java
...org/activiti/engine/test/TestActivityBehaviorFactory.java
+8
-9
未找到文件。
modules/activiti-engine/src/main/java/org/activiti/engine/impl/agenda/EndExecutionOperation.java
浏览文件 @
461589b8
...
...
@@ -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
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/factory/ActivityBehaviorFactory.java
浏览文件 @
461589b8
...
...
@@ -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
);
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/factory/DefaultActivityBehaviorFactory.java
浏览文件 @
461589b8
...
...
@@ -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
;
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/handler/SendTaskParseHandler.java
浏览文件 @
461589b8
...
...
@@ -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
.
setActivity
Behavior
(
bpmnParse
.
getActivityBehaviorFactory
().
createMailActivityBehavior
(
sendTask
));
sendTask
.
set
Behavior
(
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
());
}
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/handler/ServiceTaskParseHandler.java
浏览文件 @
461589b8
...
...
@@ -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
));
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/entity/VariableInstanceEntity.java
浏览文件 @
461589b8
...
...
@@ -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
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/entity/VariableInstanceEntityManager.java
浏览文件 @
461589b8
...
...
@@ -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
);
}
}
}
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/entity/VariableScopeImpl.java
浏览文件 @
461589b8
...
...
@@ -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
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/test/TestActivityBehaviorFactory.java
浏览文件 @
461589b8
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录