[rules-users] Rule definition help

Edson Tirelli tirelli at post.com
Fri Feb 23 08:24:57 EST 2007


    Michael,

    Yes, it is surelly heavier to make database calls in the LHS of a 
rule when compared to handling objects in memory. Sometimes, though, it 
is not possible or not worth to load your objects from the database in 
advance and you need to go for loading as needed in LHS. Although, the 
best would be to use "from" CE, as it caches some results and allow 
Rahul to do more or less what he wants.
    Example: pretend you have Power and Temperature objects, you could 
do something like:

rule "Device not working (condition id = 4)"
  when
    alertDefinition : AlertDefinition (conditionID== 4, eid : entityID)
    Power( value < 1000 ) from dao.getPower( eid )
    Temperature( deviceTemp > 50, ambTemp > 40 ) from dao.getTemperature(eid)
  then
    log("Triggered Device not working  alert for "+ eid);
end

   
   Hope it helps,

      Edson


Anstis, Michael (M.) wrote:

>It seems inefficient to make calls to a database from a rule LHS as (I'm
>guessing [Edson?]) that the Rete network can't be built\optimised around
>an evaluated predicate (trying to use the correct language, but possibly
>failing badly). Would the AlertCondition not already have these
>properties populated? Making the rule simpler too:
>
>Rule "Device not working (condition id = 4)"
>	when
>		$ac : AlertCondition (conditionId ==4, $eid : entityID,
>$p : power, $at : ambTemperature)
>	then
>		log("Triggered Device not working  alert for " + $eid +
>", power=" + $p + ", ambient temperature=" + $at);
>end
>
>-----Original Message-----
>From: rules-users-bounces at lists.jboss.org
>[mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Rahul Phadnis
>Sent: 22 February 2007 21:12
>To: rules-users at lists.jboss.org
>Subject: [rules-users] Rule definition help
>
>I am very new to JBoss rules and I am trying to use it
>for evaluating alert conditions.
>
>I am asserting the AlertDefinition object as a fact
>into the working memory.
>
>The rules file would define a variety of alert
>condition rules. 
>for example
>
>rule "Device not working (condition id = 4)"
>    # the if part
>	when
>        alertDefinition : AlertDefinition (conditionID
>== 4, 
>        eid : entityID)
>        # here i would like to get the last power
>reading from device
>        # with id == eid 
>        eval (dao.getPower(eid).doubleValue() < 1000)
>        # then get temperature from the device
>        eval ((dao.getTemperature(eid) != null && 
>dao.getTemperature(eid) > 50)
>        || (dao.getAmbTemperature(eid) != null && 
>dao.getAmbTemperature(eid) > 40)
>        ) 
>        
>	then
>        # what do we do if the rule evaluates to true
>        log("Triggered Device not working  alert for "
>+ eid);
>end
>
>
>Here are  my questions:
>
>1. Am using the evals correctly? Can I possibly split
>this into multiple rules to make it work better?
>
>2. Can assign dao.getTemperature(eid) to a field. The
>getTemperature call is expensive and doing it twice is
>not right.
>
>Any pointer would be appreciated.
>
>-Rahul
>
>_______________________________________________
>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
>
>  
>


-- 
 Edson Tirelli
 Software Engineer - JBoss Rules Core Developer
 Office: +55 11 3124-6000
 Mobile: +55 11 9218-4151
 JBoss, a division of Red Hat @ www.jboss.com





More information about the rules-users mailing list