[rules-users] Need help related to collection of data accessingin rule file.

Swindells, Thomas TSwindells at nds.com
Fri Dec 4 11:59:03 EST 2009


The problem is when you come to modify the object. When you modify something you should tell drools that fact so it can calculate which rules have conditions that may have been modified and need to be re-evaluated.

If you only tell drools about the root object then the only object you can tell drools that you have modified is the root object which means any time you do a modification all your rules will be re-evaluated. This means you are much more likely to end up with rule loops and actions being repeated if you aren't careful.

It seems the best way to write rules is to treat your data as for a relational database and fully normalise it with object references used as keys. However this does make it harder to integrate with other parts of the system.

Thomas
> -----Original Message-----
> From: rules-users-bounces at lists.jboss.org [mailto:rules-users-
> bounces at lists.jboss.org] On Behalf Of Pritam
> Sent: 04 December 2009 16:14
> To: rules-users at lists.jboss.org
> Subject: Re: [rules-users] Need help related to collection of data
> accessingin rule file.
>
>
> I'm still not sure why this is a "bad idea"
> I've flattened out my fact class. Now instead of a collection A has a B
>
> In my decision table, I declare the variable
> $a : Region
>
> and one of the conditions is
> $a.widget.id
>
> (assuming that Region class has a Widget class)
>
> I get the following error on invoking rules
> xstream.mapper.CannotResolveClassException: widget : widget
>
> It's hard for me to image a "flattened" pojo for rules to understand.
> In
> real world, a "Person" has an "Address" and Address has a "State" and
> it
> goes on. Ideally I would like to give the root object to a rule engine
> and
> write the conditions by drilling down the root object.
>
> Unless I'm doing something wrong here, is this possible in drools?
>
>
> Ross H wrote:
> >
> > Just added this point to the wiki on usage patterns:
> >
> > http://www.jboss.org/community/wiki/UsagePatterns
> >
> >
> > On Fri, Dec 4, 2009 at 8:09 PM, Ross H <rossh00 at gmail.com> wrote:
> >
> >> Thanks Thomas, you've added a very important category to my
> thoughts:
> >> what
> >> does and what doesn't work easily in drools. I think this is the
> most
> >> important category. Every framework has a degree of flexibility and
> >> whilst
> >> drools is extremely flexible, the consequences may not be that
> pleasant.
> >>
> >> 2009/12/4 Swindells, Thomas <TSwindells at nds.com>
> >>
> >>  I’d agree, and to join up with the other thread is the exact reason
> why
> >>> we need some decent ‘design pattern’ documentation to explain what
> does
> >>> and
> >>> doesn’t easily work in drools.
> >>>
> >>> Depending what you are trying to do you may be able to use eval to
> >>> perform
> >>> the logic for you, though this will probably involve you writing
> the
> >>> logic
> >>> manually in java. See the thread Re: [rules-users] Can we use
> 'from' CE
> >>> in
> >>> Decision Tables ? for details.
> >>>
> >>>
> >>>
> >>> Thomas
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> *From:* rules-users-bounces at lists.jboss.org [mailto:
> >>> rules-users-bounces at lists.jboss.org] *On Behalf Of *Ross H
> >>> *Sent:* 04 December 2009 08:18
> >>> *To:* Rules Users List
> >>> *Subject:* Re: [rules-users] Need help related to collection of
> data
> >>> accessingin rule file.
> >>>
> >>>
> >>>
> >>> In my limited experience, I'm not sure you can do this in decision
> >>> tables,
> >>> but given the flexibility of Drools there may be a way, but I'm not
> sure
> >>> this is a good thing.
> >>>
> >>>
> >>>
> >>> I suspect the rules you create will be really ugly and not support
> your
> >>> longer term goals of flexibility. It might be better to transform
> your
> >>> data
> >>> into a better fact model that gives you the ability to create real
> >>> business
> >>> rules that are understandable.
> >>>
> >>>
> >>>
> >>> It appears that it is better to create a fact model that is more
> shallow
> >>> and uses almost relational concepts to relate the facts together
> rather
> >>> than
> >>> a deeply nested model (I suspect you are getting this from some
> really
> >>> ugly
> >>> xml structure). So whilst it's a pain, I would reconsider your core
> >>> domain/fact model.
> >>>
> >>> On Fri, Dec 4, 2009 at 4:08 PM, Pritam <infinity2heaven at gmail.com>
> >>> wrote:
> >>>
> >>>
> >>> I have the same problem as I'm trying to create a decision table
> via
> >>> excel
> >>> where the fact is a root object A where A has a collection B, and B
> has
> >>> a
> >>> collection C. My rules are based out of the instance A, loop for
> each
> >>> object
> >>> in B, and within that, loop each object in C. Not sure how I can
> write
> >>> an
> >>> expression for the same.
> >>>
> >>> >From the examples, I see that one can access a particular element
> in A
> >>> by
> >>> $a.listname[1] but in my case, I need to access all elements in the
> >>> loop.
> >>>
> >>> Any suggestions?
> >>>
> >>>
> >>> prasad raju sagi wrote:
> >>> >
> >>> > Hi ,
> >>> >
> >>> > I am trying to create rule  on a fact , which contains arraylist
> of
> >>> > collection and the object in the collection internally contains
> an
> >>> > arraylist of another collection of objects.
> >>> >
> >>> > This looks like  object A contains collection of objects B and B
> >>> contains
> >>> > collection object C
> >>> >
> >>> > A ->  blist ( Arraylist )
> >>> >
> >>> > B -> clist (ArrayList<C> )
> >>> >
> >>> > C-> dlist( ArrayList<D>)
> >>> >
> >>> > D-> type ( string)
> >>> >
> >>> > I am inseting A as fact to the working memory.
> >>> >
> >>> > I am in confusion state like how to write the rule to place
> conditions
> >>>  on
> >>> > collection C.
> >>> >
> >>> > Can I use from in the form of nested from in rule statment.
> >>> > Thanks
> >>> > Prasad Raju Sagi
> >>> > Mobile: 847-644-4103
> >>> >
> >>> >
> >>> >
> >>> >
> >>> > ________________________________
> >>> > From: Aziz Boxwala <boxwala at yahoo.com>
> >>> > To: rules-users at lists.jboss.org
> >>> > Sent: Thursday, June 11, 2009 1:58:28 PM
> >>> > Subject: [rules-users] process order example not working fully
> >>> >
> >>> >
> >>> > I am trying to execute a ruleflow and use rules to assign tasks
> within
> >>> the
> >>> > ruleflow in Drools 5.0.1. I have a drl file included in my
> knowledge
> >>> base
> >>> > that tries to assign a task to a user when a new human task is
> >>> created.
> >>> > This is based on the example in org.drools.example.process.order.
> I
> >>> can't
> >>> > get my code to work. I don't the rules in the example are working
> >>> either
> >>> > (dslr for the task assignment or the drl for dynamic logging).
> After
> >>> some
> >>> > attempts, I found that this condition
> >>> >     WorkItemNodeInstance()
> >>> > does not evaluate to true ever.
> >>> >
> >>> > Do I have to do anything special to make the WorkItemNodeInstance
> >>> appear
> >>> > in working memory?
> >>> >
> >>> > Thanks for any help.
> >>> >
> >>> > --Aziz
> >>> >
> >>> >
> >>> >
> >>> > _______________________________________________
> >>> > rules-users mailing list
> >>> > rules-users at lists.jboss.org
> >>> > https://lists.jboss.org/mailman/listinfo/rules-users
> >>> >
> >>> >
> >>>
> >>> --
> >>> View this message in context:
> >>> http://n3.nabble.com/Re-Need-help-related-to-collection-of-data-
> accessing-in-rule-file-tp60311p67858.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
> >>>
> >>>
> >>>
> >>> ------------------------------
> >>>
> >>>
> >>>
> ***********************************************************************
> ***************
> >>> This message is confidential and intended only for the addressee.
> If you
> >>> have received this message in error, please immediately notify the
> >>> postmaster at nds.com and delete it from your system as well as any
> copies.
> >>> The content of e-mails as well as traffic data may be monitored by
> NDS
> >>> for
> >>> employment and security purposes. To protect the environment please
> do
> >>> not
> >>> print this e-mail unless necessary.
> >>>
> >>> NDS Limited. Registered Office: One London Road, Staines,
> Middlesex,
> >>> TW18
> >>> 4EX, United Kingdom. A company registered in England and Wales.
> >>> Registered
> >>> no. 3080780. VAT no. GB 603 8808 40-00
> >>>
> >>>
> ***********************************************************************
> ***************
> >>>
> >>> ------------------------------
> >>> This message is confidential and intended only for the addressee.
> If you
> >>> have received this message in error, please immediately notify the
> >>> postmaster at nds.com and delete it from your system as well as any
> copies.
> >>> The content of e-mails as well as traffic data may be monitored by
> NDS
> >>> for
> >>> employment and security purposes.
> >>> To protect the environment please do not print this e-mail unless
> >>> necessary.
> >>>
> >>> An NDS Group Limited company. www.nds.com
> >>>
> >>> _______________________________________________
> >>> 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
> >
> >
>
> --
> View this message in context: http://n3.nabble.com/Re-Need-help-
> related-to-collection-of-data-accessing-in-rule-file-tp60311p68353.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


**************************************************************************************
This message is confidential and intended only for the addressee. If you have received this message in error, please immediately notify the postmaster at nds.com and delete it from your system as well as any copies. The content of e-mails as well as traffic data may be monitored by NDS for employment and security purposes. To protect the environment please do not print this e-mail unless necessary.

NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, United Kingdom. A company registered in England and Wales. Registered no. 3080780. VAT no. GB 603 8808 40-00
**************************************************************************************

This message is confidential and intended only for the addressee. If you have received this message in error, please immediately notify the postmaster at nds.com and delete it from your system as well as any copies. The content of e-mails as well as traffic data may be monitored by NDS for employment and security purposes.
To protect the environment please do not print this e-mail unless necessary.

An NDS Group Limited company. www.nds.com




More information about the rules-users mailing list