Drools 5.1.1_DOC (55)
Drools 5.1.1_DOC_Drools Flow
这 部分介绍如何调试流程。这意味着在流程执行期间,可以检查和可视化你的运行流程的当前状态。注意,我们当前不允许你直接在一个规则流 RuleFlow 内部的节点上设置断点。然而,你可以在规则(如果你使用了一个规则集 ruleset 节点,在一个流程的上下文中可能被计算的规则)内部,或在你可以有的任何Java代码上(即,被引擎正调用的或已经被引擎、侦听器等等调用的你的应用程序 代码)设置断点。然后,在这些断点处,你可以检查你的流程的内部状态。
在这儿[http://downloads.jboss.com/drools/videos/OrderExample.swf],一个截屏显示了在行动中的流程调试。
整个这部分我们使用了一个简单的例子解释调试功能。首先会介绍这个例子,接跟着解释如何使用调试功能。
我们的例子包含两个流程和一些规则(在规则组 ruleflow groups内部使用的):
1. 主流程包含一些最普通的节点:开始和结束节点(显然),两个规则流组ruleflow groups,一个动作(简单地打印一个字符串到默认输出流),一个里程碑milestone(当一个特定事件被插入到工作内存时,触发的一个等待状态) 和一个子流程 subprocess。

2. SubProcess只包含了一个里程碑—— 也等待(另一个)在工作内存中的特定事件。
3. 只有两个规则(一个用于一个规则流组)——简单地打印输出hello单词或goodbye单词到默认输出。
我们会通过启动该流程,引发所有规则(导致hello规则的执行),然后为两个里程碑(在主流程和子流程中的)添加特定 milestone 事件,最后再次引发所有规则(导致goodby规则的执行),模拟这个流程的执行。控制台的东西看起来象这样:
Hello World Executing action Goodbye cruel world
现在,我们在该流程的执行期间添加四个断点(依次会遭遇它们):
-
在hello规则的推论的开始处。
-
在插入在主流程中的里程碑的触发事件之前。
-
在插入在子流程中的里程碑的触发事件之前。
-
在goodbye规则的推论的开始处。
在调试应用程序时,可以用下列调试视图之一追踪该流程的执行:
-
working memory view,显示在工作内存中的内容(数据)。
-
agenda view,显示在议程中的所有激活。
-
global data view,显示全局变量。
-
默认Java Debug views,显示当前行和已知变量的值,无论是对正常Java代码还是对规则。
-
process instances view,显示所有运行的流程(和它们的数据)。
-
audit view,显示审计日志。
11.2.1. Process Instances View
流程实例视图显示当前运行的流程实例。该例子显示当前有一个运行的流程(实例),当前执行的一个节点(实例),即RuleSetnode。当双击一个流程实例,流程实例视图将图形化显示该流程实例的进展。在每个断点处, 看上去像这样:
1. 在hello规则的推论的开始处,只有hello规则流组被激活,等待hello规则的执行:
2. 一旦规则被执行,动作、里程碑和子流程(action,milestone和subprocess)会被触发。动作会被立即执行,触发联合join(其只 会等待,直到所有输入连接都被触发)。子流程在里程碑处等待。所以,在插入在主流程中的里程碑的触发事件之前,现在有两个流程实例,看上去像这样:

3. 当触发在主流程中的里程碑的事件时,它也将触发联合join(其只会等待,直到所有输入连接都被触发)。所以,在这点处(在子流程中的里程碑的触发事件之前),流程看上去像这样:


3. 当触发在子流程中的里程碑的触发事件时,这个流程实例会被完成,并且也会触发联合join,然后其才会被继续,并触发goodbye规则流组,因为联合 join的所有输入连接都已经被触发。引发所有规则将触发在goodbye规则中的断点。在这点处,情况看上去像这样:
5. 在执行goodbye规则后,主流程也会被完成,并且执行将达到了结束end。
为此谁都想查看在审计视图中的结果。 这将看像这样[注意:对象插入事件(object insertion events)似乎看起来很不自然,这是由于事实被插入后(绝不能在前)才被记录所致,所以很难精确地找准自己的位置。]



浙公网安备 33010602011771号