Rule firing is single threaded so that shouldn't be a problem. However,
the same static variable could be written to by the evaluation of many
conditions and as such it could be overwritten before the consequence is
actually fired. Your rules could be written such this could not happen
but this remains a brittle technique.

Philip Smith
[EMAIL PROTECTED]
(650) 628-7941 (x87941)

-----Original Message-----
From: sol myr [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, January 31, 2006 8:48 AM
To: [email protected]
Subject: Re: [drools-user] Drools: Sharing a value between the rule's
"condition" and "consequence" ?

Thanks very much for this reply :)
  However, I was wondering: will it work in a multi-threaded environment
?
  I have a Servlet, where each HTTP request is handled by a separate
thread, as usual. 
  All those threads use the rule engine, simultaniously... if it's a
static variable, won't they override each other's data ? 
   
                       Thanks again
                       Sol
   
   

Ricardo Rojas Aguirre <[EMAIL PROTECTED]> wrote:
  Hi, I solved the same problem with a local variable defined in the
function 
tag...

To solve your proble try somthing like this...


public static double sqrtResult;





< parameter identifier="num" >
< class > Integer < / class >
< / parameter >

< java:condition >
(sqrtResult=Math.sqrt(num.intValue())) > 1000
< / java:condition >

< java:consequence >
System.out.println( sqrtResult );
< / java:consequence >



Cheers
Rik


----- Original Message ----- 
From: "sol myr" 
To: 
Sent: Tuesday, January 31, 2006 11:04 AM
Subject: [drools-user] Drools: Sharing a value between the rule's 
"condition" and "consequence" ?


> Hi,
> I'm new to Drools. Could anyone please help with the following:
>
> Can you share data between a rule's "condition" and "consequence" ?
> For example:
> - My "condition" calculates some square root (Math.sqrt)
> - The "consequence" needs to print out the same square root
>
> It's not efficient to call Math.sqrt twice... :
>
> < parameter identifier="num" >
> < class > Integer < / class >
> < / parameter >
> < java:condition >
> Math.sqrt(num.intValue()) > 1000
> < / java:condition >
> < java:consequence >
> System.out.println( Math.sqrt(num.intValue())
> < / java:consequence >
>
> Is there a way to store the result of "Math.sqrt" in some temporary 
> variable ( so as to avoid the duplicate calculation ) ?
> Please note I know about "application data", but i'd rather not use
it, 
> because my sqrt is just a temporary value...
>
> Thanks :)
>
>
> ---------------------------------
>
> What are the most popular cars? Find out at Yahoo! Autos 


  


                        
---------------------------------
 Yahoo! Autos. Looking for a sweet ride? Get pricing, reviews, & more on
new and used cars.

Reply via email to