exception-handler 异常处理
jbpm异常可以定义相应的处理类exception-handler
exception-handler有可见域,流程(process-instance内定义的exception-handler在整个流程内的每个节点可见)
在节点内定义的exception-handler的作用于在节点内部,会覆盖全局的exception-handler的作用域
jbpm异常主要是执行绑定到节点上的action或其他操作(委托类)时抛出的,流程流转控制本身一般不会出问题
可以为每种类型的异常定义异常处理列表
注意,Jbpm的异常处理机制与java异常处理不完全相似。在java中,一个捕获的异常可以影响控制流,而在Jbpm中,流程不会被Jbpm异常处理机制所改变。异常要么被捕获,要么不捕获,没有被捕获的异常被抛向客户端(例如客户端调用token.signal()),而被捕获的异常则是通过Jbpm的exception-handler,对于被捕获的异常,图执行仍会继续,就像没有异常发生一样。 在处理异常的动作中,可以使用Token.setNode(Node node)把令牌放入图中的任何节点。
<?xml version="1.0" encoding="UTF-8"?>
<process-definition
xmlns="urn:jbpm.org:jpdl-3.1" name="test">
<!—这里的exception-handler对整个processInstance起作用-->
<exception-handler>
<action class="gj.action.ProcessException"/>
</exception-handler>
<start-state name="start">
<transition name="to state" to="state1"></transition>
</start-state>
<state name="state1">
<event type="node-leave">
<action name="enter node action" class="gj.action.EnterStateNodeAction"></action>
</event>
<transition name="to end" to="end1">
<action name="action1" class="gj.action.ProcessStateAction"></action>
</transition>
</state>
<end-state name="end1"></end-state>
</process-definition>
ProcessException类的代码如下:
package gj.action;
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;
public class ProcessException implements ActionHandler{
public void execute(ExecutionContext executionContext) throws Exception {
String errorMsg=executionContext.getException().getMessage();
System.out.println("异常类型"+executionContext.getException().toString()+" 异常消息:"+errorMsg);
}
}
这个类就可以用来处理整个ProcessInstance中发生的异常。其它在各种类型node里和在transition里定义的exception-handler的处理方式类似,只不过其作用范围仅限制为当前的node或transition。
小结
看到这里,我们已经对JPDL的流程定义语言有了较深的理解,接下来我们可以自己动手写一些流程定义的文件,以此加深对JPDL的理解。我们来看一下下面的流程定义文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="" name="test">
<!—定义一个开始结点,名为start,指向fork1-->
<start-state name="start">
<transition name="" to="fork1"></transition>
</start-state>
<!—在fork1分支结点上,我们定义了两个走向(transition)tr1和tr2,其中tr1指向top-state节点,tr2指向一个process-state,当token到达for1时会自动形成两个child token,沿着tr1和tr2的指向继续向执行-->
<fork name="fork1">
<transition name="tr1" to="top-state"></transition>
<transition name="tr2" to="test-sub-process"></transition>
</fork>
<!—top-state是一个state类型的节点,也就是前面提到的手工节点-->
<state name="top-state">
<transition name="to test-task" to="test-task"></transition>
</state>
<!—test-task是一个task-node类型的节点,它可以有多个task节点,生成我们的taskInstance,这里我们定义了三个节点-->
<task-node name="test-task" signal="first">
<task name="task-a"></task>
<task name="task-b"></task>
分享到:
相关推荐
`Laravel开发-enhanced-exception-handler` 涉及的是对默认Laravel异常处理器的扩展和优化,以提供更丰富的错误信息、更好的用户体验以及更强大的日志记录功能。下面我们将详细探讨这个主题。 1. **异常处理基础** ...
`laravel-jsonaware-exception-handler`着重关注的是如何优雅地处理JSON响应中的异常,尤其对于API开发来说至关重要。在这个压缩包中,我们可能会看到与之相关的源代码、示例和文档,用于理解和实现自定义的JSON感知...
spring-rest-exception-handler, 一个方便的RESTful api Spring MVC 异常 spring REST异常处理程序 这个项目的目的是为for提供一个方便的异常处理程序( 解析器),它满足了错误响应的最佳实践。 处理自定义异常。...
在`laravel-jsonaware-exception-handler-master`这个压缩包中,你可能会找到以下内容: - 自定义的`ExceptionHandler`类,扩展了Laravel的基础`ExceptionHandler`。 - 示例配置文件,用于配置异常处理的行为。 - ...
git clone https://github.com/master-atul/react-native-exception-handler-example yarn install react-native run-ios --configuration Release或react-native run-android --variant=release 即使在开发模式...
python-pb10_exception_handler.rar
React本机异常处理程序 ... 该模块有助于防止RN Apps突然崩溃,而不会向用户显示优美的消息。 在当前情况下: In DEV mode , you get a RED Screen error pointing your errors. In Bundled mode , the app just ...
composer require nordsoftware/lumen-chained-exception-handler 用法 将$app->singleton()调用替换为以下内容,该调用将在bootstrap/app.php注册具体异常处理程序: $ app -> instance ( Illuminate \ ...
为了使用这个插件,开发者首先需要将`sentry-exception-handler-master`解压,然后根据`README.md`中的指示进行配置和安装。在Reekoh IoT平台中启用插件后,所有在平台上的JavaScript应用都将受益于Sentry的异常监控...
在`exception-handler-master`这个压缩包中,可能包含了一个自定义的`ExceptionHandler`实现,或者是一些示例代码,帮助开发者了解如何在Laravel项目中自定义异常处理。解压并研究这个项目,可以帮助你更好地理解...
异常处理程序介质 本文示例的Spring Boot应用程序: 要求 为了构建和运行应用程序,您需要: 为您的IDE下载Lombok插件。... 确保您有一个名为“ exception”MySQL数据库。 从项目根目录运行: mvn spring-boot:run
springBoot-errorException处理程序
2. **自定义异常类**:在处理Sitecore特定错误时,可能会创建自定义异常类,这些类继承自C#的基础异常类,如`Exception`或其子类。这样做可以提供更详细的错误信息,并使异常处理更加精确。 3. **事件订阅**:...
【压缩包子文件的文件名称列表】"spring-restful-exception-handler-master" 暗示了压缩包解压后的主要目录结构,通常在GitHub等代码托管平台上,"master"分支的代码会被命名为"master"目录,包含了项目的源代码、...
"Laravel开发-laravel-exception-logger"项目旨在提供一个跨Laravel应用程序的统一异常日志记录系统,使得开发者可以更有效地追踪、管理和分析应用中的错误。 1. **异常处理**: - Laravel中的异常处理机制遵循PSR...
2. **配置**:根据项目文档配置新的异常处理器,可能需要修改 `config/app.php` 中的 `exception_handler` 选项。 3. **编写自定义逻辑**:根据需求,你可以扩展或替换 `Handler` 类中的 `report` 和 `render` 方法...
例如,对于特定类型的异常,你可以创建一个新的`Exception`类,然后在`Handler`中注册它。 3. **日志系统**:Laravel内置了强大的日志组件,可以配置不同的日志驱动(如文件、数据库、邮件等)。`laravel-exception...
在`laravel-exception-email-notification-master`压缩包中,可能包含了实现上述功能的源代码,包括`Handler`类的扩展、Mailable类、事件监听器等。通过分析这些文件,你可以更深入地理解如何在Laravel项目中集成...
然而,这种基础机制往往不足以满足复杂应用的需求,因此,"xser_exception_handler"应运而生,旨在提供更加灵活和可扩展的解决方案。 该框架的核心思想是创建一个自定义的异常处理器类,它继承自PHP的`Exception`类...
在 operator new 因回应一个无法满足的内存请求而抛出一个 exception 之前,它先调用一个可以由客户指定的被称为 new-handler 的 error-handling function(错误处理函数)。(这并不完全确切,operator new 真正...