Re: [rules-users] Too many ACTIVATION "candidates"

2010-12-23 Thread Greg Barton
One way of detecting cartesian products is to model the LHS as a graph, with 
object patterns being nodes, and conditions that compare two objects being an 
edge.  If the LHS graph has unconnected subgraphs then it contains a cartesian 
product.  You can make this more sophisticated by excluding classes that you 
know have few instances in working memory, like control objects.

GreG

On Dec 23, 2010, at 3:37, "Swindells, Thomas"  wrote:

>>> I'd say that this rule should actually be written as 16 rules - one for
>>> each of the or'd together GoodsItems conditions, each of these rules would
>>> only depend on a single Fact and you won't get into this problem.
>> 
>> True. This rule can be re-written as a series of 5 rules that do not
>> exhibit the explosion of activation candidates. I have done so and
>> everything worked fine.
>> 
>>> 
>>> Who controls the custom interface? If you can control then the simplest
>>> solution is to prevent them doing or's of conditions (though perhaps this
>>> may not fly with your customers). Alternatively have the interface output
>>> an intermediate form which you can then control the compilation of.
>> 
>> The custom interface, you may think of it as a simplified Guvnor, is under
>> my total control as I've implemented it.
>> The problem is, that the user can use it to write these kinds of rules.
>> In theory, rule rewriting could be possible, but I'm not sure I can detect
>> these kinds of dependencies for any kind of rule that may be written.
> 
> No, I think they should be rewritten as a series of 16 rules (one for each 
> '||'.
> You could remove the option from the user of being able to 'or' together 
> conditions and require each thing to be written as separate rules. This 
> should reduce the Cartesian products for the majority of cases (although 
> creative users could still possibly write statements like (fact1 != 
> "thiswillneverhappen" && fact2 != "thiswillneverhappen2"...)/
> 
>> It there is a way that these kinds of cartesian product of activation
>> candidates can be estimated before hand (either by analyzing the rule or
>> by some other means), it would be great.
>> Any ideas are welcomed.
> It depends on how accurate you want it.
> Simplist option is to restrict the number of facts that a rule can match 
> against (if they can only match against 3 facts the Cartesian product 
> probably isn't too bad).
> Slightly more complicated you can assume the worst case scenario that every 
> value of each fact type is included and multiple the count of each included 
> fact together, if it exceeds a configured limit you decide that potentially 
> the rule is too complicated.
> Getting much more complicated is to perform a much more accurate estimation 
> of each fact based upon the constraints. You could either do this in code 
> (perhaps a db query or some other way to apply the constraint).
> Another way to do this would be to decompose the rules so that you accumulate 
> the result of each fact constraint first, check whether too many facts have 
> been included and then use a from for each accumulation at the end (or 
> something like that anyway).
> 
> Thomas
> 
> 
> **
> This message is confidential and intended only for the addressee. If you have 
> received this message in error, please immediately notify the 
> postmas...@nds.com and delete it from your system as well as any copies. The 
> content of e-mails as well as traffic data may be monitored by NDS for 
> employment and security purposes. To protect the environment please do not 
> print this e-mail unless necessary.
> 
> NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 
> 4EX, United Kingdom. A company registered in England and Wales. Registered 
> no. 3080780. VAT no. GB 603 8808 40-00
> **
> 
> ___
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] help with diagnosing CEP performance issue

2010-12-23 Thread Mauricio Salatino
hehe yes.. the same happens to "me" :)

2010/12/23 Wolfgang Laun 

> (OT: your nick "me" is confusing other gmail users. I see your mail as if I
> had sent it to myself. I was almost binning it.)
>
> The delay you see may depend on the way you run the test with 40K events.
> Please describe the sequence of insertions and calls to fire...(), the
> session setup (pseudo-clock, etc.)
>
> -W
>
>
> 2010/12/23 me 
>
>> Hi.
>>
>> im trying to demo drools-fusion for a system that processes backup events.
>>
>> i have the following 2 CEP rules:
>>
>> rule "Backup Not Succeeded For At Least 3 Days"
>> @ruleId(1)
>> when
>> Node($id : id)
>> not ( Backup(clientId == $id, $state: state ==
>> BackupStateEnum.FINISHED) over window:time( 3d ) from entry-point "Backup
>> Stream" )
>> then
>> //nothing for now
>> end
>>
>> rule "Prune Previous Successful Backups"
>> @ruleId(2)
>> when
>> $prevBackup  : Backup($id : clientId,  state ==
>> BackupStateEnum.FINISHED) from entry-point "Backup Stream"
>> $newerBackup : Backup(clientId == $id, state ==
>> BackupStateEnum.FINISHED, this after $prevBackup) from entry-point "Backup
>> Stream"
>> then
>> drools.retract($prevBackup);
>> end
>>
>> rule #2 is my attempt to cut down on memory usage. the problem is that
>> rule #2 slows down the processing very very considerably (2 orders of
>> magnitude slower when simulating batches of 40K events/day).
>>
>> what would be my next step in trying to find the reason for it? my
>> intuition tells me that with 2 events in the system at any given time
>> instead of 120K (single node, 40K events/day 3 day window) i should have
>> seen either a speedup or reduced memory consumption (if not both) and yet
>> the results im seeing are the exact opposite.
>> is there anything im missing ? i could try adding some sort of
>> LastSuccessfulBackup "marker" object into main memory and updating it using
>> events from the backup stream, but then how would i express rule #1 ?
>>
>> any help/clues/suggestions would be greatly appreciated,
>>
>>radai.
>>
>> ___
>> rules-users mailing list
>> rules-users@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
> ___
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>


-- 
 - CTO @ http://www.plugtree.com
 - MyJourney @ http://salaboy.wordpress.com
 - Co-Founder @ http://www.jbug.com.ar

 - Salatino "Salaboy" Mauricio -
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] help with diagnosing CEP performance issue

