[rules-users] Fetching values of an object's attribute set by different rules

Kris Nuttycombe kris.nuttycombe at gmail.com
Mon Aug 11 15:44:05 EDT 2008


Maybe this doesn't apply to your actual domain, but it seems to me
that you probably need some additional rules to decide what to do when
multiple conditions that affect the same values are encountered. By
analogy, when you're writing multithreaded code with a shared memory
model, you have to explicitly handle conditions where a variable is
modified concurrently by multiple threads. In the situation you
describe, it sounds like you need to add some "synchronization" logic
that explicitly defines how to handle such conflicts.

My implementation would probably assert a new WashInstruction object
for each rule encountered, and then I'd use another rule or two to
find the WashInstruction with the highest precedence and retract the
others - and then I'd use a query to retrieve that final
WashInstruction from the session.

Kris

On Mon, Aug 11, 2008 at 3:03 AM, psentosa <psentosa at yahoo.com> wrote:
>
> Hi,
>
> I have the following problems:
> I need to prove an object based on certain rules, where the parts of the
> rules should be kept to be used in further process within my application.
> In order to fetch those parts, my idea was to insert an additional object as
> value holder for the rule's parts,
> put values on them when the corresponding rule is fired, so that later on I
> can process those value holder after my appl gets the control back from
> Ruleengine.
>
>
> The example below:
>
> Shirt shirt = new Shirt(...)
> WashRuleValueHolder holder = new WashRuleValueHolder();
>
> session.insert(shirt);
> session.insert(holder);
> ......
>
> session.dispose()
>
> System.out.println(holder.getTemperature());
> System.out.println(holder.getDetergent());
> =======================
>
> rule A
> when
>      Shirt (dirtinessLevel == high)
>      $holder : WashRuleValueHolder()
> then
>      System.out.println ("this cloth should be washed in 60 degree water
> with 1 spoon of detergent")
>     $holder.temperature = 60;
>     $holder.detergent = 1;
>
> rule B
> when
>     Shirt(material == satin)
>     $holder : WashRuleValueHolder()
> then
>       System.out.println ("this cloth should be washed in 30 degree water
> with 0,5 spoon of detergent")
>     $holder.temperature = 30;
>     $holder.detergent = 0,5;
>
> Now, in case both rules evaluate to true, I'd have problem with my
> valueholder, bcs depending on which one of the rules was fired latest,
> that'd be the value I got from the holder, and I need both of them.
> So, my questions:
>
> - Is using such a value holder a good solution to fetch the rules' value? Or
> is there any better solution?
> - How to handle this problem of multiple value association to the holder, so
> I still can get all the values without one overwriting the other and they
> are still connected?
>
> Any idea highly appreciated, thanks in advance!
>
>
>
> --
> View this message in context: http://www.nabble.com/Fetching-values-of-an-object%27s-attribute-set-by-different-rules-tp18922201p18922201.html
> Sent from the drools - user mailing list archive at Nabble.com.
>
> _______________________________________________
> 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