Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
开发团队
Flowable Engine
提交
eaa269fe
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,发现更多精彩内容 >>
提交
eaa269fe
编写于
7月 20, 2011
作者:
M
meyerd
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ACT-773 Adding configurable interceptor for client code
上级
41f7bfa1
变更
20
隐藏空白更改
内联
并排
Showing
20 changed file
with
408 addition
and
17 deletion
+408
-17
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/MultiInstanceActivityBehavior.java
...ine/impl/bpmn/behavior/MultiInstanceActivityBehavior.java
+5
-1
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ServiceTaskDelegateExpressionActivityBehavior.java
...havior/ServiceTaskDelegateExpressionActivityBehavior.java
+9
-2
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ServiceTaskJavaDelegateActivityBehavior.java
...pmn/behavior/ServiceTaskJavaDelegateActivityBehavior.java
+6
-2
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/helper/ClassDelegate.java
...a/org/activiti/engine/impl/bpmn/helper/ClassDelegate.java
+14
-6
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/listener/DelegateExpressionExecutionListener.java
...pl/bpmn/listener/DelegateExpressionExecutionListener.java
+9
-2
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/listener/DelegateExpressionTaskListener.java
...ne/impl/bpmn/listener/DelegateExpressionTaskListener.java
+9
-1
modules/activiti-engine/src/main/java/org/activiti/engine/impl/cfg/ProcessEngineConfigurationImpl.java
...iviti/engine/impl/cfg/ProcessEngineConfigurationImpl.java
+20
-0
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/ActivityBehaviorInvocation.java
...viti/engine/impl/delegate/ActivityBehaviorInvocation.java
+25
-0
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/DefaultDelegateInterceptor.java
...viti/engine/impl/delegate/DefaultDelegateInterceptor.java
+16
-0
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/DelegateInvocation.java
...org/activiti/engine/impl/delegate/DelegateInvocation.java
+46
-0
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/ExecutionListenerInvocation.java
...iti/engine/impl/delegate/ExecutionListenerInvocation.java
+25
-0
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/ExpressionGetInvocation.java
...ctiviti/engine/impl/delegate/ExpressionGetInvocation.java
+25
-0
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/ExpressionInvocation.java
...g/activiti/engine/impl/delegate/ExpressionInvocation.java
+18
-0
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/ExpressionSetInvocation.java
...ctiviti/engine/impl/delegate/ExpressionSetInvocation.java
+28
-0
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/JavaDelegateInvocation.java
...activiti/engine/impl/delegate/JavaDelegateInvocation.java
+25
-0
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/TaskListenerInvocation.java
...activiti/engine/impl/delegate/TaskListenerInvocation.java
+25
-0
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/UserCodeInvocation.java
...org/activiti/engine/impl/delegate/UserCodeInvocation.java
+51
-0
modules/activiti-engine/src/main/java/org/activiti/engine/impl/el/JuelExpression.java
...main/java/org/activiti/engine/impl/el/JuelExpression.java
+18
-2
modules/activiti-engine/src/main/java/org/activiti/engine/impl/interceptor/DelegateInterceptor.java
...activiti/engine/impl/interceptor/DelegateInterceptor.java
+26
-0
modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/entity/TaskEntity.java
...g/activiti/engine/impl/persistence/entity/TaskEntity.java
+8
-1
未找到文件。
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/MultiInstanceActivityBehavior.java
浏览文件 @
eaa269fe
...
...
@@ -23,6 +23,8 @@ import org.activiti.engine.ActivitiException;
import
org.activiti.engine.delegate.DelegateExecution
;
import
org.activiti.engine.delegate.ExecutionListener
;
import
org.activiti.engine.delegate.Expression
;
import
org.activiti.engine.impl.context.Context
;
import
org.activiti.engine.impl.delegate.ExecutionListenerInvocation
;
import
org.activiti.engine.impl.pvm.delegate.ActivityBehavior
;
import
org.activiti.engine.impl.pvm.delegate.ActivityExecution
;
import
org.activiti.engine.impl.pvm.delegate.CompositeActivityBehavior
;
...
...
@@ -221,7 +223,9 @@ public abstract class MultiInstanceActivityBehavior extends FlowNodeActivityBeha
List
<
ExecutionListener
>
listeners
=
activity
.
getExecutionListeners
(
org
.
activiti
.
engine
.
impl
.
pvm
.
PvmEvent
.
EVENTNAME_END
);
for
(
ExecutionListener
executionListener
:
listeners
)
{
try
{
executionListener
.
notify
((
ExecutionListenerExecution
)
execution
);
Context
.
getProcessEngineConfiguration
()
.
getDelegateInterceptor
()
.
handleInvocation
(
new
ExecutionListenerInvocation
(
executionListener
,
execution
));
}
catch
(
Exception
e
)
{
throw
new
ActivitiException
(
"Couldn't execute end listener"
,
e
);
}
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ServiceTaskDelegateExpressionActivityBehavior.java
浏览文件 @
eaa269fe
...
...
@@ -15,6 +15,9 @@ package org.activiti.engine.impl.bpmn.behavior;
import
org.activiti.engine.ActivitiException
;
import
org.activiti.engine.delegate.Expression
;
import
org.activiti.engine.delegate.JavaDelegate
;
import
org.activiti.engine.impl.context.Context
;
import
org.activiti.engine.impl.delegate.ActivityBehaviorInvocation
;
import
org.activiti.engine.impl.delegate.JavaDelegateInvocation
;
import
org.activiti.engine.impl.pvm.delegate.ActivityBehavior
;
import
org.activiti.engine.impl.pvm.delegate.ActivityExecution
;
import
org.activiti.engine.impl.pvm.delegate.SignallableActivityBehavior
;
...
...
@@ -50,10 +53,14 @@ public class ServiceTaskDelegateExpressionActivityBehavior extends TaskActivityB
Object
delegate
=
expression
.
getValue
(
execution
);
if
(
delegate
instanceof
ActivityBehavior
)
{
((
ActivityBehavior
)
delegate
).
execute
(
execution
);
Context
.
getProcessEngineConfiguration
()
.
getDelegateInterceptor
()
.
handleInvocation
(
new
ActivityBehaviorInvocation
((
ActivityBehavior
)
delegate
,
execution
));
}
else
if
(
delegate
instanceof
JavaDelegate
)
{
((
JavaDelegate
)
delegate
).
execute
(
execution
);
Context
.
getProcessEngineConfiguration
()
.
getDelegateInterceptor
()
.
handleInvocation
(
new
JavaDelegateInvocation
((
JavaDelegate
)
delegate
,
execution
));
leave
(
execution
);
}
else
{
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ServiceTaskJavaDelegateActivityBehavior.java
浏览文件 @
eaa269fe
...
...
@@ -13,9 +13,11 @@
package
org.activiti.engine.impl.bpmn.behavior
;
import
org.activiti.engine.delegate.DelegateExecution
;
import
org.activiti.engine.delegate.ExecutionListener
;
import
org.activiti.engine.delegate.JavaDelegate
;
import
org.activiti.engine.delegate.DelegateExecution
;
import
org.activiti.engine.impl.context.Context
;
import
org.activiti.engine.impl.delegate.JavaDelegateInvocation
;
import
org.activiti.engine.impl.pvm.delegate.ActivityBehavior
;
import
org.activiti.engine.impl.pvm.delegate.ActivityExecution
;
...
...
@@ -44,6 +46,8 @@ public class ServiceTaskJavaDelegateActivityBehavior extends TaskActivityBehavio
}
public
void
execute
(
DelegateExecution
execution
)
throws
Exception
{
javaDelegate
.
execute
(
execution
);
Context
.
getProcessEngineConfiguration
()
.
getDelegateInterceptor
()
.
handleInvocation
(
new
JavaDelegateInvocation
(
javaDelegate
,
execution
));
}
}
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/helper/ClassDelegate.java
浏览文件 @
eaa269fe
...
...
@@ -25,14 +25,14 @@ import org.activiti.engine.delegate.ExecutionListener;
import
org.activiti.engine.delegate.JavaDelegate
;
import
org.activiti.engine.delegate.TaskListener
;
import
org.activiti.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior
;
import
org.activiti.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior
;
import
org.activiti.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior
;
import
org.activiti.engine.impl.bpmn.behavior.ServiceTaskJavaDelegateActivityBehavior
;
import
org.activiti.engine.impl.bpmn.parser.FieldDeclaration
;
import
org.activiti.engine.impl.context.Context
;
import
org.activiti.engine.impl.delegate.ExecutionListenerInvocation
;
import
org.activiti.engine.impl.delegate.TaskListenerInvocation
;
import
org.activiti.engine.impl.pvm.delegate.ActivityBehavior
;
import
org.activiti.engine.impl.pvm.delegate.ActivityExecution
;
import
org.activiti.engine.impl.pvm.delegate.SignallableActivityBehavior
;
import
org.activiti.engine.impl.pvm.process.ActivityImpl
;
import
org.activiti.engine.impl.util.ReflectUtil
;
...
...
@@ -64,8 +64,10 @@ public class ClassDelegate extends AbstractBpmnActivityBehavior implements TaskL
public
void
notify
(
DelegateExecution
execution
)
throws
Exception
{
if
(
executionListenerInstance
==
null
)
{
executionListenerInstance
=
getExecutionListenerInstance
();
}
executionListenerInstance
.
notify
(
execution
);
}
Context
.
getProcessEngineConfiguration
()
.
getDelegateInterceptor
()
.
handleInvocation
(
new
ExecutionListenerInvocation
(
executionListenerInstance
,
execution
));
}
protected
ExecutionListener
getExecutionListenerInstance
()
{
...
...
@@ -84,7 +86,13 @@ public class ClassDelegate extends AbstractBpmnActivityBehavior implements TaskL
if
(
taskListenerInstance
==
null
)
{
taskListenerInstance
=
getTaskListenerInstance
();
}
taskListenerInstance
.
notify
(
delegateTask
);
try
{
Context
.
getProcessEngineConfiguration
()
.
getDelegateInterceptor
()
.
handleInvocation
(
new
TaskListenerInvocation
(
taskListenerInstance
,
delegateTask
));
}
catch
(
Exception
e
)
{
throw
new
ActivitiException
(
"Exception while invoking TaskListener: "
+
e
.
getMessage
(),
e
);
}
}
protected
TaskListener
getTaskListenerInstance
()
{
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/listener/DelegateExpressionExecutionListener.java
浏览文件 @
eaa269fe
...
...
@@ -17,6 +17,9 @@ import org.activiti.engine.delegate.DelegateExecution;
import
org.activiti.engine.delegate.ExecutionListener
;
import
org.activiti.engine.delegate.Expression
;
import
org.activiti.engine.delegate.JavaDelegate
;
import
org.activiti.engine.impl.context.Context
;
import
org.activiti.engine.impl.delegate.ExecutionListenerInvocation
;
import
org.activiti.engine.impl.delegate.JavaDelegateInvocation
;
/**
...
...
@@ -36,9 +39,13 @@ public class DelegateExpressionExecutionListener implements ExecutionListener {
Object
delegate
=
expression
.
getValue
(
execution
);
if
(
delegate
instanceof
ExecutionListener
)
{
((
ExecutionListener
)
delegate
).
notify
(
execution
);
Context
.
getProcessEngineConfiguration
()
.
getDelegateInterceptor
()
.
handleInvocation
(
new
ExecutionListenerInvocation
((
ExecutionListener
)
delegate
,
execution
));
}
else
if
(
delegate
instanceof
JavaDelegate
)
{
((
JavaDelegate
)
delegate
).
execute
(
execution
);
Context
.
getProcessEngineConfiguration
()
.
getDelegateInterceptor
()
.
handleInvocation
(
new
JavaDelegateInvocation
((
JavaDelegate
)
delegate
,
execution
));
}
else
{
throw
new
ActivitiException
(
"Delegate expression "
+
expression
+
" did not resolve to an implementation of "
+
ExecutionListener
.
class
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/listener/DelegateExpressionTaskListener.java
浏览文件 @
eaa269fe
...
...
@@ -16,6 +16,8 @@ import org.activiti.engine.ActivitiException;
import
org.activiti.engine.delegate.DelegateTask
;
import
org.activiti.engine.delegate.Expression
;
import
org.activiti.engine.delegate.TaskListener
;
import
org.activiti.engine.impl.context.Context
;
import
org.activiti.engine.impl.delegate.TaskListenerInvocation
;
/**
...
...
@@ -35,7 +37,13 @@ public class DelegateExpressionTaskListener implements TaskListener {
Object
delegate
=
expression
.
getValue
(
delegateTask
.
getExecution
());
if
(
delegate
instanceof
TaskListener
)
{
((
TaskListener
)
delegate
).
notify
(
delegateTask
);
try
{
Context
.
getProcessEngineConfiguration
()
.
getDelegateInterceptor
()
.
handleInvocation
(
new
TaskListenerInvocation
((
TaskListener
)
delegate
,
delegateTask
));
}
catch
(
Exception
e
)
{
throw
new
ActivitiException
(
"Exception while invoking TaskListener: "
+
e
.
getMessage
(),
e
);
}
}
else
{
throw
new
ActivitiException
(
"Delegate expression "
+
expression
+
" did not resolve to an implementation of "
+
TaskListener
.
class
);
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/cfg/ProcessEngineConfigurationImpl.java
浏览文件 @
eaa269fe
...
...
@@ -63,6 +63,7 @@ import org.activiti.engine.impl.cfg.standalone.StandaloneMybatisTransactionConte
import
org.activiti.engine.impl.db.DbIdGenerator
;
import
org.activiti.engine.impl.db.DbSqlSessionFactory
;
import
org.activiti.engine.impl.db.IbatisVariableTypeHandler
;
import
org.activiti.engine.impl.delegate.DefaultDelegateInterceptor
;
import
org.activiti.engine.impl.el.ExpressionManager
;
import
org.activiti.engine.impl.form.AbstractFormType
;
import
org.activiti.engine.impl.form.BooleanFormType
;
...
...
@@ -76,6 +77,7 @@ import org.activiti.engine.impl.history.handler.HistoryParseListener;
import
org.activiti.engine.impl.interceptor.CommandContextFactory
;
import
org.activiti.engine.impl.interceptor.CommandExecutor
;
import
org.activiti.engine.impl.interceptor.CommandInterceptor
;
import
org.activiti.engine.impl.interceptor.DelegateInterceptor
;
import
org.activiti.engine.impl.interceptor.SessionFactory
;
import
org.activiti.engine.impl.jobexecutor.JobExecutor
;
import
org.activiti.engine.impl.jobexecutor.JobHandler
;
...
...
@@ -256,6 +258,8 @@ public abstract class ProcessEngineConfigurationImpl extends ProcessEngineConfig
protected
boolean
isDbHistoryUsed
=
true
;
protected
boolean
isDbCycleUsed
=
false
;
protected
DelegateInterceptor
delegateInterceptor
;
// buildProcessEngine ///////////////////////////////////////////////////////
public
ProcessEngine
buildProcessEngine
()
{
...
...
@@ -287,6 +291,7 @@ public abstract class ProcessEngineConfigurationImpl extends ProcessEngineConfig
initSqlSessionFactory
();
initSessionFactories
();
initJpa
();
initDelegateInterceptor
();
}
// command executors ////////////////////////////////////////////////////////
...
...
@@ -783,6 +788,12 @@ public abstract class ProcessEngineConfigurationImpl extends ProcessEngineConfig
}
}
protected
void
initDelegateInterceptor
()
{
if
(
delegateInterceptor
==
null
)
{
delegateInterceptor
=
new
DefaultDelegateInterceptor
();
}
}
// JPA //////////////////////////////////////////////////////////////////////
protected
void
initJpa
()
{
...
...
@@ -1470,5 +1481,14 @@ public abstract class ProcessEngineConfigurationImpl extends ProcessEngineConfig
public
void
setDeploymentCache
(
DeploymentCache
deploymentCache
)
{
this
.
deploymentCache
=
deploymentCache
;
}
public
ProcessEngineConfigurationImpl
setDelegateInterceptor
(
DelegateInterceptor
delegateInterceptor
)
{
this
.
delegateInterceptor
=
delegateInterceptor
;
return
this
;
}
public
DelegateInterceptor
getDelegateInterceptor
()
{
return
delegateInterceptor
;
}
}
\ No newline at end of file
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/ActivityBehaviorInvocation.java
0 → 100644
浏览文件 @
eaa269fe
package
org.activiti.engine.impl.delegate
;
import
org.activiti.engine.impl.pvm.delegate.ActivityBehavior
;
import
org.activiti.engine.impl.pvm.delegate.ActivityExecution
;
/**
*
* @author Daniel Meyer
*/
public
class
ActivityBehaviorInvocation
extends
DelegateInvocation
{
protected
final
ActivityBehavior
behaviorInstance
;
protected
final
ActivityExecution
execution
;
public
ActivityBehaviorInvocation
(
ActivityBehavior
behaviorInstance
,
ActivityExecution
execution
)
{
this
.
behaviorInstance
=
behaviorInstance
;
this
.
execution
=
execution
;
}
protected
void
invoke
()
throws
Exception
{
behaviorInstance
.
execute
(
execution
);
}
}
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/DefaultDelegateInterceptor.java
0 → 100644
浏览文件 @
eaa269fe
package
org.activiti.engine.impl.delegate
;
import
org.activiti.engine.impl.interceptor.DelegateInterceptor
;
/**
* Default implementation, simply proceeding the call.
*
* @author Daniel Meyer
*/
public
class
DefaultDelegateInterceptor
implements
DelegateInterceptor
{
public
void
handleInvocation
(
DelegateInvocation
invocation
)
throws
Exception
{
invocation
.
proceed
();
}
}
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/DelegateInvocation.java
0 → 100644
浏览文件 @
eaa269fe
package
org.activiti.engine.impl.delegate
;
import
org.activiti.engine.impl.interceptor.DelegateInterceptor
;
/**
* Provides context about the invocation of usercode and handles the actual
* invocation
*
* @author Daniel Meyer
* @see DelegateInterceptor
*/
public
abstract
class
DelegateInvocation
{
protected
Object
invocationResult
;
protected
Object
[]
invocationParameters
;
/**
* make the invocation proceed, performing the actual invocation of the user
* code.
*
* @throws Exception
* the exception thrown by the user code
*/
public
void
proceed
()
throws
Exception
{
invoke
();
}
protected
abstract
void
invoke
()
throws
Exception
;
/**
* @return the result of the invocation (can be null if the invocation does
* not return a result)
*/
public
Object
getInvocationResult
()
{
return
invocationResult
;
}
/**
* @return an array of invocation parameters (null if the invocation takes no
* parameters)
*/
public
Object
[]
getInvocationParameters
()
{
return
invocationParameters
;
}
}
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/ExecutionListenerInvocation.java
0 → 100644
浏览文件 @
eaa269fe
package
org.activiti.engine.impl.delegate
;
import
org.activiti.engine.delegate.DelegateExecution
;
import
org.activiti.engine.delegate.ExecutionListener
;
/**
* Class handling invocations of ExecutionListeners
*
* @author Daniel Meyer
*/
public
class
ExecutionListenerInvocation
extends
DelegateInvocation
{
protected
final
ExecutionListener
executionListenerInstance
;
protected
final
DelegateExecution
execution
;
public
ExecutionListenerInvocation
(
ExecutionListener
executionListenerInstance
,
DelegateExecution
execution
)
{
this
.
executionListenerInstance
=
executionListenerInstance
;
this
.
execution
=
execution
;
}
protected
void
invoke
()
throws
Exception
{
executionListenerInstance
.
notify
(
execution
);
}
}
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/ExpressionGetInvocation.java
0 → 100644
浏览文件 @
eaa269fe
package
org.activiti.engine.impl.delegate
;
import
org.activiti.engine.impl.javax.el.ELContext
;
import
org.activiti.engine.impl.javax.el.ValueExpression
;
/**
* Class responsible for handling Expression.getValue invocations
*
* @author Daniel Meyer
*/
public
class
ExpressionGetInvocation
extends
ExpressionInvocation
{
protected
final
ELContext
elContext
;
public
ExpressionGetInvocation
(
ValueExpression
valueExpression
,
ELContext
elContext
)
{
super
(
valueExpression
);
this
.
elContext
=
elContext
;
}
@Override
protected
void
invoke
()
throws
Exception
{
invocationResult
=
valueExpression
.
getValue
(
elContext
);
}
}
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/ExpressionInvocation.java
0 → 100644
浏览文件 @
eaa269fe
package
org.activiti.engine.impl.delegate
;
import
org.activiti.engine.impl.javax.el.ValueExpression
;
/**
* Baseclass responsible for handling invocations of Expressions
*
* @author Daniel Meyer
*/
public
abstract
class
ExpressionInvocation
extends
DelegateInvocation
{
protected
final
ValueExpression
valueExpression
;
public
ExpressionInvocation
(
ValueExpression
valueExpression
)
{
this
.
valueExpression
=
valueExpression
;
}
}
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/ExpressionSetInvocation.java
0 → 100644
浏览文件 @
eaa269fe
package
org.activiti.engine.impl.delegate
;
import
org.activiti.engine.impl.javax.el.ELContext
;
import
org.activiti.engine.impl.javax.el.ValueExpression
;
/**
* Class responsible for handling Expression.setValue() invocations.
*
* @author Daniel Meyer
*/
public
class
ExpressionSetInvocation
extends
ExpressionInvocation
{
protected
final
Object
value
;
protected
ELContext
elContext
;
public
ExpressionSetInvocation
(
ValueExpression
valueExpression
,
ELContext
elContext
,
Object
value
)
{
super
(
valueExpression
);
this
.
value
=
value
;
this
.
elContext
=
elContext
;
this
.
invocationParameters
=
new
Object
[]
{
value
};
}
@Override
protected
void
invoke
()
throws
Exception
{
valueExpression
.
setValue
(
elContext
,
value
);
}
}
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/JavaDelegateInvocation.java
0 → 100644
浏览文件 @
eaa269fe
package
org.activiti.engine.impl.delegate
;
import
org.activiti.engine.delegate.DelegateExecution
;
import
org.activiti.engine.delegate.JavaDelegate
;
/**
* Class handling invocations of JavaDelegates
*
* @author Daniel Meyer
*/
public
class
JavaDelegateInvocation
extends
DelegateInvocation
{
protected
final
JavaDelegate
delegateInstance
;
protected
final
DelegateExecution
execution
;
public
JavaDelegateInvocation
(
JavaDelegate
delegateInstance
,
DelegateExecution
execution
)
{
this
.
delegateInstance
=
delegateInstance
;
this
.
execution
=
execution
;
}
protected
void
invoke
()
throws
Exception
{
delegateInstance
.
execute
((
DelegateExecution
)
execution
);
}
}
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/TaskListenerInvocation.java
0 → 100644
浏览文件 @
eaa269fe
package
org.activiti.engine.impl.delegate
;
import
org.activiti.engine.delegate.DelegateTask
;
import
org.activiti.engine.delegate.TaskListener
;
/**
* Class handling invocations of {@link TaskListener TaskListeners}
*
* @author Daniel Meyer
*/
public
class
TaskListenerInvocation
extends
DelegateInvocation
{
protected
final
TaskListener
executionListenerInstance
;
protected
final
DelegateTask
delegateTask
;
public
TaskListenerInvocation
(
TaskListener
executionListenerInstance
,
DelegateTask
delegateTask
)
{
this
.
executionListenerInstance
=
executionListenerInstance
;
this
.
delegateTask
=
delegateTask
;
}
protected
void
invoke
()
throws
Exception
{
executionListenerInstance
.
notify
(
delegateTask
);
}
}
modules/activiti-engine/src/main/java/org/activiti/engine/impl/delegate/UserCodeInvocation.java
0 → 100644
浏览文件 @
eaa269fe
package
org.activiti.engine.impl.delegate
;
import
org.activiti.engine.impl.interceptor.DelegateInterceptor
;
import
org.activiti.engine.impl.persistence.entity.ExecutionEntity
;
import
org.activiti.engine.runtime.Execution
;
/**
* Provides context about the invocation of usercode and handles the actual
* invocation
*
* @author Daniel Meyer
* @see DelegateInterceptor
*/
public
abstract
class
UserCodeInvocation
{
protected
Object
invocationResult
;
protected
final
ExecutionEntity
execution
;
public
UserCodeInvocation
(
ExecutionEntity
execution
)
{
this
.
execution
=
execution
;
}
/**
* make the invocation proceed, performing the actual invocation of the user
* code.
*
* @throws Exception
* the exception thrown by the user code
*/
public
void
proceed
()
throws
Exception
{
handleInvocation
();
}
protected
abstract
void
handleInvocation
()
throws
Exception
;
/**
* return the result of the invocation
*/
public
Object
getInvocationResult
()
{
return
invocationResult
;
}
/**
* @return the current {@link Execution}
*/
public
ExecutionEntity
getExecution
()
{
return
execution
;
}
}
modules/activiti-engine/src/main/java/org/activiti/engine/impl/el/JuelExpression.java
浏览文件 @
eaa269fe
...
...
@@ -15,6 +15,9 @@ package org.activiti.engine.impl.el;
import
org.activiti.engine.ActivitiException
;
import
org.activiti.engine.delegate.VariableScope
;
import
org.activiti.engine.impl.context.Context
;
import
org.activiti.engine.impl.delegate.ExpressionGetInvocation
;
import
org.activiti.engine.impl.delegate.ExpressionSetInvocation
;
import
org.activiti.engine.impl.javax.el.ELContext
;
import
org.activiti.engine.impl.javax.el.ELException
;
import
org.activiti.engine.impl.javax.el.MethodNotFoundException
;
...
...
@@ -43,19 +46,32 @@ public class JuelExpression implements Expression {
public
Object
getValue
(
VariableScope
variableScope
)
{
ELContext
elContext
=
expressionManager
.
getElContext
(
variableScope
);
try
{
return
valueExpression
.
getValue
(
elContext
);
ExpressionGetInvocation
invocation
=
new
ExpressionGetInvocation
(
valueExpression
,
elContext
);
Context
.
getProcessEngineConfiguration
()
.
getDelegateInterceptor
()
.
handleInvocation
(
invocation
);
return
invocation
.
getInvocationResult
();
}
catch
(
PropertyNotFoundException
pnfe
)
{
throw
new
ActivitiException
(
"Unknown property used in expression"
,
pnfe
);
}
catch
(
MethodNotFoundException
mnfe
)
{
throw
new
ActivitiException
(
"Unknown method used in expression"
,
mnfe
);
}
catch
(
ELException
ele
)
{
throw
new
ActivitiException
(
"Error while evalutaing expression"
,
ele
);
}
catch
(
Exception
e
)
{
throw
new
ActivitiException
(
"Error while evalutaing expression"
,
e
);
}
}
public
void
setValue
(
Object
value
,
VariableScope
variableScope
)
{
ELContext
elContext
=
expressionManager
.
getElContext
(
variableScope
);
valueExpression
.
setValue
(
elContext
,
value
);
try
{
ExpressionSetInvocation
invocation
=
new
ExpressionSetInvocation
(
valueExpression
,
elContext
,
value
);
Context
.
getProcessEngineConfiguration
()
.
getDelegateInterceptor
()
.
handleInvocation
(
invocation
);
}
catch
(
Exception
e
)
{
throw
new
ActivitiException
(
"Error while evalutaing expression"
,
e
);
}
}
@Override
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/interceptor/DelegateInterceptor.java
0 → 100644
浏览文件 @
eaa269fe
package
org.activiti.engine.impl.interceptor
;
import
org.activiti.engine.impl.delegate.DelegateInvocation
;
/**
* Interceptor responsible for handling calls to 'user code'. User code
* represents external Java code (e.g. services and listeners). The following is
* a list of classes that represent user code:
* <ul>
* <li>{@link org.activiti.engine.delegate.JavaDelegate}</li>
* <li>{@link org.activiti.engine.delegate.ExecutionListener}</li>
* <li>{@link org.activiti.engine.delegate.Expression}</li>
* <li>{@link org.activiti.engine.delegate.TaskListener}</li>
* </ul>
*
* The interceptor is passed in an instance of {@link DelegateInvocation}.
* Implementations are responsible for calling
* {@link DelegateInvocation#proceed()} to make the call to the usercode.
*
* @author Daniel Meyer
*/
public
interface
DelegateInterceptor
{
public
void
handleInvocation
(
DelegateInvocation
invocation
)
throws
Exception
;
}
modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/entity/TaskEntity.java
浏览文件 @
eaa269fe
...
...
@@ -31,6 +31,7 @@ import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import
org.activiti.engine.impl.context.Context
;
import
org.activiti.engine.impl.db.DbSqlSession
;
import
org.activiti.engine.impl.db.PersistentObject
;
import
org.activiti.engine.impl.delegate.TaskListenerInvocation
;
import
org.activiti.engine.impl.interceptor.CommandContext
;
import
org.activiti.engine.impl.pvm.delegate.ActivityExecution
;
import
org.activiti.engine.impl.task.TaskDefinition
;
...
...
@@ -504,7 +505,13 @@ public class TaskEntity extends VariableScopeImpl implements Task, DelegateTask,
if
(
execution
!=
null
)
{
setEventName
(
taskEventName
);
}
taskListener
.
notify
(
this
);
try
{
Context
.
getProcessEngineConfiguration
()
.
getDelegateInterceptor
()
.
handleInvocation
(
new
TaskListenerInvocation
(
taskListener
,
(
DelegateTask
)
this
));
}
catch
(
Exception
e
)
{
throw
new
ActivitiException
(
"Exception while invoking TaskListener: "
+
e
.
getMessage
(),
e
);
}
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录