2010-12-23 Thread Wolfgang Laun
(OT: your nick "me" is confusing other gmail users. I see your mail as if I
had sent it to myself. I was almost binning it.)

The delay you see may depend on the way you run the test with 40K events.
Please describe the sequence of insertions and calls to fire...(), the
session setup (pseudo-clock, etc.)

-W


2010/12/23 me 

> Hi.
>
> im trying to demo drools-fusion for a system that processes backup events.
> i have the following 2 CEP rules:
>
> rule "Backup Not Succeeded For At Least 3 Days"
> @ruleId(1)
> when
> Node($id : id)
> not ( Backup(clientId == $id, $state: state ==
> BackupStateEnum.FINISHED) over window:time( 3d ) from entry-point "Backup
> Stream" )
> then
> //nothing for now
> end
>
> rule "Prune Previous Successful Backups"
> @ruleId(2)
> when
> $prevBackup  : Backup($id : clientId,  state ==
> BackupStateEnum.FINISHED) from entry-point "Backup Stream"
> $newerBackup : Backup(clientId == $id, state ==
> BackupStateEnum.FINISHED, this after $prevBackup) from entry-point "Backup
> Stream"
> then
> drools.retract($prevBackup);
> end
>
> rule #2 is my attempt to cut down on memory usage. the problem is that rule
> #2 slows down the processing very very considerably (2 orders of magnitude
> slower when simulating batches of 40K events/day).
>
> what would be my next step in trying to find the reason for it? my
> intuition tells me that with 2 events in the system at any given time
> instead of 120K (single node, 40K events/day 3 day window) i should have
> seen either a speedup or reduced memory consumption (if not both) and yet
> the results im seeing are the exact opposite.
> is there anything im missing ? i could try adding some sort of
> LastSuccessfulBackup "marker" object into main memory and updating it using
> events from the backup stream, but then how would i express rule #1 ?
>
> any help/clues/suggestions would be greatly appreciated,
>
>radai.
>
> ___
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Integration Of Guvnor with CustomApp

2010-12-23 Thread Esteban Aliverti
So this is a wonderful situation to make a contribution ;) I think the
functionality you are looking for should be easy to implement. Please ask
Andrew about this. I'm sure he will be glad to help you.

Best Regards,



Esteban Aliverti
- Developer @ http://www.plugtree.com
- Blog @ http://ilesteban.wordpress.com


2010/12/23 

