Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
开发团队
Flowable Engine
提交
4d0c628b
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,发现更多精彩内容 >>
提交
4d0c628b
编写于
1月 17, 2012
作者:
F
falko.menge
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Continued implementation of ACT-1021 (Trigger BPMN Error Events from Java Delegate)
上级
f8a7396f
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
252 addition
and
18 deletion
+252
-18
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/event/BpmnError.java
...n/java/org/activiti/engine/impl/bpmn/event/BpmnError.java
+6
-0
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/helper/ClassDelegate.java
...a/org/activiti/engine/impl/bpmn/helper/ClassDelegate.java
+33
-14
modules/activiti-engine/src/test/java/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.java
.../engine/test/bpmn/event/error/BoundaryErrorEventTest.java
+45
-3
modules/activiti-engine/src/test/resources/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnCallActivity-child.bpmn20.xml
...hErrorThrownByJavaDelegateOnCallActivity-child.bpmn20.xml
+20
-0
modules/activiti-engine/src/test/resources/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnCallActivity-parent.bpmn20.xml
...ErrorThrownByJavaDelegateOnCallActivity-parent.bpmn20.xml
+26
-0
modules/activiti-engine/src/test/resources/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnEmbeddedSubProcess.bpmn20.xml
...hErrorThrownByJavaDelegateOnEmbeddedSubProcess.bpmn20.xml
+31
-0
modules/activiti-engine/src/test/resources/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnEmbeddedSubProcessInduction.bpmn20.xml
...ownByJavaDelegateOnEmbeddedSubProcessInduction.bpmn20.xml
+35
-0
modules/activiti-engine/src/test/resources/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnServiceTask.bpmn20.xml
...estCatchErrorThrownByJavaDelegateOnServiceTask.bpmn20.xml
+1
-1
modules/activiti-engine/src/test/resources/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnServiceTaskWithErrorCode.bpmn20.xml
...ThrownByJavaDelegateOnServiceTaskWithErrorCode.bpmn20.xml
+35
-0
modules/activiti-engine/src/test/resources/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testUncaughtErrorThrownByJavaDelegateOnCallActivity-parent.bpmn20.xml
...ErrorThrownByJavaDelegateOnCallActivity-parent.bpmn20.xml
+20
-0
未找到文件。
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/event/BpmnError.java
浏览文件 @
4d0c628b
...
...
@@ -39,6 +39,12 @@ public class BpmnError extends ActivitiException {
public
BpmnError
(
String
errorCode
,
String
message
)
{
super
(
message
);
if
(
errorCode
==
null
)
{
throw
new
ActivitiException
(
"Error Code must not be null."
);
}
if
(
errorCode
.
length
()
<
1
)
{
throw
new
ActivitiException
(
"Error Code must not be empty."
);
}
this
.
errorCode
=
errorCode
;
}
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/helper/ClassDelegate.java
浏览文件 @
4d0c628b
...
...
@@ -34,6 +34,7 @@ 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.PvmActivity
;
import
org.activiti.engine.impl.pvm.PvmScope
;
import
org.activiti.engine.impl.pvm.delegate.ActivityBehavior
;
import
org.activiti.engine.impl.pvm.delegate.ActivityExecution
;
import
org.activiti.engine.impl.pvm.delegate.SignallableActivityBehavior
;
...
...
@@ -120,25 +121,43 @@ public class ClassDelegate extends AbstractBpmnActivityBehavior implements TaskL
}
catch
(
BpmnError
error
)
{
// find error handler
PvmActivity
errorEventHandler
=
null
;
for
(
PvmActivity
activity
:
execution
.
getActivity
().
getActivities
())
{
if
(((
ActivityImpl
)
activity
).
getActivityBehavior
()
instanceof
BoundaryEventActivityBehavior
)
{
// TODO check error code of error handler
errorEventHandler
=
activity
;
break
;
// search for error handler with same error code as thrown Error
PvmScope
scope
=
execution
.
getActivity
();
while
(
errorEventHandler
==
null
&&
scope
!=
null
)
{
for
(
PvmActivity
activity
:
scope
.
getActivities
())
{
if
(((
ActivityImpl
)
activity
).
getActivityBehavior
()
instanceof
BoundaryEventActivityBehavior
&&
error
.
getErrorCode
().
equals
(
activity
.
getProperty
(
"errorCode"
)))
{
errorEventHandler
=
activity
;
break
;
}
}
// search for generic error handler if no error handler with that error code has been found
if
(
errorEventHandler
==
null
)
{
for
(
PvmActivity
activity
:
scope
.
getActivities
())
{
if
(((
ActivityImpl
)
activity
).
getActivityBehavior
()
instanceof
BoundaryEventActivityBehavior
&&
(
activity
.
getProperty
(
"errorCode"
)
==
null
||
""
.
equals
(
activity
.
getProperty
(
"errorCode"
))))
{
errorEventHandler
=
activity
;
break
;
}
}
}
// search for error handlers in parent scopes
if
(
errorEventHandler
==
null
)
{
if
(
scope
instanceof
PvmActivity
)
{
scope
=
((
PvmActivity
)
scope
).
getParent
();
}
else
{
scope
=
null
;
// stop search
}
}
}
// TODO search for error handlers in parent scopes
ErrorEndEventActivityBehavior
errorEndEvent
=
new
ErrorEndEventActivityBehavior
(
error
.
getErrorCode
());
if
(
errorEventHandler
!=
null
)
{
// continue execution
ErrorEndEventActivityBehavior
errorEndEvent
=
new
ErrorEndEventActivityBehavior
(
error
.
getErrorCode
());
errorEndEvent
.
setBorderEventActivityId
(
errorEventHandler
.
getId
());
errorEndEvent
.
execute
(
execution
);
// execution.executeActivity(errorEventHandler);
}
else
{
// throw error up
throw
error
;
}
// continue execution
errorEndEvent
.
execute
(
execution
);
}
}
...
...
modules/activiti-engine/src/test/java/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.java
浏览文件 @
4d0c628b
...
...
@@ -242,8 +242,50 @@ public class BoundaryErrorEventTest extends PluggableActivitiTestCase {
@Deployment
public
void
testCatchErrorThrownByJavaDelegateOnServiceTask
()
{
String
procId
=
runtimeService
.
startProcessInstanceByKey
(
"catchErrorThrownByJavaDelegateOnServiceTask"
).
getId
();
// The service task will throw and error event,
assertThatErrorHasBeenCaught
(
procId
);
}
@Deployment
public
void
testCatchErrorThrownByJavaDelegateOnServiceTaskWithErrorCode
()
{
String
procId
=
runtimeService
.
startProcessInstanceByKey
(
"catchErrorThrownByJavaDelegateOnServiceTaskWithErrorCode"
).
getId
();
assertThatErrorHasBeenCaught
(
procId
);
}
@Deployment
public
void
testCatchErrorThrownByJavaDelegateOnEmbeddedSubProcess
()
{
String
procId
=
runtimeService
.
startProcessInstanceByKey
(
"catchErrorThrownByJavaDelegateOnEmbeddedSubProcess"
).
getId
();
assertThatErrorHasBeenCaught
(
procId
);
}
@Deployment
public
void
testCatchErrorThrownByJavaDelegateOnEmbeddedSubProcessInduction
()
{
String
procId
=
runtimeService
.
startProcessInstanceByKey
(
"catchErrorThrownByJavaDelegateOnEmbeddedSubProcessInduction"
).
getId
();
assertThatErrorHasBeenCaught
(
procId
);
}
@Deployment
(
resources
=
{
"org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnCallActivity-parent.bpmn20.xml"
,
"org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnCallActivity-child.bpmn20.xml"
})
public
void
testCatchErrorThrownByJavaDelegateOnCallActivity
()
{
String
procId
=
runtimeService
.
startProcessInstanceByKey
(
"catchErrorThrownByJavaDelegateOnCallActivity-parent"
).
getId
();
assertThatErrorHasBeenCaught
(
procId
);
}
@Deployment
(
resources
=
{
"org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testUncaughtErrorThrownByJavaDelegateOnCallActivity-parent.bpmn20.xml"
,
"org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnCallActivity-child.bpmn20.xml"
})
public
void
testUncaughtErrorThrownByJavaDelegateOnCallActivity
()
{
try
{
runtimeService
.
startProcessInstanceByKey
(
"uncaughtErrorThrownByJavaDelegateOnCallActivity-parent"
);
}
catch
(
ActivitiException
e
)
{
assertTextPresent
(
"No catching boundary event found for error with errorCode '23', neither in same process nor in parent process"
,
e
.
getMessage
());
}
}
private
void
assertThatErrorHasBeenCaught
(
String
procId
)
{
// The service task will throw an error event,
// which is caught on the service task boundary
assertEquals
(
"No tasks found in task list."
,
1
,
taskService
.
createTaskQuery
().
count
());
Task
task
=
taskService
.
createTaskQuery
().
singleResult
();
...
...
@@ -253,5 +295,5 @@ public class BoundaryErrorEventTest extends PluggableActivitiTestCase {
taskService
.
complete
(
task
.
getId
());
assertProcessEnded
(
procId
);
}
}
modules/activiti-engine/src/test/resources/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnCallActivity-child.bpmn20.xml
0 → 100644
浏览文件 @
4d0c628b
<?xml version="1.0" encoding="UTF-8"?>
<definitions
id=
"definitions"
xmlns=
"http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti=
"http://activiti.org/bpmn"
targetNamespace=
"Examples"
>
<process
id=
"catchErrorThrownByJavaDelegateOnCallActivity-child"
>
<startEvent
id=
"theStart"
/>
<sequenceFlow
id=
"flow1"
sourceRef=
"theStart"
targetRef=
"serviceTask"
/>
<serviceTask
id=
"serviceTask"
activiti:class=
"org.activiti.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate"
/>
<sequenceFlow
id=
"flow4"
sourceRef=
"serviceTask"
targetRef=
"theEnd"
/>
<endEvent
id=
"theEnd"
/>
</process>
</definitions>
\ No newline at end of file
modules/activiti-engine/src/test/resources/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnCallActivity-parent.bpmn20.xml
0 → 100644
浏览文件 @
4d0c628b
<?xml version="1.0" encoding="UTF-8"?>
<definitions
id=
"definitions"
xmlns=
"http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti=
"http://activiti.org/bpmn"
targetNamespace=
"Examples"
>
<process
id=
"catchErrorThrownByJavaDelegateOnCallActivity-parent"
>
<startEvent
id=
"theStart"
/>
<sequenceFlow
id=
"flow1"
sourceRef=
"theStart"
targetRef=
"callSubProcess"
/>
<callActivity
id=
"callSubProcess"
calledElement=
"catchErrorThrownByJavaDelegateOnCallActivity-child"
/>
<boundaryEvent
id=
"catchError"
attachedToRef=
"callSubProcess"
>
<errorEventDefinition
/>
</boundaryEvent>
<sequenceFlow
id=
"flow3"
sourceRef=
"catchError"
targetRef=
"escalatedTask"
/>
<userTask
id=
"escalatedTask"
name=
"Escalated Task"
/>
<sequenceFlow
id=
"flow4"
sourceRef=
"callSubProcess"
targetRef=
"theEnd"
/>
<endEvent
id=
"theEnd"
/>
</process>
</definitions>
\ No newline at end of file
modules/activiti-engine/src/test/resources/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnEmbeddedSubProcess.bpmn20.xml
0 → 100644
浏览文件 @
4d0c628b
<?xml version="1.0" encoding="UTF-8"?>
<definitions
id=
"definitions"
xmlns=
"http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti=
"http://activiti.org/bpmn"
targetNamespace=
"Examples"
>
<process
id=
"catchErrorThrownByJavaDelegateOnEmbeddedSubProcess"
>
<startEvent
id=
"theStart"
/>
<sequenceFlow
id=
"flow1"
sourceRef=
"theStart"
targetRef=
"subProcess"
/>
<subProcess
id=
"subProcess"
>
<startEvent
id=
"subProcessStart"
/>
<sequenceFlow
id=
"flow2"
sourceRef=
"subProcessStart"
targetRef=
"serviceTask"
/>
<serviceTask
id=
"serviceTask"
activiti:class=
"org.activiti.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate"
/>
</subProcess>
<boundaryEvent
id=
"catchError"
attachedToRef=
"subProcess"
>
<errorEventDefinition
/>
</boundaryEvent>
<sequenceFlow
id=
"flow3"
sourceRef=
"catchError"
targetRef=
"escalatedTask"
/>
<userTask
id=
"escalatedTask"
name=
"Escalated Task"
/>
<sequenceFlow
id=
"flow4"
sourceRef=
"subProcess"
targetRef=
"theEnd"
/>
<endEvent
id=
"theEnd"
/>
</process>
</definitions>
\ No newline at end of file
modules/activiti-engine/src/test/resources/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnEmbeddedSubProcessInduction.bpmn20.xml
0 → 100644
浏览文件 @
4d0c628b
<?xml version="1.0" encoding="UTF-8"?>
<definitions
id=
"definitions"
xmlns=
"http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti=
"http://activiti.org/bpmn"
targetNamespace=
"Examples"
>
<process
id=
"catchErrorThrownByJavaDelegateOnEmbeddedSubProcessInduction"
>
<startEvent
id=
"theStart"
/>
<sequenceFlow
id=
"flow1"
sourceRef=
"theStart"
targetRef=
"subProcess"
/>
<subProcess
id=
"subProcess"
>
<startEvent
id=
"subProcessStart"
/>
<sequenceFlow
id=
"flow2"
sourceRef=
"subProcessStart"
targetRef=
"subProcess1"
/>
<subProcess
id=
"subProcess1"
>
<startEvent
id=
"subProcess1Start"
/>
<sequenceFlow
id=
"flow5"
sourceRef=
"subProcess1Start"
targetRef=
"serviceTask"
/>
<serviceTask
id=
"serviceTask"
activiti:class=
"org.activiti.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate"
/>
</subProcess>
</subProcess>
<boundaryEvent
id=
"catchError"
attachedToRef=
"subProcess"
>
<errorEventDefinition
/>
</boundaryEvent>
<sequenceFlow
id=
"flow3"
sourceRef=
"catchError"
targetRef=
"escalatedTask"
/>
<userTask
id=
"escalatedTask"
name=
"Escalated Task"
/>
<sequenceFlow
id=
"flow4"
sourceRef=
"subProcess"
targetRef=
"theEnd"
/>
<endEvent
id=
"theEnd"
/>
</process>
</definitions>
\ No newline at end of file
modules/activiti-engine/src/test/resources/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnServiceTask.bpmn20.xml
浏览文件 @
4d0c628b
...
...
@@ -12,7 +12,7 @@
<serviceTask
id=
"serviceTask"
activiti:class=
"org.activiti.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate"
/>
<boundaryEvent
id=
"catchError"
attachedToRef=
"serviceTask"
>
<errorEventDefinition
errorRef=
"myError"
/>
<errorEventDefinition
/>
</boundaryEvent>
<sequenceFlow
id=
"flow3"
sourceRef=
"catchError"
targetRef=
"escalatedTask"
/>
...
...
modules/activiti-engine/src/test/resources/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorThrownByJavaDelegateOnServiceTaskWithErrorCode.bpmn20.xml
0 → 100644
浏览文件 @
4d0c628b
<?xml version="1.0" encoding="UTF-8"?>
<definitions
id=
"definitions"
xmlns=
"http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti=
"http://activiti.org/bpmn"
targetNamespace=
"Examples"
>
<error
id=
"error42"
errorCode=
"42"
/>
<error
id=
"error23"
errorCode=
"23"
/>
<process
id=
"catchErrorThrownByJavaDelegateOnServiceTaskWithErrorCode"
>
<startEvent
id=
"theStart"
/>
<sequenceFlow
id=
"flow1"
sourceRef=
"theStart"
targetRef=
"serviceTask"
/>
<serviceTask
id=
"serviceTask"
activiti:class=
"org.activiti.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate"
/>
<boundaryEvent
id=
"ignoreError42"
attachedToRef=
"serviceTask"
>
<errorEventDefinition
errorRef=
"error42"
/>
</boundaryEvent>
<boundaryEvent
id=
"catchError"
attachedToRef=
"serviceTask"
>
<errorEventDefinition
errorRef=
"error23"
/>
</boundaryEvent>
<sequenceFlow
id=
"flow3"
sourceRef=
"catchError"
targetRef=
"escalatedTask"
/>
<userTask
id=
"escalatedTask"
name=
"Escalated Task"
/>
<sequenceFlow
id=
"flow4"
sourceRef=
"serviceTask"
targetRef=
"theEnd"
/>
<sequenceFlow
id=
"flow5"
sourceRef=
"ignoreError42"
targetRef=
"theEnd"
/>
<endEvent
id=
"theEnd"
/>
</process>
</definitions>
\ No newline at end of file
modules/activiti-engine/src/test/resources/org/activiti/engine/test/bpmn/event/error/BoundaryErrorEventTest.testUncaughtErrorThrownByJavaDelegateOnCallActivity-parent.bpmn20.xml
0 → 100644
浏览文件 @
4d0c628b
<?xml version="1.0" encoding="UTF-8"?>
<definitions
id=
"definitions"
xmlns=
"http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti=
"http://activiti.org/bpmn"
targetNamespace=
"Examples"
>
<process
id=
"uncaughtErrorThrownByJavaDelegateOnCallActivity-parent"
>
<startEvent
id=
"theStart"
/>
<sequenceFlow
id=
"flow1"
sourceRef=
"theStart"
targetRef=
"callSubProcess"
/>
<callActivity
id=
"callSubProcess"
calledElement=
"catchErrorThrownByJavaDelegateOnCallActivity-child"
/>
<sequenceFlow
id=
"flow4"
sourceRef=
"callSubProcess"
targetRef=
"theEnd"
/>
<endEvent
id=
"theEnd"
/>
</process>
</definitions>
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录