I would hesitate using "from" for accessing nested structures for performance reasons. See the attached project:
$ java -jar target/DroolsNestedTest-1.0.jar from.drl Time: 980ms BAR Duplicates: 58 FOO Duplicates: 38 $ java -jar target/DroolsNestedTest-1.0.jar reference.drl Time: 36ms BAR Duplicates: 48 FOO Duplicates: 38 Note the 27x performance difference. :) In this case it's because I used two "from" statements in a rule, but this is a pretty common occurrence. Just try upping the COUNT parameter in DroolsTest. Prepare to wait a while for the from.drl to finish. The reference.drl does just fine. So, to help out your business users, you might dry a domain specific language. You can generate the nested reference == just as easily as a "from" expression. --- On Thu, 8/13/09, Libor Nenadál <libor.nena...@gmail.com> wrote: > From: Libor Nenadál <libor.nena...@gmail.com> > Subject: Re: [rules-users] Why is a flat object recommended? > To: rules-users@lists.jboss.org > Date: Thursday, August 13, 2009, 9:56 AM > > > Mark Proctor wrote: > > > > We can exploit cartesian products and indexing for == > constraints. If > > its a nested model we have to iterate over all > possible instances. The > > other problem is if the nested model changes the > engine has no idea this > > has happened, which if you are not careful can lead to > data integrity > > issues. > > > I think that plain flat model is too limited for real life. > In fact in most > situations you just cannot avoid nesting. > For example when I try to search for cars with 4 cylinder > engine the best > approach I found is: > > rule "get 4 cylinder cars" > when > Car ( $e: engine != null ) // car without > engine? where are we? :) > Engine ( cylinderCount == 4 ) from $e > then > System.out.println("Found 4 cylinder car."); > end > > This should be quite effective. I doubt that the following > solution with > cartesian product has the same complexity: > > rule "get 4 cylinder cars" > when > $e: Engine ( cylinderCount == 4 ) > Car ( engine == $e ) > then > System.out.println("Found 4 cylinder car."); > end > > Using approach Car ( engine.cylinderCount == 4 ) tends to > raise > NullPointerException and I had problems with assigning the > cylinderCount to > variable so this was not a way to go for me. > > But this is not much a problem for me as I am a programmer > and I can > understand the rule language and data structures. But when > business users > are to edit rules (using Guvnor as the tool of choice) we > come to troubles. > I think that guided editor for rules does not allow "from". > More importantly > - can you create such a structure for a test scenario? I > failed. :( > -- > View this message in context: > http://www.nabble.com/Why-is-a-flat--object-recommended--tp15567690p24954944.html > Sent from the drools - user mailing list archive at > Nabble.com. > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users >
DroolsNested.tar.gz
Description: GNU Zip compressed data
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users