> Esteban
>
> I too am trying to integrate the Rule editing widget into my web page. I
> followed your writeup, very helpful indeed.
>
> What is missing though is a handy method to get all rules under a category.
> In my app (and I suspect in most cases where people are trying to embed the
> asset editor), we only want to retrieve those rules that belong to the
> category that the web user has access to. There seems to be no way of doing
> this in the REST API or the service classes built on top of RulesRepository.
>
> Thanks
> Ghanshyam
>
>
>
> From:Esteban Aliverti 
> To:Rules Users List 
> Date:12/23/2010 09:54 AM
> Subject:Re: [rules-users] Integration Of Guvnor with CustomApp
> Sent by:rules-users-boun...@lists.jboss.org
> --
>
>
>
> Andrew Waterman and Jervis Liu were working on a REST API for Guvnor: *
> https://issues.jboss.org/browse/GUVNOR-1080*
>  Maybe
> you can help them.
> In the other hand, I have implemented a way to embedd Guvnor's editors in
> external applications: *
> http://ilesteban.wordpress.com/2010/11/23/guvnor-embed-assets-editor-in-your-application/
> *
>
>
> Best Regards,
>
> 
>
> Esteban Aliverti
> - Developer @ *http://www.plugtree.com * 
> - Blog @ *http://ilesteban.wordpress.com*
>
>
> 2010/12/23 Harshit Bapna <*hrba...@gmail.com* >
> Hello All,
>
> I am able to successfully integrate Guvnor into my custom app. (based on
> spring)
> (*
> http://drools-java-rules-engine.46999.n3.nabble.com/How-to-integrate-Guvnor-GUI-in-a-test-app-td1595617.html
> *
> )
>
> I have written some code in the index.jsp which invokes the
> ServiceImplementation of Guvnor.
> I am observing that RuleRepository object is coming as null.
> Note: Through the integrated app If I hit the Guvnor URL than it is working
> as normal.
>
> private ServiceImplementation getService() {
>  ServiceImplementation impl = new ServiceImplementation();
>  RulesRepository repository = impl.getRulesRepository();
>  return impl;
> }
>
> What is the suggested way of using the Guvnor services from the jsp/java ?
>
>
>
> ___
> rules-users mailing list*
> **rules-us...@lists.jboss.org* *
> **https://lists.jboss.org/mailman/listinfo/rules-users*
>
> ___
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
> - The information contained in this
> communication (including any attachments hereto) is confidential and is
> intended solely for the personal and confidential use of the individual or
> entity to whom it is addressed. If the reader of this message is not the
> intended recipient or an agent responsible for delivering it to the intended
> recipient, you are hereby notified that you have received this communication
> in error and that any review, dissemination, copying, or unauthorized use of
> this information, or the taking of any action in reliance on the contents of
> this information is strictly prohibited. If you have received this
> communication in error, please notify us immediately by e-mail, and delete
> the original message. Thank you
> ___
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Integration Of Guvnor with CustomApp

2010-12-23 Thread GPatel
Esteban

I too am trying to integrate the Rule editing widget into my web page. I 
followed your writeup, very helpful indeed.

What is missing though is a handy method to get all rules under a 
category. In my app (and I suspect in most cases where people are trying 
to embed the asset editor), we only want to retrieve those rules that 
belong to the category that the web user has access to. There seems to be 
no way of doing this in the REST API or the service classes built on top 
of RulesRepository.

Thanks
Ghanshyam



From:   Esteban Aliverti 
To: Rules Users List 
Date:   12/23/2010 09:54 AM
Subject:Re: [rules-users] Integration Of Guvnor with CustomApp
Sent by:rules-users-boun...@lists.jboss.org



Andrew Waterman and Jervis Liu were working on a REST API for Guvnor: 
https://issues.jboss.org/browse/GUVNOR-1080 Maybe you can help them.
In the other hand, I have implemented a way to embedd Guvnor's editors in 
external applications: 
http://ilesteban.wordpress.com/2010/11/23/guvnor-embed-assets-editor-in-your-application/
 

Best Regards,



Esteban Aliverti
- Developer @ http://www.plugtree.com 
- Blog @ http://ilesteban.wordpress.com


2010/12/23 Harshit Bapna 
Hello All,
 
