Thanks, the whole rule file:
package com.datangmobile.rules
import com.datangmobile.rules.alarmdefine;
import com.datangmobile.rules.alarm;
rule "alarmdefine"
no-loop true
when
#conditions
alarm(reason:alarmreason, level:alarmlevel)
alarmdefine(alarmreason==reason, alarmlevel!=level)
then
#actions
alarm.setCounter();
end
alarmdefine object:
package com.datangmobile.rules;
public class alarmdefine {
private int alarmreason;
private int alarmlevel;
private int objtype;
private int alarmtype;
public int getAlarmlevel() {
return alarmlevel;
}
public void setAlarmlevel(int alarmlevel) {
this.alarmlevel = alarmlevel;
}
public int getAlarmreason() {
return alarmreason;
}
public void setAlarmreason(int alarmreason) {
this.alarmreason = alarmreason;
}
public int getAlarmtype() {
return alarmtype;
}
public void setAlarmtype(int alarmtype) {
this.alarmtype = alarmtype;
}
public int getObjtype() {
return objtype;
}
public void setObjtype(int objtype) {
this.objtype = objtype;
}
}
alarm object:
package com.datangmobile.rules;
public class alarm {
private int alarmreason;
private int alarmlevel;
private int objtype;
private int alarmtype;
private String dn;
static private int counter = 0;
public int getAlarmlevel() {
return alarmlevel;
}
public void setAlarmlevel(int alarmlevel) {
this.alarmlevel = alarmlevel;
}
public int getAlarmreason() {
return alarmreason;
}
public void setAlarmreason(int alarmreason) {
this.alarmreason = alarmreason;
}
public int getAlarmtype() {
return alarmtype;
}
public void setAlarmtype(int alarmtype) {
this.alarmtype = alarmtype;
}
public String getDn() {
return dn;
}
public void setDn(String dn) {
this.dn = dn;
}
public int getObjtype() {
return objtype;
}
public void setObjtype(int objtype) {
this.objtype = objtype;
}
static public void setCounter(){
counter++;
}
static public int getCounter(){
return counter;
}
}
can you provide your objects that you are using, and the whole rule file?
On 4/26/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>
> Dear user group:
>
> I have a queston about the performance of drools3.0.
> My only one rule is:
>
> rule "alarmdefine"
> no-loop true
> when
> #conditions
> alarm(reason:alarmreason, level:alarmlevel)
> alarmdefine(alarmreason==reason, alarmlevel!=level)
> then
> #actions
> alarm.setCounter();?
> end
>
> My eviroment: eclipse3.2M5, jdk1.4.2-03
> Testcode is :
>
> for(int i=1; i<1000; i++)
> {
> alarm malarm = new alarm();
> malarm.setAlarmreason(i);
> malarm.setAlarmlevel(1);
> malarm.setObjtype(1);
> malarm.setAlarmtype(1);
> workingMemory.assertObject( malarm );
> workingMemory.fireAllRules();
> }
>
> when alarmdefine exist 50000 record, execute time is 20s
> when alarmdefine exist 5000 recode, execute time is 2s
>
> Then I have done the same test with JESS, the rule is:
>
> (defrule alarm-cleared-all
> (alarm (alarmreason ?a) (alarmlevel ?x) )
> (alarmdef (alarmreason ?a) (alarmlevel ?y&:(<> ?y ?x)))
> =>
> (call alarm setCounter)
> )
>
> when alarmdefine exist 50000 record, execute time is only 0.2s
>
> Great difference! Why? What can I do?
>
> Thanks
> Wangwei
>