drools在drl中规则怎么调用另一条规则

drools在drl中规则怎么调用另一条规则,第1张

when部分在调用外部方法时要加eval。

你drl中的rule改陆者成:

rule "规则_15"

salience 65521

when

1

eval( IsNow( "* * 4 * * ?"键悉哪))

then

//wode代稿码码

System.out.println(“ok”)

end

有不同的方法来调试Drools项目。在这里,我们将编写一个实用工具类,知道哪些规则正在被冲租和触发或发射。

通过这种方法,可以检查所有的规则都在Drools项目得到触发。这里是我们的工具类

Utility.java

package com.sample

import org.drools.spi.KnowledgeHelper

public class Utility {

public static void help(final KnowledgeHelper drools, final String message){

System.out.println(message)

System.out.println("\nrule triggered: " + drools.getRule().getName())

}

public static void helper(final KnowledgeHelper drools){

System.out.println("\nrule triggered: " + drools.getRule().getName())

}

}

第一种方法帮助打印规则一起,可以通过为String通过DRL文件中的一些额外的信息触发。

第二条规则助手打印特定的规则是否被触发。

我们增加了在每个散盯DRL文件中的实用方法之一。我们在DRL文件(Pune.drl)还增加了导型带入函数。在当时的部分规则,我们已经加入了效用函数调用。下面修改Pune.drl。改变以蓝色显示。

Modified Pune.drl

//created on: Dec 24, 2014

package droolsexample

//list any import classes here.

import com.sample.ItemCity

import java.math.BigDecimal

import com.sample.HelloCity

import function com.sample.Utility.helper

// declare any global variables here

dialect "java"

rule "Pune Medicine Item"

when

item : ItemCity(purchaseCity == ItemCity.City.PUNE,

typeofItem == ItemCity.Type.MEDICINES)

then

BigDecimal tax = new BigDecimal(0.0)

item.setLocalTax(tax.multiply(item.getSellPrice()))

HelloCity.writeHello(item.getPurchaseCity().toString())

helper(drools)

end

rule "Pune Groceries Item"

when

item : ItemCity(purchaseCity == ItemCity.City.PUNE,

typeofItem == ItemCity.Type.GROCERIES)

then

BigDecimal tax = new BigDecimal(2.0)

item.setLocalTax(tax.multiply(item.getSellPrice()))

helper(drools)

end

同样地,我们已经添加在第二个DRL文件(Nagpur.drl)其他效用函数。这里是修改后的代码:

修改后的 Nagpur.drl

// created on: Dec 26, 2014

package droolsexample

// list any import classes here.

import com.sample.ItemCity

import java.math.BigDecimal

import function com.sample.Utility.help

//declare any global variables here

dialect "java"

rule "Nagpur Medicine Item"

when

item : ItemCity(purchaseCity == ItemCity.City.NAGPUR,

typeofItem == ItemCity.Type.MEDICINES)

then

BigDecimal tax = new BigDecimal(0.0)

item.setLocalTax(tax.multiply(item.getSellPrice()))

help(drools,"added info")

end

rule "Nagpur Groceries Item"

when

item : ItemCity(purchaseCity == ItemCity.City.NAGPUR,

typeofItem == ItemCity.Type.GROCERIES)

then

BigDecimal tax = new BigDecimal(1.0)

item.setLocalTax(tax.multiply(item.getSellPrice()))

help(drools,"info")

end

再次运行程序,它应该产生以下的输出:

info

rule triggered: Nagpur Groceries Item

added info

rule triggered: Nagpur Medicine Item

rule triggered: Pune Groceries Item

HELLO PUNE!!!!!!

rule triggered: Pune Medicine Item

PUNE 0

PUNE 20

NAGPUR 0

NAGPUR 10

这两个工具函数被调用,它显示了特定规则是否被调用与否。在上述的例子中,所有的规则都被调用,但在企业应用程序中,该实用程序函数可以是真正有用的调试,并找出一个特定规则是否被触发或没有。

使用Debug透视图在Eclipse

可以将Drools的应用程序的执行过程中调试规则。可以在规则的后果添加断点,每当这样的断点的规则的执行过程中遇到,执行暂时停止。然后,可以检查该点调用Java应用程序,并使用在Eclipse提供正常的调试选项。

创建DRL文件断点,只需双击创建一个断点行。记住,只能在当时的部分规则的创建一个断点。断点可以通过双击在DRL编辑器中的断点被删除。

采用断点后,需要将应用程序作为Drools的应用程序进行调试。 Drools的断点(以DRL文件的断点),如果应用程序正在调试的Drools的应用程序将只工作。这里是如何需要做的是相同的:

调试应用程序作为Drools的应用程序,会看到如图所示的下面的截图DRL文件中的控制:

可以在该调试点看到的变量和所述对象的当前值。同一控制F6移动到下一行和F8跳转到下一个调试点也适用在这里。通过这种方式,可以调试Drools的应用程序。

注:在Drools中的应用调试的角度来看只有当方言是MVEL直到Drools5.x


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12451391.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存