I am able to successfully integrate Guvnor into my custom app. (based on 
spring)
(
http://drools-java-rules-engine.46999.n3.nabble.com/How-to-integrate-Guvnor-GUI-in-a-test-app-td1595617.html
)
 
I have written some code in the index.jsp which invokes the 
ServiceImplementation of Guvnor.
I am observing that RuleRepository object is coming as null.
Note: Through the integrated app If I hit the Guvnor URL than it is 
working as normal.
 
private ServiceImplementation getService() {
 ServiceImplementation impl = new ServiceImplementation();
 RulesRepository repository = impl.getRulesRepository();
 return impl;
}
 
What is the suggested way of using the Guvnor services from the jsp/java ?
 
 

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users



-
The information contained in this communication (including any
attachments hereto) is confidential and is intended solely for the
personal and confidential use of the individual or entity to whom
it is addressed. If the reader of this message is not the intended
recipient or an agent responsible for delivering it to the intended
recipient, you are hereby notified that you have received this
communication in error and that any review, dissemination, copying,
or unauthorized use of this information, or the taking of any
action in reliance on the contents of this information is strictly
prohibited. If you have received this communication in error,
please notify us immediately by e-mail, and delete the original
message. Thank you ___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Integration Of Guvnor with CustomApp

2010-12-23 Thread Esteban Aliverti
Andrew Waterman and Jervis Liu were working on a REST API for Guvnor:
https://issues.jboss.org/browse/GUVNOR-1080 Maybe you can help them.
In the other hand, I have implemented a way to embedd Guvnor's editors in
external applications:
http://ilesteban.wordpress.com/2010/11/23/guvnor-embed-assets-editor-in-your-application/


Best Regards,



Esteban Aliverti
- Developer @ http://www.plugtree.com
- Blog @ http://ilesteban.wordpress.com


2010/12/23 Harshit Bapna 

> Hello All,
>
> I am able to successfully integrate Guvnor into my custom app. (based on
> spring)
> (
> http://drools-java-rules-engine.46999.n3.nabble.com/How-to-integrate-Guvnor-GUI-in-a-test-app-td1595617.html
> )
>
> I have written some code in the index.jsp which invokes the
> ServiceImplementation of Guvnor.
> I am observing that RuleRepository object is coming as null.
> Note: Through the integrated app If I hit the Guvnor URL than it is working
> as normal.
>
> private ServiceImplementation getService() {
>  ServiceImplementation impl = new ServiceImplementation();
>  RulesRepository repository = impl.getRulesRepository();
>  return impl;
> }
>
> What is the suggested way of using the Guvnor services from the jsp/java ?
>
>
>
> ___
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


[rules-users] Integration Of Guvnor with CustomApp

2010-12-23 Thread Harshit Bapna
Hello All,

I am able to successfully integrate Guvnor into my custom app. (based on
spring)
(
http://drools-java-rules-engine.46999.n3.nabble.com/How-to-integrate-Guvnor-GUI-in-a-test-app-td1595617.html
)

I have written some code in the index.jsp which invokes the
ServiceImplementation of Guvnor.
I am observing that RuleRepository object is coming as null.
Note: Through the integrated app If I hit the Guvnor URL than it is working
as normal.

private ServiceImplementation getService() {
 ServiceImplementation impl = new ServiceImplementation();
 RulesRepository repository = impl.getRulesRepository();
 return impl;
}

What is the suggested way of using the Guvnor services from the jsp/java ?
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


[rules-users] Unable to validate package configuration (eg, DSLs, models) for [package name]

2010-12-23 Thread John Peterson
Hi,

We recently upgraded from Drools/Guvnor 5.0.1 to 5.1.1 (early December).
We had an existing package we had developed in 5.0.1 that we had not
done much with since the upgrade.  This morning, we tried to open one of
the rules in that package and we get the following messages:

 <> 
Unable to validate package configuration (eg, DSLs, models) for [package
name]. Suggestion completions may not operate correctly for graphical
editors for this package.



 <> 
Unable to get content assistance for this rule.



 <> 
Unable to get content assistance for this rule.



