我一直在尝试在我的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属性的事件类型,则不会运行错误。然而,当基本时间运算符没有错误时,它不起作用。
非常困惑。可能做错了多件事。有人可以帮忙吗?感谢。