[rules-users] Dynamic Rules and Eval

Wolfgang Laun wolfgang.laun at gmail.com
Sun Jul 14 15:58:38 EDT 2013


Hmm, I didn't look into this, but, when running with 5.2.0, your test
method registered two (2) firings for the second fireAllRules(), which
doesn't appear to be correct, either. But this may be due to another
bug that doesn't hurt you, because rules won't have only an eval. Use
a slightly more realistic example for tests if you really want to go
back to 5.2.0.

-W

On 14/07/2013, rrdh <rrdh at gmx.net> wrote:
> Ah, thanks for letting me know! I'll try an earlier version then.
>
>
> On Sun, Jul 14, 2013 at 8:54 PM, Wolfgang Laun
> <wolfgang.laun at gmail.com>wrote:
>
>> It's a bug, possibly a regression from 5.2.0 that has been in 5.3.0,
>> 5.4.0 and is still in  5.5.0.
>>
>> It should be very simple to add http://codetidy.com/6206/ as a test
>> case so that this will be fixed.
>>
>> -W
>>
>>
>> On 14/07/2013, Wolfgang Laun <wolfgang.laun at gmail.com> wrote:
>> > Which Drools version do you use?
>> >
>> > On 14/07/2013, k <rrdh at gmx.net> wrote:
>> >> Hi,
>> >> basically it's the same problem this guy had
>> >>
>> http://stackoverflow.com/questions/11485122/non-template-dynamic-rules-in-drools
>> >> <
>> http://stackoverflow.com/questions/11485122/non-template-dynamic-rules-in-drools
>> >
>> >>
>> >> , but the links in that question don't work.
>> >>
>> >> I'd like to dynamically add rules to a running session, but can use
>> >> 'eval'
>> >> only in the very first one. If I add a second rule like the following,
>> it
>> >> won't execute:
>> >>
>> >> ---
>> >>
>> >> String test2 =
>> >>   "\nrule id4" +
>> >>   "\nwhen" +
>> >>   "\neval(0 == 0)" + // if this eval is removed, "done2" is inserted
>> >>   "\nthen" +
>> >>   "\ninsertLogical( \"done2\" );" +
>> >>   "\nend";
>> >>
>> >> kbuilder.add(ResourceFactory.newByteArrayResource(test2.getBytes()),
>> >> ResourceType.DRL);
>> >>
>> session.getKnowledgeBase().addKnowledgePackages(kbuilder.getKnowledgePackages());
>> >>
>> >> fired = session.fireAllRules();
>> >> System.out.println(fired); // 0
>> >> effects = session.getObjects();
>> >> assertTrue("fired", effects.contains("done2")); // fails
>> >>
>> >> ---
>> >>
>> >> You can see the complete Test at http://codetidy.com/6206/
>> >>
>> >> I'm also not sure if this is the correct way to dynamically add rules,
>> so
>> >> please let me know, if there's a better way to add rules from strings.
>> >>
>> >> How can I dynamically add new rules to a running session and still use
>> >> eval?
>> >>
>> >>
>> >>
>> >> --
>> >> View this message in context:
>> >> http://drools.46999.n3.nabble.com/Dynamic-Rules-and-Eval-tp4024908.html
>> >> Sent from the Drools: User forum mailing list archive at Nabble.com.
>> >> _______________________________________________
>> >> rules-users mailing list
>> >> rules-users at lists.jboss.org
>> >> https://lists.jboss.org/mailman/listinfo/rules-users
>> >>
>> >
>> _______________________________________________
>> 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