[rules-dev] Re: [rules-users] Problem with update(fact)

Felipe Piccolini felipe.piccolini at bluesoft.cl
Wed Jul 4 08:10:24 EDT 2007


...Always change the huge signature... sorry...

Edson,

    I tried what you said, but it is not the same... cant get the  
expected result.

With agenda-group the can control de flow, but outside the rules  
(auto-focus didnt work well),
and before that I prefer to use rule-flow-group (and use the GUI).

What Im trying to get is a set of rules that dont depend on flows or  
sequences to work together, because
this set of rules can be large and I dont want the business user have  
to check all rules to know how to write
the next rule... they must be writen in an independent way, but work  
together...

lock-on-active didnt work either to get that result, because when I  
use it stops activations, so the update(fact) actually
has no effect on other rules... I need to put wm.setFocus 
("group1");wm.setFocus("group2");..etc. at the java code...
I dont want to do that...

Maybe you can help me...

an example will be this...(pseudo code)

rule "base vacation days"
	when
		e: Employee( yearsInCompany > 1)
	then
		e.setVacationDays(10);
		update(e);
end

rule "seniors extra vacation days"
	when
		e: Employee( yearsInCompany > 4, vd: vacationDays)
	then
		e.setVacationDays(vd+2);
		update(e);
end

rule "old-employee extra vacation days"
	when
		e: Employee( yearsInCompany > 10, vd: vacationDays)
	then
		e.setVacationDays(vd+4);
		update(e);
end

....and so on....

So I need the business ppl write this rules without knowing the rest  
of the rules... I think this is
the idea of having a rule-system...

Thanks.	


On 03-07-2007, at 16:40, Edson Tirelli wrote:

