[rules-users] How to pre compile rule files for production
Michael Rhoden
mrhoden at franklinamerican.com
Sat Apr 14 12:13:26 EDT 2007
Typically you would want to create a rulebase at server load or at the
application scope and store that rulebase as a singleton. Then at runtime
get a workingmemory, assert your objects and fire rules.
For our application loading rules into a rulebase takes from 10 to 180
seconds , but working memory, asserting a few objects and firing the rules
takes less than 100ms.
-Michael
...... Original Message .......
On Sat, 14 Apr 2007 06:44:15 -0700 (PDT) <abhilashkumar at amritatech.com>
wrote:
>Hello,
>
> I am using 3.0 RC 2 version of DROOLS in one of our project. (JDK 1.4.2
>and JBoss 3.2.7) When we deployed the application into production, we
>are facing performance issues that seems to be because of class loading
>and GC collection of rule classes that are created at runtime. So I went
>back to the docs and wiki and decided to try the pre-compile and caching
>options. Eventhough i searched the wiki, mailing list archives and doc,
>i was not able to find any advice on how can I do this. Ours is a J2EE
>application and the EJBs call a static method in an helper class which
>will laod the .drl file, build the PackageBuilder and Rulebase, create
>the WorkingMemory and execute the rule.
>
> Any pointers on how to pre compile the rule and then execute it will be
>really helpful. Below is the current code that executes the rule.
>
>Thanks and Regards,
>
>-- Abhilash.
>
>
>private static RuleResultVO execute( String ruleFile, Object [] objects )
>throws AppException {
>
>
> RuleResultVO ruleResult = new RuleResultVO();
> try {
>
> //read in the source
> InputStream in = ResourceLoader.getResourceAsStream(ruleFile);
> Reader reader = new InputStreamReader(in);
> DrlParser parser = new DrlParser();
> PackageDescr packageDescr = parser.parse( reader );
>
> //pre build the package
> PackageBuilder builder = new PackageBuilder();
> builder.addPackage( packageDescr );
> Package pkg = builder.getPackage();
>
> //add the package to a rulebase
> RuleBase ruleBase = RuleBaseFactory.newRuleBase();
> ruleBase.addPackage( pkg );
>
> //load up the rulebase
>
> WorkingMemory workingMemory = ruleBase.newWorkingMemory();
>
> //go !
>
> for ( int i = 0; i < objects.length; i++ ) {
> workingMemory.assertObject( objects[i] );
> }
>
>
> workingMemory.assertObject( ruleResult );
>
> workingMemory.fireAllRules();
>
>
> }catch( Exception e ) {
> e.printStackTrace();
> ExceptionUtil.throwAppException( "RuleExecuter.executeRule() :
>Exception Occured :[" +e.getMessage()+"]");
> }
>
> return ruleResult;
> }
>
>
>_______________________________________________
>rules-users mailing list
>rules-users at lists.jboss.org
>https://lists.jboss.org/mailman/listinfo/rules-users
>
>
More information about the rules-users
mailing list