I've tried to re-upload the 3 jar files (I saw this post as a possible
solution: http://comments.gmane.org/gmane.comp.java.drools.user/23407),
but I get "Unable to upload the file".  New packages seem to be okay
(e.g. packages created since the upgrade).  Does anyone have any
thoughts on what's going on here?

Thanks.
<><><>___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools Flow Fluent API Help

2010-12-23 Thread Daniel Nathanson
"I am using Drools 5.1.0, but it doesn't work with Drools 5.0.1 either."

I'm pretty sure I must be missing a step when going from  
DroolsFlowProcess --> StatefulKnowledgeSession, but I can't figure it  
out.  I'm probably getting one of the intermediate classes  
incorrectly.  Probably calling a constructor when I should be using a  
factory method, or something like that.

Regards,

Dan Nathanson

On Dec 23, 2010, at 3:10 AM, Mauricio Salatino wrote:

> I am using Drools 5.1.0, but it doesn't work with Drools 5.0.1 either.

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


[rules-users] help with diagnosing CEP performance issue

2010-12-23 Thread me
Hi.

im trying to demo drools-fusion for a system that processes backup events.
i have the following 2 CEP rules:

rule "Backup Not Succeeded For At Least 3 Days"
@ruleId(1)
when
Node($id : id)
not ( Backup(clientId == $id, $state: state == BackupStateEnum.FINISHED)
over window:time( 3d ) from entry-point "Backup Stream" )
then
//nothing for now
end

rule "Prune Previous Successful Backups"
@ruleId(2)
when
$prevBackup  : Backup($id : clientId,  state ==
BackupStateEnum.FINISHED) from entry-point "Backup Stream"
$newerBackup : Backup(clientId == $id, state ==
BackupStateEnum.FINISHED, this after $prevBackup) from entry-point "Backup
Stream"
then
drools.retract($prevBackup);
end

rule #2 is my attempt to cut down on memory usage. the problem is that rule
#2 slows down the processing very very considerably (2 orders of magnitude
slower when simulating batches of 40K events/day).

what would be my next step in trying to find the reason for it? my intuition
tells me that with 2 events in the system at any given time instead of 120K
(single node, 40K events/day 3 day window) i should have seen either a
speedup or reduced memory consumption (if not both) and yet the results im
seeing are the exact opposite.
is there anything im missing ? i could try adding some sort of
LastSuccessfulBackup "marker" object into main memory and updating it using
events from the backup stream, but then how would i express rule #1 ?

any help/clues/suggestions would be greatly appreciated,

   radai.
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


[rules-users] Redeployment classloading problem in SOA Platform using Guvnor

2010-12-23 Thread camunda
Hey guys.

 

We use the SOA-Platform stack but have a problem when redeploying a
resource, using Drools, see: http://community.jboss.org/thread/160350.

 

Anybody an idea to this? Looks a bit like a drools bug to me, that
something somewhere keeps a reference to undeployed classes?

 

Thanks in advance

Bernd

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] drools from database

2010-12-23 Thread Mark Proctor
On 23/12/2010 05:49, wasim.khan318 wrote:
> sir please give me any example or link so that i can implement it
I've read the thread on this, i think you need to grasp the basics to 
drools first and then come back with more specific questions. Try going 
over all the examples. Then you can either insert facts directly with 
hibernate or you can "pull" via "from" and a hibernate named query.

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] drools from database

2010-12-23 Thread Mauricio Salatino
Did you try with the documentation??
http://downloads.jboss.com/drools/docs/5.1.1.34858.FINAL/drools-expert/html_single/index.html#d0e6174
There is a whole section for templates :)

On Thu, Dec 23, 2010 at 2:49 AM, wasim.khan318 wrote:

>
> sir please give me any example or link so that i can implement it
> --
> View this message in context:
> http://drools-java-rules-engine.46999.n3.nabble.com/drools-from-database-tp2130575p2135152.html
> Sent from the Drools - User mailing list archive at Nabble.com.
> ___
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



-- 
 - CTO @ http://www.plugtree.com
 - MyJourney @ http://salaboy.wordpress.com
 - Co-Founder @ http://www.jbug.com.ar

 - Salatino "Salaboy" Mauricio -
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools Flow Fluent API Help