>
>    Felipe,
>
>    Thanks. I'm working on it.
>
>    BTW, I forgot to mention, what you are doing to control rules is  
> a not a good way to do it. You should try agenda-group+lock-on- 
> active rule attributes instead.
>    Look at the conway's game of life as an example, and maybe help  
> us document the feature... :)
>
>    []s
>    Edson
>
> 2007/7/3, Felipe Piccolini < felipe.piccolini at bluesoft.cl>:
> Edson,
>
> Thanks for the reply... it is nasty...
>
> Jira created...
> http://jira.jboss.com/jira/browse/JBRULES-966
>
> Thanks
>
> PD: duplicated email because I forgot to cut the huge-company- 
> signature... :)
>
> On 03-07-2007, at 14:18, Edson Tirelli wrote:
>
>>
>>    Felipe,
>>
>>    Ok, this is a nasty damn bug. :(
>>
>>    I'm working on a solution for it right now. May I ask you  
>> please to open a JIRA for it and attach your code bellow?
>>
>>    Thank you,
>>         Edson
>>
>> 2007/7/3, Felipe Piccolini < felipe.piccolini at bluesoft.cl>:
>> I know I already asked this in a previous email, but no answer and  
>> diferent subject... so I'll ask again
>>
>> I have an issue using update in 2 rules that update the same  
>> object... a loop is created even when I try to
>> avoid the loop adding an extra condition to each rule... Im  
>> inserting an ArrayList as a fact too, so I can check
>> the extra condition...
>>
>> Can anyone tell me how to fix this?
>>
>> Consider this:
>> //-------RULES-----------------------------
>> package cl.bluesoft.test
>>
>> #list any import classes here.
>> import java.util.List
>> import java.util.ArrayList
>>
>> import cl.bluesoft.test.rules.Fact
>>
>> #declare any global variables here
>>
>> rule "test update A"
>>     salience 699
>>     no-loop
>> 	 when
>> 		 $f : Fact($n: number > 0)
>> 		$list: ArrayList( this excludes "key1" )
>> 	 then
>> 		 System.out.println( "A-fact number1:"+$f.getNumber()+ " list  
>> 1:"+$list);
>> 	 	$list.add( "key1" );
>> 		 $f.setNumber($n + 1);
>> 		 update ($f);
>> 	 	 update ($list);
>>  	 	System.out.println("A-fact number2:" +$f.getNumber()+" list  
>> 2:" +$list);
>> end
>>
>>
>> rule "test update B"
>>     salience 699
>>     no-loop
>> 	when
>>  	 	$f : Fact($n: number > 1)
>> 	 	 $list: ArrayList( this excludes "key2" )
>> 	then
>>  		System.out.println( "B-fact number1:" +$f.getNumber()+" list  
>> 1:" +$list);
>> 		 $list.add("key2" );
>> 		$f.setNumber($n + 1);
>>  		update ($f);
>> 		 update ($list);
>> 		 System.out.println("B-fact number2:" +$f.getNumber()+ " list  
>> 2:"+$list);
>> end
>>
>> //-------FACT-----------------------------
>> public class Fact implements Serializable {
>> 	private static final long serialVersionUID = 331627137981862975L;
>> 	
>> 	private int number;
>> 	
>> 	public Fact(int number){
>> 	 	this.number 	= number;
>> 	}
>>  	
>> 	public Fact(){
>> 		this(0);
>> 	}
>>
>> 	/**
>>  	 * @return the number
>> 	 */
>> 	public int getNumber() {
>> 		return number;
>> 	}
>>
>> 	/**
>> 	 * @param number the number to set
>>  	 */
>> 	public void setNumber(int number) {
>> 	 	this.number = number;
>> 	}
>> 	
>> }
>>
>> //------TEST---------
>> public class TestUpdateFact implements Serializable {
>>
>> 	private static final long serialVersionUID = -574789596641083743L;
>>
>> 	/**
>> 	 * @param args
>>  	 */
>> 	public static void main(String[] args) {
>> 	 	RuleBase ruleBase = RuleBaseFactory.newRuleBase();
>> 	 	Package pkg = builder.getPackage();
>> 	 	....
>> 		WorkingMemory session = ruleBase.getStatefulSession();
>> 		...etc etc...
>>
>> 		List list = new ArrayList();
>> 	 	
>> 		Fact fact1 = new Fact(1);
>>
>> 		session.fireAllRules();
>>
>>  		....etc, etc...
>> 		
>> 	}
>>
>> }
>>
>> //--------OUTPUT------------
>> A-fact number1:1 list 1:[]
>> A-fact number2:2 list 2:[key1]
>> B-fact number1:2 list 1:[key1]
>> B-fact number2:3 list 2:[key1, key2]
>> A-fact number1:3 list 1:[key1, key2]
>> A-fact number2:4 list 2:[key1, key2, key1]
>> B-fact number1:4 list 1:[key1, key2, key1]
>> B-fact number2:5 list 2:[key1, key2, key1, key2]
>> A-fact number1:5 list 1:[key1, key2, key1, key2]
>> A-fact number2:6 list 2:[key1, key2, key1, key2, key1]
>> B-fact number1:6 list 1:[key1, key2, key1, key2, key1]
>> B-fact number2:7 list 2:[key1, key2, key1, key2, key1, key2]
>> A-fact number1:7 list 1:[key1, key2, key1, key2, key1, key2]
>> A-fact number2:8 list 2:[key1, key2, key1, key2, key1, key2, key1]
>> B-fact number1:8 list 1:[key1, key2, key1, key2, key1, key2, key1]
>>
>> .... for ever.....
>>
>> So I have a loop... only when I use update and both rules...   
>> condition about the
>> list not containing "key1" and "key2" seems not properly  
>> chequed... I dont know...
>>
>> Can somebody help me? Am I missing something here?
>>
>> Thanks.
>>
>>
>> Felipe Piccolini M.
>> felipe.piccolini at bluesoft.cl
>>
>>
>>
>>
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>>
>>
>> -- 
>>   Edson Tirelli
>>   Software Engineer - JBoss Rules Core Developer
>>   Office: +55 11 3529-6000
>>   Mobile: +55 11 9287-5646
>>   JBoss, a division of Red Hat @ www.jboss.com
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> Felipe Piccolini M.
> felipe.piccolini at bluesoft.cl
>
>
>
>
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
>
>
> -- 
>   Edson Tirelli
>   Software Engineer - JBoss Rules Core Developer
>   Office: +55 11 3529-6000
>   Mobile: +55 11 9287-5646
>   JBoss, a division of Red Hat @ www.jboss.com
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev


Felipe Piccolini M.
felipe.piccolini at bluesoft.cl




-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20070704/d45fafd7/attachment.html 


More information about the rules-users mailing list