[rules-users] Creating objects in WHEN clause

Greg Barton greg_barton at yahoo.com
Thu Feb 26 12:01:55 EST 2009


--- On Thu, 2/26/09, David Boaz <davidb at dbmotion.com> wrote:

> My Quantity objects are immutable value objects. just like
> the String literal "abc", or a Date. My rule should behave
> exactly like Person(name == "abc")

You should look into defining a domain specific language, as has been suggested earlier.  
 
> Can I instruct Drools not to check for changes on that
> objects?

Not if you're getting them using "from".  Every time it produces output it is assumed to be fresh.  The way you tell drools "this object will only change when I tell you it's changed" is to insert it into working memory.  That's it.  That's why it is there.  I can't say it any plainer. 

Look at it this way: say you specified that an object of type A is immutable.  When it returns from "from" you still have to check if you've seen that particular instance before, and then if you've previously matched it with the other objects in the rule.  Checking if you've seen them before means you have to maintain a memory of that object type, thus specifying how long you want to track each instance of that type.  It's working memory, just in another form.  

> Im sure that Im not the first facing this issue.

Nope. "This issue" is the reason the rete algorithm was invented. :)

I reeeeeeally don't think inserting the Quantity objects into working memory will be as painful as you think.  It can probably be handled behind the scenes without intervention from the rule writer.




      



More information about the rules-users mailing list