2010-12-23 Thread Mauricio Salatino
Hi There..
What version of Drools are you using?
I can help you to figure out what is happening..

2010/12/23 Dan Nathanson 

> Hi,
>
> I've been banging my head against this for days and just can't get it
> to work.  At this point I'd like to just get the example code working.
>  I've got a simple class that is currently being driven by a JUnit
> test case.  I just want to create a Process flow and execute it.  I
> don't care what it does at this point.  Hello world level stuff.
>
> My method under test:
>
>public String runFlow() throws Exception {
>
>RuleFlowProcessFactory factory
> = RuleFlowProcessFactory.createProcess("org.drools.process");
>factory
>// header
>.name("My process").packageName("org.drools")
>// nodes
>.startNode(1).name("Start").done()
>.actionNode(2).name("Action")
>.action("java", "System.out.println(\"Hello
> World\");").done()
>.endNode(3).name("End").done()
>// connections
>.connection(1, 2)
>.connection(2, 3);
>
>RuleFlowProcess process = factory.validate().getProcess();
>
>KnowledgeBase knowledgeBase =
> KnowledgeBaseFactory.newKnowledgeBase();
>KnowledgeBuilder builder =
> KnowledgeBuilderFactory.newKnowledgeBuilder(knowledgeBase);
>
>Package pkg = new Package("package1");
>pkg.addProcess(process);
>RuleBase ruleBase = RuleBaseFactory.newRuleBase();
>ruleBase.addPackage(pkg);
>
>Collection kpackages =
> builder.getKnowledgePackages();
>KnowledgePackage kpackage = new KnowledgePackageImp(pkg);
>kpackages.add(kpackage);
>knowledgeBase.addKnowledgePackages(kpackages);
>
>StatefulKnowledgeSession ksession =
> knowledgeBase.newStatefulKnowledgeSession();
>
>KnowledgeRuntimeLogger logger =
> KnowledgeRuntimeLoggerFactory.newConsoleLogger(ksession);
>
>ksession.startProcess("org.drools.process");
>
>return "foo";
>}
>
> When I run this process, I get an exception when the Action node is
> run.  It is a NPE and it happens because the metaData map in the
> underlying ActionNode does not contain a KVP for "Action".  It looks
> like that KVP is added in in the DroolsAction class when the public
> void wire(Object object) method is called.  Unfortunately, I can't
> figure out what causes that method to be called.  I'm pretty sure my
> problem is with the set up of my knowledge base (the call to new
> KnowledgePackageImp() is suspect), but I can't figure out how to set
> up the knowledge base when building a RuleFlowProcess using the
> RuleFlowProcessFactory.  None of the examples I can find show how to
> do this.
>
> Note that if I take out the Action node and just have Start and End
> nodes, it works fine.
>
> I am using Drools 5.1.0, but it doesn't work with Drools 5.0.1 either.
>
> Any help would be appreciated.  The flat spot on my forehead is
> getting flatter every day I continue to bang my head against the wall.
>
> Here's the output (including KnowledgeRuntimeLogger output):
>
> BEFORE RULEFLOW STARTED process:My process[id=org.drools.process]
> BEFORE RULEFLOW NODE TRIGGERED node:Start[id=1] process:My
> process[id=org.drools.process]
> null process:My process[id=org.drools.process]
> BEFORE RULEFLOW NODE TRIGGERED node:Action[id=2] process:My
> process[id=org.drools.process]
>
> java.lang.RuntimeException: unable to execute Action
>at
> org.drools.workflow.instance.node.ActionNodeInstance.internalTrigger(ActionNodeInstance.java:56)
>at
> org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:117)
>at
> org.drools.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:178)
>at
> org.drools.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:144)
>at
> org.drools.workflow.instance.node.StartNodeInstance.triggerCompleted(StartNodeInstance.java:49)
>at
> org.drools.workflow.instance.node.StartNodeInstance.internalTrigger(StartNodeInstance.java:41)
>at
> org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:117)
>at
> org.drools.ruleflow.instance.RuleFlowProcessInstance.internalStart(RuleFlowProcessInstance.java:32)
>at
> org.drools.process.instance.impl.ProcessInstanceImpl.start(ProcessInstanceImpl.java:192)
>at
> org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl.start(WorkflowProcessInstanceImpl.java:309)
>at
> org.drools.common.AbstractWorkingMemory.startProcess(AbstractWorkingMemory.java:1644)
>at
> org.drools.common.AbstractWorkingMemory.startProcess(AbstractWorkingMemory.java:1622)
>at
> org.drools.impl.StatefulKnowledgeSessionImpl.startProcess(StatefulKnowledgeSessionImpl.java:301)
>at
> com.proferi.epm.process.DroolsFlowManager.runFlow(DroolsFlowMan

Re: [rules-users] Too many ACTIVATION "candidates"

2010-12-23 Thread Swindells, Thomas
> > I'd say that this rule should actually be written as 16 rules - one for
> > each of the or'd together GoodsItems conditions, each of these rules would
> > only depend on a single Fact and you won't get into this problem.
>
> True. This rule can be re-written as a series of 5 rules that do not
> exhibit the explosion of activation candidates. I have done so and
> everything worked fine.
>
> >
> > Who controls the custom interface? If you can control then the simplest
> > solution is to prevent them doing or's of conditions (though perhaps this
> > may not fly with your customers). Alternatively have the interface output
> > an intermediate form which you can then control the compilation of.
>
> The custom interface, you may think of it as a simplified Guvnor, is under
> my total control as I've implemented it.
> The problem is, that the user can use it to write these kinds of rules.
> In theory, rule rewriting could be possible, but I'm not sure I can detect
> these kinds of dependencies for any kind of rule that may be written.

