[rules-users] Infinit loop in simple example

Esteban Aliverti esteban.aliverti at gmail.com
Fri Jan 20 09:20:04 EST 2012


import spikes.Applicant
rule "Is of valid age" when
   $a : Applicant( age < 18 )
then
   modify( $a ) { valid = false };
end

By using modify() you are telling the engine that $a was modified in some
way. This causes the re-evaluation of your rule, and since $a.age is still
< 18, then the rule is activated and fired infinite times.
Read the documentation manual about some attributes you can use in your
rules to avoid this behavior: no-loop, lock-on-active.

Best Regards,

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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


On Fri, Jan 20, 2012 at 3:12 PM, roland.kofler <roland.kofler at gmail.com>wrote:

> Simple example loops ad infinitum if executed:
>
> package spikes;
>
> import org.springframework.roo.addon.javabean.RooJavaBean;
>
> @RooJavaBean
> public class Applicant {
> private final String string;
> private final int age;
> public boolean valid=true;
>
> public Applicant(String string, int i) {
>    this.string = string;
>    this.age = i;
> }
> }
> DroolsSpikeTest
>
> package spikes;
>
> import static org.junit.Assert.*;
>
> import org.drools.KnowledgeBase;
> import org.drools.runtime.StatelessKnowledgeSession;
> import org.junit.Test;
> import org.junit.runner.RunWith;
> import org.springframework.beans.factory.annotation.Autowired;
> import org.springframework.test.context.ContextConfiguration;
> import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
>
> @RunWith(SpringJUnit4ClassRunner.class)
>
> @ContextConfiguration(locations={"classpath:**/applicationContext-drools.xml"})
> public class DroolsSpikeTest {
>
>    @Autowired
>    private KnowledgeBase kbase;
>
>    @Test
>    public void testspikeDroolRule() {
>        StatelessKnowledgeSession ksession =
> kbase.newStatelessKnowledgeSession();
>        Applicant a = new Applicant("Mr John Smith", 16);
>        assertTrue(a.isValid());
>        ksession.execute(a);
>        assertFalse(a.isValid());
>    }
>
> }
> applicationContext-drools.xml
>
> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
>
> <beans xmlns="http://www.springframework.org/schema/beans"
> xmlns:aop="http://www.springframework.org/schema/aop"
> xmlns:context="http://www.springframework.org/schema/context"
> xmlns:jee="http://www.springframework.org/schema/jee"
> xmlns:tx="http://www.springframework.org/schema/tx"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:drools="http://drools.org/schema/drools-spring"
> xsi:schemaLocation="http://www.springframework.org/schema/aop
> http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
> http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
> http://www.springframework.org/schema/context
> http://www.springframework.org/schema/context/spring-context-3.1.xsd
> http://www.springframework.org/schema/jee
> http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
> http://www.springframework.org/schema/tx
> http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
> http://drools.org/schema/drools-spring
>
> http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring-1.0.0.xsd
> ">
>
> <drools:kbase id="kbase1">
>   <drools:resources>
>    <drools:resource id="licenseRule" type="DRL"
> source="classpath:spikes/licenseApplication.drl"/>
>   </drools:resources>
>   <drools:configuration>
>       <drools:mbeans enabled="true" />
>   </drools:configuration>
> </drools:kbase>
> <drools:ksession kbase="kbase1" type="stateless" id="ksessionStateless"
> name="stateless1" >
> </drools:ksession>
> </beans>
>
> licenseApplication.drl
>
> import spikes.Applicant
> rule "Is of valid age" when
>    $a : Applicant( age < 18 )
> then
>    modify( $a ) { valid = false };
> end
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/Infinit-loop-in-simple-example-tp3675536p3675536.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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20120120/88723267/attachment.html 


More information about the rules-users mailing list