如何将项目添加到列表中?

时间:2016-06-13 10:44:07

标签: java drools rules rule-engine

我在添加实例以在规则的RHS中列出时遇到问题。

有两个类如下所示:

class Person {
    private java.lang.Integer age;
    private java.lang.String name;
}

class A {
    private java.util.List<Person> persons;
    private java.util.List<Person> selectedPersons;
}

在以下规则中,我想将年龄大于30岁的人放入selectedPersons。

rule "test"
when 
    $a:A()
    $p : Person(age > 30) from $a.persons
then
    $a.getSelectedPersons().add($p);
end

它在eclipse中运行,使用Drools插件; 但在部署到KIE服务器后它没有。我得到的只是实例参考。任何想法?

另外,我想知道为什么KIE服务器在向Person类添加以下构造函数时抛出 java.lang.NoSuchMethodError 异常,而workbench可以成功构建和部署规则:

public Person(Person p)
{
    this.name = p.name;
    this.age = p.age;
}

2 个答案:

答案 0 :(得分:1)

该课程应如下所示:

class A {
    private java.util.List<Person> persons;
    private java.util.List<Person> selectedPersons;

    //First create getter, setter for the lists.
    void addToList(Person item)
    {
        selectedPersons.add(item);
    }
}

规则应如下所示:

rule "test"
when 
    $a:A()
    $p : Person(age > 30) from $a.persons
then
    $a.addToList($p);
end

答案 1 :(得分:0)

  1. &#34;我得到的只是实例参考&#34;
  2. 我应该添加问题中提到的构造函数。顺便说一句,如果Person类中有Date属性,则应复制或克隆它,see here

    1. &#34; java.lang.NoSuchMethodError将以下构造函数添加到Person类&#34;
    2. 时出现异常

      嗯,在删除容器并再次创建之后,异常消失了。我不知道这是一个流口水问题(版本6.2),还是设置流口水的过程问题。