RuleML 2009 Call for Participation and Rules Challenge Extended Submission Deadline & Preliminary Program
by Wolfgang Laun
[Apologies if you receive this more than once.]
RuleML-2009
3rd International Rule Challenge @ RuleML 2009
(Extended Submission Deadline, September 11 2009)
co-located with the Business Rules Forum
November 5-7 2009, Las Vegas, Nevada, USA
http://2009.ruleml.org
============================================================
Call for Participation
============================================================
This year, the 3rd International Symposium on Rules, Applications and
Interoperability (RuleML-2009) takes place in Las Vegas, Nevada, USA,
collocated with the 12th Business Rules Forum, the world's largest
Business Rules event. RuleML-2009 is devoted to practical distributed
rule technologies and rule-based applications. The International
Symposium on Rules, Applications and Interoperability has evolved
from an annual series of international workshops since 2002,
international conferences in 2005 and 2006, and international symposia
since 2007, and is now in the top 100 venues for scientific impact
factor in CiteseerX (http://citeseerx.ist.psu.edu/stats/venues).
Deadline for early-bird registration: 18 September 2009
RuleML-2009 registration page: http://2009.ruleml.org/registration.html
============================================================
3rd International Rule Challenge
============================================================
Due to numerous requests we have decided to extend the submission deadline
to
Friday, September 11 2009.
For further submission details see:
http://2009.ruleml.org/challenge.html
============================================================
Highlights
============================================================
Keynote Speakers
- Sandro Hawke (W3C@MIT):
Bringing Order to Chaos: RIF as the New Standard for Rule Interchange
- Paul Vincent (TIBCO Software):
Why Rules Matter in Complex Event Processing... and vice versa
- Donald Chapin (Business Semantics):
Terminology: the Semantic Foundation for an Organization’s Executable
Rules
Joint Boxed Lunch Panel on "Rules on the Web" held in conjunction with the
co-located Business Rules Forum.
Joint Session on Rule Standards in conjunction with the co-located Business
Rules Forum.
3rd International Rules Challenge with prizes to demonstrate tools, use
cases,
and applications.
Tutorials:
- Christian de Sainte Marie (IBM/ILog): RIF Tutorial
- Mark Proctor (Red Hat): Drools Tutorials
- Larry Goldberg (KPI): The Decision Model Tutorial
Industry, demo, scientific research & development papers and
presentations
advancing and assessing the state of the art in event and rule-based systems
selected in a peer-reviewed fashion by an international program committee.
Social events to promote networking among the symposium delegates in an
informal setting.
You will be offered an exciting venue to exchange new ideas, practical
developments and experiences on issues related to the engineering,
management,
integration, interoperation and interchange of rules and events in open
distributed environments such as Enterprise Architectures, the Web,
Event-Driven and Service Oriented Architectures etc.
============================================================
Preliminary Program
============================================================
Day 1: Thursday, November 5 2009
=================================
8:30 Keynote: Bringing Order to Chaos: RIF as the New Standard for Rule
Interchange. Sandro Hawke, World Wide Web Consortium
9:30 RIF Tutorial. Christian de Sainte Marie, IBM/ILOG
11:00 Break
11:20 Standards for Business Rules (joint with BR Forum). John Hall, Model
Systems
12:20 Boxed Lunch & Panel Discussion: "Rules on the Web" (joint with BR
Forum)
Moderator: John Hall, Model Systems
Rule Systems on the Web
13:45 Challenges for Rule Systems on the Web. Yuh-Jong Hu, Ching-Long Yeh
and
Wolfgang Laun
14:00 A modest proposal to enable RIF dialects with limited forward
compatibility. Christiane de Sainte Marie
14:15 RIF RuleML Rosetta Ring: Round-Tripping the Dlex Subset of Datalog
RuleML and RIF-Core. Harold Boley
14:30 WellnessRules: A Web 3.0 Case Study in RuleML-Based Prolog-N3
Profile
Interoperation. Harold Boley, Taylor Osmun, and Benjamin Craig
RuleML Challenge and Demos
14:45 RuleML Challenge and Demos
16:00 Break
16:30 RuleML Challenge and Demos
RuleML 2009 Conference Dinner
Day 2: Friday, November 6 2009
=================================
8:30 Keynote: Why Rules Matter in Complex Event Processing... and vice
versa
Paul Vincent, TIBCO
Rule-based Event Processing and Reaction Rules
9:30 Rule-based Event Processing and Reaction Rules. Adrian Paschke and
Alexander Kozlenkov
9:45 Correlating Business Events for Event-Triggered Rules. Josef Schiefer,
Hannes Obweger and Martin Suntinger
10:00 Semantic Rule-Based Complex Event Processing. Kia Teymourian and
Adrian
Paschke
10:15 Break
General Rule Topics
10:45 Generation of Rules from Ontologies for High-Level Scene
Interpretation.
Wilfried Bohlken and Bernd Neumann
11:15 RBDT-1: a New Rule-based Decision Tree Generation Technique. Amany
Abdelhalim, Issa Traore and Bassam Sayed
11:45 Process Materialization using Templates and Rules to Design Flexible
Process Models. Akhil Kumar and Wen Yao
12:15 Lunch
14:00 Keynote: Terminology: the Semantic Foundation for an Organization’s
Executable Rules. Donald Chapin, Business Semantics
Rule Transformation and Extraction
15:00 Introduction to "Rule Transformation and Extraction" Track. Mark H.
Linehan and Eric Putrycz
15:15 An SBVR Framework for RESTful Web Applications. Alexandros Marinos and
Paul Krause
15:45 Towards an improvement of Software Development Processes through
Standard Business Rules. José L. Martínez-Fernández, Paloma Martínez
and
José C. González-Cristóbal
16:00 Break
16:30 A Rule-Based System Implementing a Method for Translating FOL Formulas
into NL Sentences. Aikaterini Mpagouli and Ioannis Hatzilygeroudis
17:00 An Empirical Study of Unsupervised Rule Set Extraction of Clustered
Categorical Data using a Simulated Bee Colony Algorithm. James D.
McCaffrey and Howard Dierking
17:30 Transformation of Graphical ECA Policies into Executable PonderTalk
Code. Raphael Romeikat, Markus Sinsel and Bernhard Bauer
RuleML Steering Committee (closed)
Day 3: Saturday, November 7 2009
=================================
Tutorials
8:30 Drools Tutorial. Mark Proctor, Red Hat
The Decision Model. Larry Goldberg, KPI
10:30 Break
Process and Data
11:00 A Rule-Based Approach to Match Structural Patterns with Business
Process
Models. Jens Müller
11:30 Usage of the Jess engine, rules and ontology to query a relational
database. Jaroslaw Bak, Czeslaw Jedrzejek and Maciej Falkowski
12:00 An XML-Based Manipulation and Query Language for Rule-based
Information.
Essam Mansour and Hagen Höpfner
12:30 Lunch
Best Paper Award, RuleML-2009 Challenge Winner Award, RuleML-2009 Challenge
Runner-up Award
14:00 Exploration of SWRL Rule Bases through Visualization, Paraphrasing,
and
Categorization of Rules. Saeed Hassanpour, Martin J. O’Connor
and Amar K. Das
14:30 TomML: A Rule Language For Structured Data. Horatiu Cirstea,
Pierre-Etienne Moreau and Amar Reilles
14:45 Geospatial-Enabled RuleML in a Study
on Querying Respiratory Disease
Information. Sheng Gao, Harold Boley, Darka Mioc, Francois Anton and
Xiaolun Yi
Rules and Norms
15:00 Rules and Norms: Requirements for Rule Interchange Languages in the
Legal Domain. Thomas F. Gordon, Guido Governatori and Antonino Rotolo
15:15 A Java Implementation of Temporal Defeasible Logic. Rossella Rubino
and
Antonino Rotolo
15:30 Fill the Gap in the Legal Knowledge Modelling. Monica Palmirani,
Giuseppe Contissa and Rossella Rubino
15:45 The Making of SPINdle. Ho-Pun Lam and Guido Governatori
16:00 Break
Rules and Uncertainty
16:30 Approaches to Uncertain or Imprecise Rules - A Survey. Matthias
Nickles
and Davide Sottara
16:45 Fuzzy Reasoning with a Rete-OO Rule Engine. Nikolaus Wulff and Davide
Sottara
17:00 Towards Modelling Defeasible Reasoning with Imperfection in Production
Rule Systems. Davide Sottara, Paola Mello and Mark Proctor
17:15 Close
===================================================================
Supported by
===================================================================
W3C, OMG, ACM, AAAI, ECCAI, IAAIL, ACM, Belgian Business Rules Forum MIT
Sloan CIO Symposium, EPTS, BPM Forum Belgium
===================================================================
Sponsored by
===================================================================
BBN Technologies
Franz Inc
NICTA (National ICT Australia) Ltd
Corporate Semantic Web
Logic Programming Associated Ltd
ruleCore
JBoss
Modelsystems Ltd
(Sponsoring opportunities: http://2009.ruleml.org/sponsors)
====================================================================
16 years, 2 months
OSGI, classloading, and imports in KnowledgeBuilder
by msully
So I'm playing with Drools in Equinox OSGi, and so far it's behaving quite
nicely - one bit of weirdness though.
What I'm trying to do:
I have a bundle with a 'flow manager' that listens for instances of
WorkItemHandler in the service broker (well, really my own subinterface that
has a getName method). It also listens for new bundles with a
META-INF/drools directory with *.rf files in them, and parses the .rf files
it finds there.
The Flow Manager is itself published as an OSGI Service with a 'perform'
method. It encapsulates all of its Drools calls within the perform method
though - they aren't exposed to clients.
My test involves a simple start->work item->end workflow.
I pass in an instance of a class "Tablex" that can be saved to hibernate. I
also pass in a String that has the table name, and an empty List to get the
results.
My .rf file tries to import Tablex. It declares the three values I mention
above, and maps them to the work item in the work item definition.
<p>
<imports>
<import name="my.pkg.Tablex" />
</imports>
...
<variable name="my.pkg.newrecord" >
<type
name="org.drools.process.core.datatype.impl.type.ObjectDataType"
className="my.pkg.Tablex"/>
</variable>
...
<workItem id="2" name="DBWorkItem" x="165" y="374" width="80"
height="40" >
<work name="DBWorkItem" >
</work>
<mapping type="in" from="my.pkg.tablename" to="my.pkg.tablename" />
<mapping type="in" from="my.pkg.newrecord" to="my.pkg.newrecord"/>
<mapping type="in" from="my.pkg.outlist" to="my.pkg.outlist"/>
</workItem>
</p>
In my manifest for my .rf file and for the flow manager (where the parsing
occurs) I Import-Package Tablex's package.
When my flow manager tries parsing the rule, it gives an error saying the
the import failed. BUT, everything still works, and my WorkItemHandler works
correctly (the WorkItemHandler imports Tablex itself, since it needs to
manipulate it).
If I declare my Tablex variable as a java.util.Object in the ruleflow then I
don't get the error and things also still work.
If I declare my Tablex as Tablex in the rule flow AND import it in the class
that does the parsing (it's already 'OSGI' imported to the parsing bundle,
but now I'm doing a plain old Java import on it) then everything works fine
with no error message.
Kind of a hybrid question but I figured I'd start with the Drools folks.
Any ideas would be appreciated.
Thanks,
Mike
--
View this message in context: http://www.nabble.com/OSGI%2C-classloading%2C-and-imports-in-KnowledgeBui...
Sent from the drools - user mailing list archive at Nabble.com.
16 years, 2 months
(no subject)
by Zevenbergen, Alex
Hi all,
This rule clause fails to evaluate, I am obviously missing something
fundamental - can somebody enlighten me?
rule "1st half Over 0.5 goals"
when
resultInfo : SoccerResultInfo(clockStage > (
CLOCK_STAGES.FIRST_HALF.getValue() ) , (homeHalfTimeScore +
awayHalfTimeScore) > 0 )
then
and this is the error
[ERR 103] Line 13:103 no viable alternative at input '+' in rule "1st
half Over 0.5 goals"
Thanks in advance
Alex
________________________________________________________________________
Privileged, confidential and/or copyright information may be contained in this communication. This e-mail and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you are not the intended addressee, you may not copy, forward, disclose or otherwise use this e-mail or any part of it in any way whatsoever. To do so is prohibited and may be unlawful. If you have received this email in error
please notify the sender immediately.
Paddy Power PLC may monitor the content of e-mail sent and received for the purpose of ensuring compliance with its policies and procedures.
Paddy Power plc, Airton House, Airton Road, Tallaght, Dublin 24 Registered in Ireland: 16956
________________________________________________________________________
16 years, 2 months
rule engines and data-source
by David Boaz
This question is related to application of rule engines in general, not
specifically to drools.
Typically, rule engines provide an API to insert facts to working-memory and
then executes the rules. In most of the applications, this data originates
from a data-source. It is the application responsibility to retrieve the
relevant data and to insert in to the engine. If for some reason the query
for data is too selective, the engine may end-up with wrong conclusions.
So, it is not enough to maintain the business-logic as rules only, there is
a need to maintain also the query.
What are the common patterns used by applications?
* retrieve all data regarding a subject (e.g., in the case of a clinical
application - the complete set of patient data). this may cause the
collection of large quantities of data (we know that the 'data-gathering'
step is much longer than processing it in a rule-engine)
* to retrieve only relevant data. Here we will try to restrict the data
retrieval only to data that may affect the rules. For example, in the case
of a clinical application, only the hemoglobin laboratory results from the
last 4 months. The issue here is that query is affected from the rules.
We'd like to automatically generate/ validate the data query according to
the rules logic.
I imagine is an analyzer that receives as input a knowledge-base and returns
the greatest-common-query (like GCD). The returned query can be expressed in
OCL for example.
Does drolls provides a meta-data API to analyze the rule WHEN part?
Thanks, David
--
View this message in context: http://www.nabble.com/rule-engines-and-data-source-tp25281811p25281811.html
Sent from the drools - user mailing list archive at Nabble.com.
16 years, 2 months
Different knowledge bases Vs One knowledge base with use of agent filters..?
by Kumar Mynam
Hello All,
We have different clinical models thru which we send patient data(HeartRate, MeanBP, etc...)
and alert clinicians with different kind of alerts based on output of model.
every clinical model has certain activation rules, alert rules. We are planning to use Drools for implementing those rules.
a .drl file is implemented for each model and rule type(activation rules, alert rules)
We are thinking about two different kinds of implementations.
1) Create a KnowledgeBase for each model and rule type. Now, when we want to evaluate data
thru model-1, we insert the facts into that particular model knowledge base statefulsession,
and fire the rules.
2) Create one big KnowledgeBase for all the models and rule types. Here, when we want to
evaluate data thru clinical model-1, we get a session out of KnowledgeBase, insert facts,
while firing rules we pass in agent filters to fire only model-1 rules.
Does 2nd approach have any advantages over the 1st approach. If so, what are those advantages,
or a link to that page would be greatly appreciated.
Thank you.
kumar.
16 years, 2 months
Re: [rules-users] Accumulator - Syntax question
by Joseph Berdat
Hello,
In attachment there are a DRL file and java test case which causes the
NPE mentionned below.
Thanks,
Regards
Exception in thread "main" java.lang.NullPointerException
at
org
.drools
.rule.builder.PatternBuilder.buildRestriction(PatternBuilder.java:948)
at
org
.drools
.rule.builder.PatternBuilder.buildRestriction(PatternBuilder.java:727)
at
org
.drools
.rule.builder.PatternBuilder.createRestriction(PatternBuilder.java:504)
at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:
351)
at
org
.drools
.rule.builder.PatternBuilder.buildConstraint(PatternBuilder.java:239)
at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:
196)
at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:
104)
at
org
.drools
.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:69)
at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:68)
at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:1159)
at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:
649)
at
org
.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:
290)
at
org
.drools
.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:488)
at
org
.drools
.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:25)
at TestQuote.executeRule(TestQuote.java:37)
at TestQuote.main(TestQuote.java:19)
Le 3 sept. 09 à 22:06, PlugTree a écrit :
> hmmm seems we met a bug here. post it to the list to see if anyone
> knows something about it. If not I'll dig into the code to see the
> problem.
>
> Thanks!
> CEO
> plugtree.com
>
> Joseph Berdat wrote:
>> Hello,
>>
>> I've tried you proposition:
>> $quote : Quote(value > (Double() from accumulate( Quote( $price :
>> value ), average( $price ) ) ))
>> Unfortunatly, it produces the following error:
>> java.lang.NullPointerException
>> at
>> org
>> .drools
>> .rule.builder.PatternBuilder.buildRestriction(PatternBuilder.java:
>> 948)
>> at
>> org
>> .drools
>> .rule.builder.PatternBuilder.buildRestriction(PatternBuilder.java:
>> 727)
>> at
>> org
>> .drools
>> .rule.builder.PatternBuilder.createRestriction(PatternBuilder.java:
>> 504)
>> at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:
>> 351)
>> at
>> org
>> .drools
>> .rule.builder.PatternBuilder.buildConstraint(PatternBuilder.java:239)
>> at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:
>> 196)
>> at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:
>> 104)
>> at
>> org
>> .drools
>> .rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:69)
>> at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:68)
>> at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:
>> 1159)
>> at
>> org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:
>> 649)
>> at
>> org
>> .drools
>> .compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:290)
>> at
>> org
>> .drools
>> .compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:
>> 488)
>> at
>> org
>> .drools
>> .builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:25)
>> at
>> home.prototype.business.service.QuoteTest.loadRule(QuoteTest.java:62)
>> at home.prototype.business.service.QuoteTest.test1(QuoteTest.java:35)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at
>> sun
>> .reflect
>> .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> at
>> sun
>> .reflect
>> .DelegatingMethodAccessorImpl
>> .invoke(DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:585)
>> at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
>> at
>> org
>> .junit
>> .internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
>> at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:
>> 79)
>> at
>> org
>> .junit
>> .internal
>> .runners
>> .MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
>> at
>> org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
>> at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
>> at
>> org
>> .junit
>> .internal
>> .runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:
>> 88)
>> at
>> org
>> .junit
>> .internal
>> .runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
>> at org.junit.internal.runners.JUnit4ClassRunner
>> $1.run(JUnit4ClassRunner.java:44)
>> at
>> org
>> .junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:
>> 27)
>> at
>> org
>> .junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
>> at
>> org
>> .junit
>> .internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
>> at
>> org
>> .eclipse
>> .jdt
>> .internal
>> .junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
>> at
>> org
>> .eclipse
>> .jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>> at
>> org
>> .eclipse
>> .jdt
>> .internal
>> .junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
>> at
>> org
>> .eclipse
>> .jdt
>> .internal
>> .junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
>> at
>> org
>> .eclipse
>> .jdt
>> .internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
>> 386)
>> at
>> org
>> .eclipse
>> .jdt
>> .internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
>> 196)
>>
>> Regards,
>>
>> Le 3 sept. 09 à 10:52, Plug Tree Labs a écrit :
>>
>>> Joseph:
>>>
>>> I think you should need something like this:
>>>
>>> $quote : Quote(value > (Double() from accumulate( Quote( $price :
>>> value ), average( $price ) )))
>>>
>>> What do you think?
>>>
>>> joseph berdat wrote:
>>>> Hello,
>>>> The rule below check which quote have a price above the average.
>>>> In this form the rule is working, but from the log files it seems
>>>> that this rule is doing a cross join.
>>>> rule "above average value"
>>>> dialect "mvel"
>>>> when
>>>> Double( $average : doubleValue) from
>>>> accumulate( Quote( $price : value ), average( $price ) )
>>>> $quote : Quote(value > $average)
>>>> then
>>>> System.out.println("Quote above average [" + $quote.id + "]
>>>> value [" + $quote.value + "] average [" + $average + "]")
>>>> end
>>>> I could not get the correct syntax. I would like to write
>>>> something like:
>>>> when Quote(value > doubleValue) from accumulate( Quote( $price :
>>>> value ), average( $price ) )
>>>> Thanks,
>>>> regards.
>>>> ------------------------------------------------------------------------
>>>> _______________________________________________
>>>> rules-users mailing list
>>>> rules-users(a)lists.jboss.org <mailto:rules-users@lists.jboss.org>
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>
>
16 years, 2 months
Drools Syntax
by Lindy hagan
Hi,
Could anyone tell me what will be the syntax to check for a list in the drl
file.
For ex:
If the user object contains userid (userId) and list of privileges
(privilegeList) values can be User Privilege or Admin Privilege.
I want to create 3 rules :
privilegeList.contains("User Privilege ") && privilegeList.contains("Admin
Privilege") first rule
privilegeList.contains("User Privilege ") second rule,
privilegeList.contains("Admin Privilege") third rule,
can this be done in Drools?
Thanks,
Lindy
16 years, 2 months
Scaling to large numbers of rules
by Adam Sussman
I am hoping that I am doing something wrong here and that one of you can
point me in the right direction.
Can anyone provide some advice on scaling up the number of rules in a
single KnowledgeBase? While I have seen all sorts of reports on having
lots of facts, I have not seen anything about having lots of rules.
I need to get to about 200K rules in a single KnowledgeBase, and also
to run several of these side by side in the same system.
The problem:
As the number of rules increases, the time to compile and load them
into memory skyrockets. Now while I realize that the Rete algorithm
complexity is about the number of rules, the times I am seeing are
pretty scary. Also, at about 30k rules, things just fall apart.
On a 64 bit Linux OS with 2 2.4Ghz processors using a 64bit JVM from
OpenJDK (1.6.1) with 1 Gig of memory allocated to the JVM, loading
from .drl files:
1000 rules:
KnowledgeBuilder.add: 7 seconds
KnowledgeBase.addKnowledgePackages: .8 seconds
10000 rules:
KnowledgeBuilder.add: 79 seconds
KnowledgeBase.addKnowledgePackages: 23 seconds
15000 rules:
KnowledgeBuilder.add: 138 seconds
KnowledgeBase.addKnowledgePackages: 55 seconds
20000 rules:
KnowledgeBuilder.add: 488 seconds
KnowledgeBase.addKnowledgePackages: 100 seconds
30000 rules:
KnowledgeBuilder.add: out of memory
KnowledgeBase.addKnowledgePackages: never runs
At this rate, 200k rules will take 13-14 hours to compile
and 2-3 hours to load into RAM, assuming I can even get
to that many rules. This just is not usable.
Time to fire all rules is negligible (fortunately!).
The rules I am testing on are very simple 1-3 variable equality whens
with a simple System.out.println then clause.
The benchmark code I am running is as follows:
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newClassPathResource( drlFile, RuleRunner.class ), ResourceType.DRL );
Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
kbase.addKnowledgePackages( pkgs );
Sample rule:
rule "00000005 - random rule"
when
Transaction(someId == 35156 && someOtherId == '79F81FB8134A129F' && someCollection contains 'EC3F2A1DCA88')
then
System.out.println("match rule 00000005 - random rule");
end
Any help would be appreciated.
Regards,
Adam Sussman
CONFIDENTIALITY NOTICE:
This message contains information which may be confidential or privileged. If you are not the intended recipient, be aware that any disclosure, copying, distribution or use of the contents of this information is prohibited. If you have received this transmission in error, please notify me immediately by telephone.
16 years, 2 months