当前位置: 首页 > 知识库问答 >
问题:

在Eclipse中开始Drools 6.0.0 Final时获得NPE

郗鹏
2023-03-14

入门(没有Maven)我首先在html" target="_blank">eclipse中安装了GEF和Drools 6.0.0最终插件。然后我创建了一个Drools项目,它生成了下面的两个文件。

口水est.java

package com.sample;

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
/**
 * This is a sample class to launch a rule.
 */

public class DroolsTest {
public static final void main(String[] args) {
    try {
        // load up the knowledge base
        KieServices ks = KieServices.Factory.get();
        KieContainer kContainer = ks.getKieClasspathContainer();
        KieSession kSession = kContainer.newKieSession("ksession-rules");

        // go !
        Message message = new Message();
        message.setMessage("Hello World");
        message.setStatus(Message.HELLO);
        kSession.insert(message);
        kSession.fireAllRules();
    } catch (Throwable t) {
        t.printStackTrace();
    }
}

public static class Message {

    public static final int HELLO = 0;
    public static final int GOODBYE = 1;

    private String message;

    private int status;

    public String getMessage() {
        return this.message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public int getStatus() {
        return this.status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

}

}

Sample.drl

package com.sample

import com.sample.DroolsTest.Message;

rule "Hello World"
    when
        m : Message( status == Message.HELLO, myMessage : message )
    then
        System.out.println( myMessage );
        m.setMessage( "Goodbye cruel world" );
        m.setStatus( Message.GOODBYE );
        update( m );
end

rule "GoodBye"
    when
        Message( status == Message.GOODBYE, myMessage : message )
    then
        System.out.println( myMessage );
end

我在K会话中获得NPE。插入(消息) 显然是因为此处缺少ksession规则

KieSession kSession = kContainer.newKieSession("ksession-rules");

当我mavenize这个项目并将其作为maven测试运行时,我得到了同样的事情。我注意到一些人已经经历过这种情况,并指出了类路径问题,但我仍然不清楚解决方案。

mvn eclipse:eclipse也没有帮助。

链接我已经通过了

  1. 在drools中运行helloworld时获取空指针异常
  2. drools 6.0中未知的KieSession名称(尝试将drools添加到现有的maven/eclipse项目时)

共有1个答案

莫河
2023-03-14

在github中阅读Drools 6.0.0之后,我看到了一个文件kModule。xml应该与绑定到规则的会话名称“ksession rules”一起出现。未生成此文件(错误??)

然而,我降级到5.6.0,以获得更好的社区支持和良好的留档。

 类似资料:
  • 我想从JavaGUI到数据库获取startTime和endTime的值。 电脑座位班 Cobadatabase类 这里的问题是,当单击登录按钮时,开始时间显示在我的数据库中的开始时间和结束时间列上。当单击注销按钮时,将在数据库中创建另一个行,该行在starTime和endTime列上都包含endTime。我想知道为什么会这样...

  • 我正在计算一个时间窗口上的计数(求和1),如下所示: 我还想将窗口开始时间添加为一个关键字段。所以结果会是这样的: 所以本质上是按窗口聚合计数。最终目标是绘制这些窗口的直方图。 如何将窗口的开头添加为键中的字段?然后,在这种情况下,将窗口对齐到00秒或30秒?这可能吗?

  • 问题内容: 是否可以获取旧的运行过程的开始时间?如果今天不是开始日期,似乎会报告日期(而不是时间),如果今年不是开始日期,则只会报告日期。旧工艺会永远失去精度吗? 问题答案: 您可以指定格式器并使用,例如以下命令: 上面的命令将输出所有进程,并带有格式化程序以获取PID,命令运行以及启动日期和时间。 示例(从Debian / Jessie命令行) 您可以阅读的联机帮助页或查看Opengroup的其

  • 给定ZonedDateTime,我如何获得时区所在的一天开始的ZonedDateTime?我不希望一天的开始是UTC。 实例 给定ZoneDateTime。of(2022,6,8,1,0,0,0,ZoneId.of(“美国/纽约”)) 我想返回ZonedDateTime.of(2022, 6, 7, 0, 0, 0, 0, ZoneId.of("America/New_York")) 因为UTC的

  • 在我的应用程序中,我在一个活动中使用了不止一个纺纱器,一切都很好,但当我开始另一个活动时,根据我当前活动中的纺纱器的选定项目,所有选定的纺纱器项目都自行获得对其“0”索引值的更改。当我从下一个活动返回到带有旋转器的活动时(即,当活动恢复时),它所选的值被设置为“0”索引。我怎样才能阻止旋转者在开始另一个活动时改变其选定项目的行为。

  • 我将在我的应用程序中使用Facebook SDK。我必须打开建筑。gradle并添加以下代码: 但是在Eclipse中,我可以在哪里为我的项目打开这个?我在谷歌上搜索过,但找不到任何相关信息。