[rules-users] Newbie: Why Only One Rule Firing
Wolfgang Laun
wolfgang.laun at gmail.com
Sun Apr 18 03:26:35 EDT 2010
You are explicitly requesting that only one of Docs1 or Docs2 should be
activated. This is the result of putting them into the same
activation-group.
(From the code you've posted, the no-loop attribute is useless as you don't
do any updates in the consequences. And you are in a stateless session
anyway.)
-W
2010/4/18 <Greg.Zoller at aviall.com>
>
> Hello,
>
> Silly newbie question. I'm trying to write my first rule set to handle
> permissions and I'm running into a problem where Drools is not executing the
> 'then' clause of all my rules, even though they all resolve to true.
>
> Here's my sample file:
>
> *rule* "Docs1"
> *activation-group* "permissions"
> *no-loop* *true*
> *when*
> Resources( $resList : resourceList )
> $res : Resource(name=="CUSTOMER", allowed==*false*) *from*$resList
> *then*
> System.out.println("Foo");
> *end*
>
> *rule* "Docs2"
> *activation-group* "permissions"
> *no-loop* *true*
> *when*
> Resources( $resList : resourceList )
> $res : Resource(name=="INVOICES", allowed==*false*) *from*$resList
> *then*
> System.out.println("Wow");
> *end*
>
> I'm using a StatelessKnowledgeSession something like this:
>
> ArrayList ruleObjs = new ArrayList();
> ruleObjs.add(resources);
> kbase.newStatelessKnowledgeSession().execute(ruleObjs);
>
> So here's my problem. Both of the rules above resolve to true. But only
> "Wow" is output to the console. If I comment out the Docs2 rule entirely
> then "Foo" is output to the console (proving it also resolves true).
>
> Why wouldn't I get "Wow" and "Foo" output to the console (in no particular
> order) when both are run?
>
> To see whether both rules are actually being evaluated I also tried
> creating a simple message function that prints something to the console and
> returning true. Then I eval() my function as the last line of the when
> clause in Docs1. "Wow" from Docs2 is output as before, as is my function's
> message (proving that Docs1 was evaluated and resolved truthfully), but...
> Docs1 'then' clause is not executed and Foo is not output. Why?
>
> This scenario holds true if I have lots of rules. Only the 'then' clause
> of last one resolved true is executed even though there may have been
> several other rules that resolved true.
>
> Thanks in advance for any ideas or help!
>
> Best regards,
> Greg
>
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> This e-mail message, including attachments, may contain confidential,
> proprietary, or export controlled information.
> Any unauthorized disclosure, distribution, or other use is prohibited,
> unless expressly authorized.
> If you receive this e-mail in error, please notify the sender, and delete
> all copies of the original message from your systems.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20100418/0d02cb10/attachment.html
More information about the rules-users
mailing list