[jboss-jira] [JBoss JIRA] Commented: (JBRULES-959) Investigate performance delta with MR3 and 3.0.6

Gilles Dubuc (JIRA) jira-events at lists.jboss.org
Thu Jun 28 22:43:57 EDT 2007


    [ http://jira.jboss.com/jira/browse/JBRULES-959?page=comments#action_12367265 ] 
            
Gilles Dubuc commented on JBRULES-959:
--------------------------------------

 // Method called to retrieve from the cache if available or recompile and put in the cache otherwise

public RuleBase getGroupRuleBase(RuleGroup rulegroup) {
        String ruleIdString =  rulegroup.getId().toString();
        logger.debug("RuleService - Asked to provide rulebase for group with id=" + ruleIdString);
        
        RuleBase ruleBase = null;
        
        boolean nullCache = false;
        
        if (rulesCache == null || this.cacheDisabled)
            nullCache = true;
        else {
            nullCache = false;
            Object retrieved = null;
            try { retrieved = rulesCache.get("/mitto/rules/group/", rulegroup.getId()); } catch (CacheException e) {
                logger.warn("Could not find rule group with id=" + ruleIdString + " in the cache", e);
                retrieved = null;
            }
            ruleBase = (retrieved == null)?null:(RuleBase) retrieved;
        }
        
        if (EntityRule.isGroupInvalidated(rulegroup) || ruleBase == null) {
            
            logger.debug("RuleService - Generate rulebase for rule group with id=" + ruleIdString);
            
            Reader dsl = new StringReader(rulegroup.getPackage().getDSL());
            
            Reader drl = new StringReader(EntityRule.getDRLByGroup(rulegroup));
            
            logger.debug("DRL of the group with id=" + ruleIdString + ": " + EntityRule.getDRLByGroup(rulegroup));
            
            /*try {
                logger.debug("Expanded DRL of the rule with id="+ ruleIdString + ":" + getExpandedDRL(EntityRule.getDRLByGroup(rulegroup), dsl));
            } catch (DroolsParserException e) {
                logger.error("Drools parsing error", e);
            }
            dsl = new StringReader(rulegroup.getPackage().getDSL());*/
            
            PackageBuilderConfiguration pkgBuilderCfg = new PackageBuilderConfiguration();
            //pkgBuilderCfg.setCompiler(PackageBuilderConfiguration.JANINO);
            pkgBuilderCfg.setCompiler(PackageBuilderConfiguration.ECLIPSE);
            
            PackageBuilder builder = new PackageBuilder(pkgBuilderCfg);
            
            try { builder.addPackageFromDrl(drl, dsl); } catch (DroolsParserException e) {
                logger.warn("Drools could not parse the DRL for rule group with id=" + ruleIdString, e);
            } catch (IOException e) {
                logger.warn("IO error when Drools could not parse the DRL for rule group with id=" + ruleIdString, e);
            }
            
            if (builder.hasErrors())
                logger.error("Drools errors happened when trying to compile the rule group with id=" + ruleIdString + ":" + builder.getErrors().toString());
            
            Package pkg = builder.getPackage();
            
            ruleBase = RuleBaseFactory.newRuleBase();
            try { ruleBase.addPackage( pkg ); } catch (Exception e) {
                logger.error("Drools error happened when trying to add the package to the Rulebase for rule group with id=" + ruleIdString, e);
            }
            
            if (!nullCache) {
                try { rulesCache.put("/mitto/rules/group/", rulegroup.getId(), ruleBase); } catch (CacheException ex) {
                    logger.error("Cache error when tryin to put rule group with id= " + ruleIdString + " into the cache", ex);
                }
            }
            
            EntityRule.setGroupInvalidated(rulegroup, false);
        } else logger.debug("RuleService - Found rulebase in cache for rule group with id=" + ruleIdString);
        
        return ruleBase;
    }

> Investigate performance delta with MR3 and 3.0.6
> ------------------------------------------------
>
>                 Key: JBRULES-959
>                 URL: http://jira.jboss.com/jira/browse/JBRULES-959
>             Project: JBoss Rules
>          Issue Type: Task
>      Security Level: Public(Everyone can see) 
>          Components: All
>    Affects Versions:  4.0.0.MR3
>            Reporter: Michael Neale
>         Assigned To: Michael Neale
>
> // Rule execution time test
> // I give the DRL one fact of class BOBOMessage (made final due to Michael's suggestion)
> // The "message" member of my BOBOMessage fact contains a random combination of the keywords the rule is designed to match
> // A random BOBOMessage like that is generated before every execution
>  
> // MR3's performance: 11:43:01,135 INFO  [RuleLoadBean] Average rule execution time in ms: 2.3991
>  
> // What is measured:
> ruleBase = rsl.getGroupRuleBase(group); // That retrieves the RuleBase from the cache
>  
> StatelessSession session = ruleBase.newStatelessSession();
> session.execute(toBeAsserted.get(group.getId()).toArray());
>  
> // 3.0.6's performance: 12:09:40,446 INFO  [RuleLoadBean] Average rule execution time in ms: 0.7726
>  
> // What is measured:
>  
> ruleBase = rsl.getGroupRuleBase(group); // That retrieves the RuleBase from the cache
>  
> WorkingMemory wm = ruleBase.newWorkingMemory();
> for (Iterator j = toBeAsserted.get(group.getId()).iterator(); j.hasNext();)
> 	wm.assertObject(j.next());
> wm.fireAllRules();
>  
> // The DRL:
>  
> package com.smsc.mitto.rules
>  
> import com.smsc.mitto.rules.client.BOBOMessage;
> import java.lang.String;
>  
> rule "14"
> salience 0
> activation-group "14"
> when
>      m : BOBOMessage( message matches ".*BOBO.*")
> then
>   System.out.println( "BOBO WAS SEEN" );
>   System.out.println( "BOBO WAS REALLY SEEN, DUDE" );
>   drools.setFocus( "17" );
> end
>  
>  
> rule "17"
> salience -20
> agenda-group "17"
> activation-group "17"
> when
>      m : BOBOMessage( message matches ".*CACA.*")
> then
>   System.out.println( "CACA WAS SEEN" );
>   drools.setFocus( "19" );
> end
>  
>  
> rule "19"
> salience -10
> agenda-group "19"
> activation-group "19"
> when
>      m : BOBOMessage( message matches ".*BABA.*")
> then
>   System.out.println( "BABA WAS SEEN" );
>   drools.setFocus( "21" );
> end
>  
>  
> rule "19false"
> salience -20
> agenda-group "19"
> activation-group "19"
> when
>   eval(true)
> then
>   drools.setFocus( "21" );
> end
>  
>  
> rule "21"
> salience -20
> agenda-group "21"
> activation-group "21"
> when
>      m : BOBOMessage( message matches ".*BIBI.*")
> then
>   System.out.println( "BIBI WAS SEEN" );
>   drools.setFocus( "23" );
> end
>  
>  
> rule "21false"
> salience -30
> agenda-group "21"
> activation-group "21"
> when
>   eval(true)
> then
>   drools.setFocus( "23" );
> end
>  
>  
> rule "17false"
> salience -30
> agenda-group "17"
> activation-group "17"
> when
>   eval(true)
> then
>   drools.setFocus( "23" );
> end
>  
>  
> rule "23"
> salience -30
> agenda-group "23"
> activation-group "23"
> when
>      m : BOBOMessage( message matches ".*POOP.*")
> then
>   System.out.println( "POOP WAS SEEN" );
>   drools.setFocus( "25" );
> end
>  
>  
> rule "23false"
> salience -40
> agenda-group "23"
> activation-group "23"
> when
>   eval(true)
> then
>   drools.setFocus( "25" );
> end
>  
>  
> rule "14false"
> salience -10
> agenda-group "14"
> activation-group "14"
> when
>   eval(true)
> then
>   drools.setFocus( "25" );
> end
>  
>  
> rule "25"
> salience -10
> agenda-group "25"
> activation-group "25"
> when
>      m : BOBOMessage( message matches ".*SUPER.*")
> then
>   System.out.println( "SUPER WAS SEEN" );
> end

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list