I have a container class that has a field that exposes a collection of record
numbers. In the working memory, I have a bunch of record objects, and one
container object. I want to write a rule that fires when it encounters a
container that has records matching some criteria. Here's what I thought
would work:
1 when
2 Container( $things : things -> ( $things.size() > 0 ) )
3 $count : ArrayList( size > 0 ) from
4 collect( Record( $things contains number, otherfield == "somevalue" ) )
5 then
6 ...
Unfortunately, that gets me an error:
InvalidRulePackage: Unable to create Field Extractor for '$things'
(I determined that the problem is in line 4)
Seems to me that what I'm doing is reasonable, and ought to work. Is this a
bug, an oversight in drools, or is it in fact unreasonable?
The following "works":
collect( Record( num : number -> ( $rlis.contains(num) ) ) )
But since the predicate is not time-constant (the list of things in the
Container will change), I'd have to modify() every Record every time I wanted
to re-run the rules. That would not be very performant...
Note that this is actually unrelated to "collect" -- this doesn't work either:
1 when
2 Container( $things : things )
3 Record( $things contains number )
4 then
(I'm using trunk, revision 8056, updated this morning)
--
Dirk Bergstrom [EMAIL PROTECTED]
_____________________________________________
Juniper Networks Inc., Computer Geek
Tel: 408.745.3182 Fax: 408.745.8905
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email