Drools Fusion时间操作员持续时间错误/声明事件

时间:2016-07-26 11:39:27

标签: java drools temporal drools-fusion

我一直在尝试在我的java bean中处理持续时间属性,但它似乎没有处理。我试图用两种方式声明它:第一种方法是抓住现有的类并将其声明为DRL中的事件。这是我的代码。

package com.sample;

import com.sample.Instance;

declare Instance
@role(event)
@duration(durationTime)
end

rule "Lisa Evans"
when
    $instance : Instance (code == "Lisa Evans - Accel : 0.00 - 2.00") from    entry-point "Stream"
then
    entryPoints["Correlate"].insert($instance);
end

rule "Kirsty Smith" 
when
    $instance : Instance (code == "Kirsty Smith - Accel : 0.00 - 2.00") from entry-point "Stream"
then
    entryPoints["Correlate"].insert($instance);
end

rule "Correlate"
when
    $i1 : Instance () from entry-point "Correlate"
    $i2: Instance (this after $i1)

then
    System.out.println("Duration: " + $i1.getDuration());
end

但我一直收到错误:“java.lang.RuntimeException:创建KieBase时出错[Message [id = 1,level = ERROR,path = Ruleset.drl,line = 5,column = 0    text =为TypeDeclaration'com.sample.Instance'处理@duration时出错:无法访问字段'durationTime']]“

我声明它的第二种方式是在我的Java类中:

package com.sample;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.kie.api.definition.type.Role;
import org.kie.api.definition.type.Duration;

@Role(Role.Type.EVENT)
@Duration("durationTime")

@XmlRootElement (name = "instance")
public class Instance implements Comparable<Instance>
{

int id;
double startValue;
double endValue;
long durationTime;
String Code;

public int getId() {
    return id;
}
@XmlElement (name = "ID")
public void setId(int id) {
    this.id = id;
}
public double getStart() {
    return startValue;
}
@XmlElement
public void setStart(double start) {
    this.startValue = start;
}
public double getEnd() {
    return endValue;
}
@XmlElement
public void setEnd(double end) {
    this.endValue = end;
}

public long getDuration() {
    return durationTime = (long) ((this.endValue - this.startValue) * 1000);
}

public String getCode() {
    return Code;
}
@XmlElement
public void setCode(String code) {
    Code = code;
}
@Override
public int compareTo(Instance o) {
    return Double.compare(this.getEnd(), o.getEnd());

}

}

它仍然无法正常工作,因为我得到了相同的错误。在DRL中,如果我将对象声明为没有duration属性的事件,并且将其声明为对象内部的事件角色,即使使用duration属性,也不会出现错误。使用底部的时间规则运行它,但它不会触发。这似乎是一个应该触发的基本规则。

但是,如果我在DRL中删除声明的事件类型,则会出现错误。没有触及java bean。

摘要:在java bean inc中声明了Event Type。持续时间属性:不喜欢持续时间属性/无法访问它。在现有的类公司的DRL中声明它。持续时间。也不喜欢它。如果我没有触摸java bean事件声明(包括持续时间)但在DRL中声明了没有duration属性的事件类型,则不会运行错误。然而,当基本时间运算符没有错误时,它不起作用。

非常困惑。可能做错了多件事。有人可以帮忙吗?感谢。

0 个答案:

没有答案