0

我一直在尝试处理我的 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=Error processing @duration for TypeDeclaration 'com.sample.Instance':无法访问字段 '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 中,如果我将对象声明为没有持续时间属性的事件,并且将其也声明为对象内的事件角色,即使使用持续时间属性,我也不会收到错误消息。在底部使用时间规则运行它,但是它不会触发。这似乎是一个应该触发的基本规则。

但是,如果我删除 DRL 中声明的事件类型,我会收到错误消息。无需接触 java bean。

摘要:在 java bean inc 中声明了事件类型。持续时间属性:不喜欢持续时间属性/无法访问它。在现有类 inc 的 DRL 中声明它。持续时间属性。也不喜欢。当我没有触及 Java bean 事件声明(包括持续时间)但在 DRL 中声明了没有持续时间属性的事件类型时,运行没有错误。但是,当它们没有错误时,基本时间运算符不起作用。

很困惑。可能做错了很多事情。有人可以帮忙吗?谢谢。

4

0 回答 0