[
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