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
>

Reply via email to