我一直在尝试处理我的 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 中声明了没有持续时间属性的事件类型时,运行没有错误。但是,当它们没有错误时,基本时间运算符不起作用。
很困惑。可能做错了很多事情。有人可以帮忙吗?谢谢。