0

我正在使用 drools 6.5.0.Final 创建我的 drools 项目。我正在尝试在工作台中使用引导决策表 (.gdst)。我想在规则的 WHEN 和 THEN 部分中使用一些 java 代码,就像在.drl文件中允许的那样,如下所示:

rule "filter rule"
when
    //conditions
    $Cp : CpClass( name == "Tom",
                    Math.abs(score) > 10
                &&
                    // How do I use functions like below?
                    ($Cp.parseTime(CurrTime).getTime() - 
                        $Cp.parseTime(PrevTime).getTime())/1000 > 120
                )
then
    //actions
    System.out.println("Rule passed for : "+ $Cp.toString());
    $Cp.isGoodCp = true;
end

上例中使用的对象:

public class CpClass {

    public String name;
    public String currTime;
    public String prevTime;
    public boolean isGoodCp = false;

    // Function to parse string to date
    public Date parseTime(String time) {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        Date parsedDate = null;
        try {
            if(time != null)
                parsedDate = sdf.parse(time.substring(11));
            else 
                parsedDate = sdf.parse("00:00:00");
        } catch (Exception e) {
            System.out.println("Error parsing:"+e);
        }
        return parsedDate;
    }
}

有没有办法像我在引导决策表中使用的用户定义/内置 java 函数?

4

1 回答 1

0

有没有办法像我在引导决策表中使用的用户定义/内置 java 函数?

是的,在所有规则中。他们的关键是向他们提供代码。

KIE WorkBench 和 KIE Execution Server 都使用 Maven 构建工具进行依赖管理;因此,答案是 Maven 配置和使用。[0]

基本上,将补充代码构建到 jar 中并将其部署到 KWB 和 KES 可用的远程 Maven 存储库。如何构建、打包并将 jar 部署到远程存储库是您的选择;通常使用 Maven 或 Gradle。这是在 KWB 外部完成的。

然后,编辑 KWB 项目的 pom.xml 文件,添加 jar 依赖项。KWB“项目编辑器”具有添加依赖项的功能,或者您可以手动添加它[1]。

KWB 项目编辑器没有添加部分的 UI 功能,因此更改为 cog 设置图标上的“存储库视图”并直接编辑 pom.xml 文件 [2]。此外,如果使用带有凭据的远程 Maven 存储库,请为每个 Maven 插件页面配置 settings.xml 以供 KWB 访问它。

现在 jar 的内容可用于任何 Drools 代码的规则使用。

[0] http://maven.apache.org/guides/index.html

[1] https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management

[2] http://maven.apache.org/plugins/maven-deploy-plugin/usage.html

于 2017-03-01T17:09:41.347 回答