No, I think they should be rewritten as a series of 16 rules (one for each '||'.
You could remove the option from the user of being able to 'or' together 
conditions and require each thing to be written as separate rules. This should 
reduce the Cartesian products for the majority of cases (although creative 
users could still possibly write statements like (fact1 != 
"thiswillneverhappen" && fact2 != "thiswillneverhappen2"...)/

> It there is a way that these kinds of cartesian product of activation
> candidates can be estimated before hand (either by analyzing the rule or
> by some other means), it would be great.
> Any ideas are welcomed.
It depends on how accurate you want it.
Simplist option is to restrict the number of facts that a rule can match 
against (if they can only match against 3 facts the Cartesian product probably 
isn't too bad).
Slightly more complicated you can assume the worst case scenario that every 
value of each fact type is included and multiple the count of each included 
fact together, if it exceeds a configured limit you decide that potentially the 
rule is too complicated.
Getting much more complicated is to perform a much more accurate estimation of 
each fact based upon the constraints. You could either do this in code (perhaps 
a db query or some other way to apply the constraint).
Another way to do this would be to decompose the rules so that you accumulate 
the result of each fact constraint first, check whether too many facts have 
been included and then use a from for each accumulation at the end (or 
something like that anyway).

Thomas


**
This message is confidential and intended only for the addressee. If you have 
received this message in error, please immediately notify the 
postmas...@nds.com and delete it from your system as well as any copies. The 
content of e-mails as well as traffic data may be monitored by NDS for 
employment and security purposes. To protect the environment please do not 
print this e-mail unless necessary.

NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, 
United Kingdom. A company registered in England and Wales. Registered no. 
3080780. VAT no. GB 603 8808 40-00
**

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Too many ACTIVATION "candidates"

2010-12-23 Thread rouvas
Swindells, Thomas wrote:
> Your problem is you have a series of 5 facts which have no dependent
> constraints between them, the constraint is only applied by the last fact
> and even that isn't constraining as it involves ors not ands (if there is
> a fact 5 that matches then every combination of valid facts1-4 would be
> included).

Indeed that is the issue.
In my case, the facts 1...5 are not related and the only constraint is
specified at the last fact.

>
> I'd say that this rule should actually be written as 16 rules - one for
> each of the or'd together GoodsItems conditions, each of these rules would
> only depend on a single Fact and you won't get into this problem.

True. This rule can be re-written as a series of 5 rules that do not
exhibit the explosion of activation candidates. I have done so and
everything worked fine.

>
> Who controls the custom interface? If you can control then the simplest
> solution is to prevent them doing or's of conditions (though perhaps this
> may not fly with your customers). Alternatively have the interface output
> an intermediate form which you can then control the compilation of.

The custom interface, you may think of it as a simplified Guvnor, is under
my total control as I've implemented it.
The problem is, that the user can use it to write these kinds of rules.
In theory, rule rewriting could be possible, but I'm not sure I can detect
these kinds of dependencies for any kind of rule that may be written.

It there is a way that these kinds of cartesian product of activation
candidates can be estimated before hand (either by analyzing the rule or
by some other means), it would be great.

Any ideas are welcomed.

-Stathis

>
> Thomas.
>
>> -Original Message-
>> From: rules-users-boun...@lists.jboss.org [mailto:rules-users-
>> boun...@lists.jboss.org] On Behalf Of rou...@di.uoa.gr
>> Sent: 22 December 2010 17:05
>> To: Wolfgang Laun
>> Cc: Rules Users List
>> Subject: Re: [rules-users] Too many ACTIVATION "candidates"
>>
>> Wolfgang Laun wrote:
>> > Are the constraints c9 == "R" true for all Facts of type
>> > fact1,...fact5?
>> > Is this actually the only constraint?
>>
>> For the example rule I have posted, this is the only constraint.
>> The equality test for "R", in that case does not really prune the facts
>> a
>> lot. The numbers I have posted are roughly correct.
>>
>> >
>> > The not doesn't really reduce the network since it is the last
>> pattern.
>>
>> Indeed. I have found this to be true the hard way!
>>
>> >
>> > I'll wait for your answer before proposing a solution.
>>
>> Please, take into consideration the general case for this kind of
>> problem.
>> I know that the particular rule I have posted can be re-written as a
>> series of 5 rules that each one test for a single fact.
>> I have done so for this particular rule and there was no issue getting a
>> result.
>>
>> The problem is, that I do not have direct control over the rules, the
>> users write them (through a custom interface).
>>
>> So I am actually wondering if there is a way to foresee these kinds of
>> problems without actually executing the rules.
>>
>> Thank you for your time,
>> -Stathis
>>
>>
>> >
>> > -W
>> >
>> >
>> >
>> > On 22 December 2010 15:34,  wrote:
>> >
>> >> Hello List,
>> >>
>> >> Issue: Too many ACTIVATION "candidates"
>> >>
>> >> Sorry for the terminology, I'm sure it is not correct.
>> >>
>> >> Background Information:
>> >> - Drools.5.0.1
>> >> - using StatefulKnowledgeSession
>> >> - logging through KnowledgeRuntimeLoggerFactory.newConsoleLogger()
>> >> - after each session creation, rules are inserted from a DRL file,
>> >>  facts are inserted and ksession.fireAllRules() is executed
>> >> - str[contains] and str[bidicontains] are custom operators
>> implemented
>> >> by
>> >> me
>> >>
>> >> If I understand Drools modus operandi correctly, as each fact is
>> >> inserted
>> >> the list of candidate "nodes" to fire are constructed. Upon
>> >> fireAllRules(), a selection mechanism selects a candidate "node" to
>> fire
>> >> and things start
>> >> rolling.
>> >>
>> >> In my case, the rule at the end results in too many candidate "nodes"
>> >> created during facts insertion mode. If the rule ever gets to fire,
>> only
>> >> one will remain since the not codition in the LHS and the
>> logicalInserts
>> >> in the RHS exclude two firings of the rule (I hope).
>> >>
>> >> fact1 has about 90 entries.
>> >> fact2 has about 25 entries.
>> >> fact3 has about 350 entries.
>> >> fact4 has about 150 entries.
>> >> fact5 has about 250 entries.
>> >>
>> >> So I'm guessing that 90*25*350*150*250=29.531.250.000, i.e. 29
>> billion
>> >> candidate "nodes" would be created. Of course, I'm having OME long
>> >> before
>> >> that!
>> >>
>> >> If my analysis is correct, is any way that I could either:
>> >>
>> >> a) detect that kind of combinatorial explosion during runtime (maybe
>> a
>> >>   kind of dry-run) and act accordingly
>> >>
>> >> or
>> >>
>> >> b) set any kind of upp